MSE和交叉验证得分与GLM的比例残差大不相同

时间:2017-05-23 22:31:46

标签: r regression glm cross-validation mse

我遇到了一些我认为很关键的东西,并且在将来装配和分析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

LOOCV中向量delta的默认函数是MSE。

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

1 个答案:

答案 0 :(得分:1)

residuals.glm返回的残差默认为偏差残差。当您执行y - fitted(nb1)时,您会参考原始残差。使用

residuals.glm(nb1, type = "response")