为什么截距不是连续预测值的均值为零?

时间:2018-03-03 14:13:50

标签: r lme4 intercept

在Gelman& Hill的书中,描述了当您使用一个连续预测变量拟合线性回归时,截距应表示预测变量= = 0时的预测结果。有时这可能是有意义的,有时不是(或者只是以某种方式缩放预测器)。如果预测因子是一个因子,那么截距应该反映参考类别的平均值(至少在使用虚拟代码时)。我目前正在处理sleepstudy数据,我不明白发生了什么,因为这不是这种情况。虽然我在线性混合模型中遇到了问题,但它也出现在线性模型中:

在下面的例子中(拟合),截距是251.41,而我们可以看到Days == 0的平均值是256.65。当我将预测变量转换为因子时,一切都按预期工作。我错过了什么?对于线性混合模型,我希望截距在第5天反映平均值,但将变量Days保持为数值变量。问题也出现在那里。它也出现在我所拥有的另一个数据集中,每天都有相同的样本量。我觉得我想念一些超级简单或明显的东西,但我无法得到它......

library(lme4)
library(tidyverse)
fit <- lm(Reaction ~ Days, sleepstudy)
summary(fit)
group_by(sleepstudy, Days) %>% summarise(means=mean(Reaction))
sleepstudy$Days_discrete <- as.factor(sleepstudy$Days)
fit2 <- lm(Reaction ~ Days_discrete, sleepstudy)
summary(fit2)

1 个答案:

答案 0 :(得分:2)

  

我错过了什么?

fit1不一定必须以Days的平均值与零值相交。如果Days具有线性效应,那么它是最合适的线。请参阅simple linear regression的公式。

fit2应该归功于R中的默认对比度设置。它也是如此

library(lme4)
tapply(sleepstudy$Reaction, sleepstudy$Days, mean)
     0        1        2        3        4        5        6        7        8        9 
#R> 256.6518 264.4958 265.3619 282.9920 288.6494 308.5185 312.1783 318.7506 336.6295 350.8512 
fit1 <- lm(Reaction ~ Days, sleepstudy)
coef(fit1)
#R> (Intercept)        Days 
#R>   251.40510    10.46729 
fit2 <- lm(Reaction ~ as.factor(Days), sleepstudy)
coef(fit2)
#R>      (Intercept) as.factor(Days)1 as.factor(Days)2 as.factor(Days)3 as.factor(Days)4 as.factor(Days)5 as.factor(Days)6 
#R>       256.651806         7.843950         8.710094        26.340206        31.997617        51.866650        55.526450 
#R> as.factor(Days)7 as.factor(Days)8 as.factor(Days)9 
#R>        62.098778        79.977700        94.199417