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

R语言逻辑回归predict()与手动计算结果不符的原因排查

问题分析:predict()与手动计算结果不一致的原因

你的手动计算存在三个关键错误,导致结果和predict()输出不符,下面逐一拆解并给出正确计算方式:

1. 遗漏了截距项(Intercept)

glm的逻辑回归模型默认包含截距,你的手动公式完全没加入(Intercept)的系数-1.1542256,这是最核心的误差来源。

2. 遗漏了分类变量grade对应的系数

你的测试数据中grade是D3,而glm输出的系数里gradeD3的系数是0.9201400——分类变量在回归中是以基准水平为参照的,未出现在系数列表中的grade类别(比如A类)是基准组,D3属于有系数的对比组,必须把这一项加入线性预测值。

另外你的测试数据sex是Female,对应sexMale的取值为0,所以这一项的贡献为0,这部分你是对的。

3. 公式的括号结构错误

你的手动计算代码里,指数部分的括号逻辑完全错误:

prob_1 <- 1/(1+e^-((-0.0479764603)*41.72451)-0.0139099563*44)

这里e^-()只包裹了interest_rate的项,然后直接减去age项,正确的逻辑应该是把所有线性项的总和取负,也就是:
logit = b0 + b1*x1 + b2*x2 + ...,然后p = 1/(1 + exp(-logit))


正确的手动计算过程

我们按照模型系数和测试数据重新计算:

步骤1:明确各变量对应的系数与取值

变量取值系数项贡献
(Intercept)1-1.1542256-1.1542256
interest_rate41.72451-0.0479765-0.0479765*41.72451 ≈ -2.0010
sexMale0-0.88149450
age44-0.0139100-0.0139100*44 ≈ -0.61204
gradeD310.92014000.9201400

步骤2:计算线性预测值(logit)

logit <- (-1.1542256) + (-0.0479765 * 41.72451) + 0 + (-0.0139100 * 44) + 0.9201400
# 计算结果约为:-2.8471

步骤3:代入sigmoid函数计算概率

prob_correct <- 1/(1 + exp(-logit))
prob_correct
# 输出:0.05478904,和predict()结果完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:02:32