为什么 mgcviz 不使用合适的散点图来拟合 QGAM?

问题描述 投票:0回答:1

正如标题所示,正常的散点图以及数据的默认 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 轴上的某些值与原始图上应有的位置不匹配,此处用绿色圈出:

如何解决这个问题?

r regression quantile gam qgam
1个回答
0
投票

图中的点是“部分残差”,而不是数据。残差是针对模型定义的;改变模型,部分残差就会改变。当您拟合较低的尾分位数时,我预计相反尾部极端的一些观察结果拟合不佳,因此具有较大的部分残差。 请注意,您用绿色圈出的大部分残差(一个圆圈不包含残差点,因此不确定那里发生了什么?)是数据具有高方差的地方,因此数据更加分散。因此,我预计这里会有更大的部分残差,因为对于您正在建模的分布的相反尾部有更多极端的观察结果。

© www.soinside.com 2019 - 2024. All rights reserved.