正如标题所示,正常的散点图以及数据的默认 GAM 拟合应该如下所示:
#### Libraries ####
library(tidyverse)
library(mgcViz)
library(qgam)
library(quantreg)
#### Save Data as Tibble ####
data("barro")
tib <- as_tibble(MASS::mcycle)
tib
#### Inspect Scatterplot ####
tib %>%
ggplot(aes(x=times,
y=accel))+
geom_point(alpha=.4)+
theme_classic()+
geom_smooth(method = "gam",
formula = y ~ s(x))+
labs(x="Times",
y="Acceleration",
title = "Normal Fitted GAM")
从这里安装 QGAM 非常简单:
#### Set Quants and Fit Multiple Quantile GAM ####
q <- c(.2,.5,.8)
fit <- mqgam(accel ~ s(times),
data = tib,
q=q)
但是,绘制每个分位数图表明
mgcViz
包中 QGAM 的绘图机制与应存在的数据点不匹配。在这里,我仅选择 0.20 分位数拟合来显示正在发生的情况,并使用与 此处所示 相同的代码。
#### Save QDO Objects ####
q2 <- qdo(fit,.2)
#### Grab Visual Data ####
pg2 <- getViz(q2)
#### Plot in MGCVIZ ####
final.plot <- plot(pg2,
select = 1)
final.plot +
l_fitLine(colour = "red") +
l_rug(mapping = aes(x=x,
y=y),
alpha = 0.8) +
l_ciLine(mul = 5,
colour = "blue",
linetype = 2) +
l_points(shape = 19,
size = 1,
alpha = 0.1) +
theme_classic()
在这里您可以看到 y 轴上的某些值与原始图上应有的位置不匹配,此处用绿色圈出:
如何解决这个问题?
图中的点是“部分残差”,而不是数据。残差是针对模型定义的;改变模型,部分残差就会改变。当您拟合较低的尾分位数时,我预计相反尾部极端的一些观察结果拟合不佳,因此具有较大的部分残差。 请注意,您用绿色圈出的大部分残差(一个圆圈不包含残差点,因此不确定那里发生了什么?)是数据具有高方差的地方,因此数据更加分散。因此,我预计这里会有更大的部分残差,因为对于您正在建模的分布的相反尾部有更多极端的观察结果。