MSE 和交叉验证分数与 GLM 的规模残差截然不同
MSE and cross validation score drastically differ from residuals in scale for a GLM
我遇到了一些我认为很重要的东西,将来在 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。
为什么手动省略的情况和 LOOCV 的 MSE 与应用函数 residuals
时有如此大的不同?
residuals.glm
返回的残差默认为偏差残差。当您执行 y - fitted(nb1)
时,您指的是原始残差。使用
residuals.glm(nb1, type = "response")
我遇到了一些我认为很重要的东西,将来在 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。
为什么手动省略的情况和 LOOCV 的 MSE 与应用函数 residuals
时有如此大的不同?
residuals.glm
返回的残差默认为偏差残差。当您执行 y - fitted(nb1)
时,您指的是原始残差。使用
residuals.glm(nb1, type = "response")