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

speedglm()返回拟合值与glm()结果差异巨大的原因问询

问题原因

你对模型返回字段的定义存在误解,这是导致结果差异的核心原因:

  1. 无论是R基础包的glm()还是speedglm包的speedglm(),linear.predictors字段存储的都是连接函数转换前的线性预测值,对应逻辑回归的公式为:

    $logit(p) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + ... + \beta_n x_n$
    等号右侧的计算结果就是线性预测值,取值范围为全体实数,因此你得到的负数结果属于正常输出。

  2. 你从基础glm()中拿到的fitted.values是经过连接函数逆变换后的最终拟合值,对逻辑回归来说就是sigmoid变换后的概率结果:

    $p = \frac{1}{1+exp(-线性预测值)}$
    所以这个结果才会落在0-1的区间内,符合你对因变量取值范围的预期。

  3. speedglm()中你指定了fitted = TRUE参数后,直接提取speedglm$fitted.values字段即可得到和基础glm()完全对应的概率拟合值,你之前错误提取了linear.predictors字段才会出现结果差异。

验证方法

你可以通过以下代码验证对应关系:

# 验证speedglm的线性预测值经sigmoid变换后等于自身存储的拟合值
all.equal(plogis(speedglm$linear.predictors), speedglm$fitted.values)
# 验证speedglm的拟合值与基础glm的拟合值差异仅为计算精度级别的误差
all.equal(glm$fitted.values, speedglm$fitted.values, tolerance = 1e-6)

另外你提到的“文档说明linear.predictors对应glm的fitted.values”属于错误理解,基础glm()本身也存在linear.predictors字段,其取值和speedglm()的同名字段完全一致,和fitted.values是完全不同的两个输出。

内容的提问来源于stack exchange,提问作者C.Robin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:15:03