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

R语言两种线性回归写法截距系数不一致是否为Bug?

为什么两个看似相同的lm模型截距不同?

这不是R的错误,问题出在变量类型的差异上:

核心原因

第一个模型中,bath是因子(分类)变量,lm()会自动将其处理为虚拟变量,模型的截距对应bath取参考水平(比如你输出里的bath1对应的水平)时的预测值;而第二个模型中,你直接提取rent99$bath作为自变量,R会把因子转换成它的整数编码(比如1、2这类数值),将其当作连续变量处理,此时截距对应bath取0时的预测值(这个值在你的数据集里大概率不存在),因此两个模型的截距出现差异。

从你的输出也能验证这一点:第一个模型的截距(144.149)正好等于第二个模型的截距(43.488)加上X[,2]的系数(100.661),也就是43.488 + 100.661 ≈ 144.149——这对应第一个模型中bath取参考水平(整数编码为1)时的预测值。

验证变量类型

你可以运行以下代码确认bath的类型:

class(rent99$bath)

如果输出是factor,就完全符合上述解释。

修正方法

如果想让两个模型结果一致,有两种选择:

  • 把第二个模型中的X[,2]转换成因子:
    model2 <- lm(rent99$rent ~ X[, 1] + factor(X[, 2]))
    coef(model2)
    
  • 或者把第一个模型中的bath转换成连续变量:
    model1 <- lm(rent ~ area + as.numeric(bath), data = rent99)
    coef(model1)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:23:15