【问题标题】:MSE and cross validation score drastically differ from residuals in scale for a GLMMSE 和交叉验证分数与 GLM 的规模残差有很大不同
【发布时间】:2017-05-23 22:31:45
【问题描述】:

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

对于初学者 - 应用命令 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。

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

【问题讨论】:

  • 但是与残差命令相比,我如何手动获得相同的值?
  • 好的。那么我怎样才能证明 cv.glm 的增量值如此之大呢?
  • 与我的顾问交谈,因为 nb 模型更灵活,它们可能会考虑一些极端异常值,从而导致更高的 MSE。谢谢你的帮助,哲元!

标签: r regression glm cross-validation mse


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-10-31
    • 2014-02-18
    • 2021-06-09
    • 2020-06-28
    • 2019-05-02
    • 2021-08-05
    • 2021-03-28
    • 2018-09-07
    • 2016-08-04
    相关资源
    最近更新 更多