我正在尝试做一些线性模型,并希望更改使用的参考。我看到了这个:How to force R to use a specified factor level as reference in a regression?,并亲自尝试过。当我做以下事情时,我的答案根本没有任何意义......
我执行以下操作:
set.seed(123)
x <- rnorm(100)
DF <- data.frame(x = x,
y = 4 + (1.5*x) + rnorm(100, sd = 2),
b = gl(5, 20))
m1 <- lm(y ~ x + b, data = DF)
summary(m1)
到目前为止我的输出:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.7907 0.1962 19.323 < 2e-16 ***
x 1.4359 0.2189 6.561 2.89e-09 ***
b1 -0.5004 0.3905 -1.281 0.203
b2 0.1293 0.3916 0.330 0.742
b3 -0.1305 0.3904 -0.334 0.739
b4 0.5354 0.3931 1.362 0.176
到目前为止一切顺利。然后我将引用更改为b = 3
DF <- within(DF, b <- relevel(b, ref = 3))
levels(DF$b)
[1] "3" "1" "2" "4" "5"
m2 <- lm(y ~ x + b, data = DF)
summary(m2)
我的其他结果:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.7907 0.1962 19.323 < 2e-16 ***
x 1.4359 0.2189 6.561 2.89e-09 ***
b1 -0.1305 0.3904 -0.334 0.739
b2 -0.5004 0.3905 -1.281 0.203
b3 0.1293 0.3916 0.330 0.742
b4 0.5354 0.3931 1.362 0.176
初看起来,看起来很好。但是,它不是...... 一个包含所有结果的表,所以我可以计算每个b的效果,其中第一列b1 = 0 =参考,第二列b3 = 0 =参考。
intercept 3.7907 3.7907
b1 0 -0.1305
b2 -0.5004 -0.5004
b3 0.1293 0
b4 -0.1305 0.1293
b5 0.5354 0.5354
做一些简单的数学 - &gt; b1 =拦截+ beta b1
结果:
b1 3.7907 3.6602
b2 3.2903 3.2903
b3 3.92 3.7907
b4 3.6602 3.92
b5 4.3261 4.3261
他们不对应。我注意到我的拦截并没有在模型之间发生变化,而且估计值只是转移了。所以线性模型已经出错了。但我无法弄清楚在哪里......