You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中Gamma回归模型两种MSE计算方法结果不一致排查

问题原因及解决方案

你遇到的差异并非bug,而是因为glm返回的默认残差类型和predict()的默认输出空间都不是你预期的原始响应变量空间:

1. glm$residuals的默认类型不是响应残差

Gamma回归(以及广义线性模型GLM)中,glm对象的residuals默认是工作残差(working residuals),它是在链接函数变换后的空间(而非原始y的空间)计算得到的。

  • 对于Gamma回归默认的inverse链接,工作残差基于变换后的线性预测器(即1/μ,μ是模型拟合的响应均值)计算,和原始观测值y与拟合值μ的差完全不是一回事。

2. predict(glm)默认返回线性预测器,而非响应空间的预测值

predict(my_mod)默认输出的是链接空间的线性预测值(比如inverse链接下就是1/μ),不是原始y空间的拟合值μ。直接用y - predict(my_mod)计算的是y减1/μ,这显然不是你想要的“观测值减预测值”。

修正后的MSE计算方法

要得到正确的原始响应空间的MSE,需要同时指定残差类型为"response",或者让predict()返回响应空间的拟合值:

方法一:使用响应残差

# 获取原始响应残差(y - 拟合的μ)
resid_response <- resid(my_mod, type = "response")
# 计算MSE
mean(resid_response^2)

方法二:手动计算观测值减响应空间预测值

# 获取响应空间的拟合值μ
pred_response <- predict(my_mod, type = "response")
# 计算MSE
mean((my_data$y - pred_response)^2)

运行上述两种方法,你会得到完全一致的结果,这才是你预期的“观测值减预测值的平方均值”。

额外说明

Gamma回归作为广义线性模型的一种,通常更适合用离差(deviance)、Pearson残差等指标做模型评估,而非MSE(因为MSE是针对正态分布误差的评估指标)。但如果你的需求确实是计算原始响应空间的MSE,上述方法可以解决你的问题。


内容的提问来源于stack exchange,提问作者Adrian Keister

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:25:57