1

在 R 中拟合和分析 GLM 时,我遇到了一些我认为很关键的东西,并且将来对人们有用。我的数据集中的响应是频率数据的变量,该集合包含 1762 个观察值。我已经nb1用命令拟合了一个负二项式模型(名为 ),glm.nb我希望估计模型对数据的预测效果。

对于初学者 - 应用命令时residuals.glm(如果我应用命令,结果相同residuals)我得到

head(residuals.glm(nb1))
     1          2          3          4          5          6 
-1.1630170  2.9662854  2.0234981  0.1104864 -0.6636815  0.5303713 

这是合理的,符合诊断图。

这就是它变得令人困惑的地方。手动计算残差时,我得到

head(y - fitted(nb1))
      1           2           3           4           5           6 
-35.4970139  28.2611731  10.0475912   0.2914508 -10.0584696   2.4523959  

用我得到的命令残差计算 MSE

mean(residuals(nb1)^2)
[1] 1.061085

在手动计算 MSE 时我得到

mean((y - fitted(nb1))^2)
[1] 4138.733

这与我应用 LOOCV 时的值基本相同(留一法交叉验证)

loocvnb <- cv.glm(dfg, nb1, data=dfg), K=1764)
$delta
[1] 4352.700 4352.614

deltaLOOCV 中向量的默认函数是 MSE。

为什么手动省略的情况和 LOOCV 的 MSE 与应用函数时有如此大的不同residuals

4

1 回答 1

1

residuals.glm默认情况下,返回的残差是偏差残差。当你这样做时,y - fitted(nb1)你指的是原始残差。采用

residuals.glm(nb1, type = "response")
于 2017-05-24T02:43:04.193 回答