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
相关产品推荐
相关产品推荐

