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

Why is the intercept not the mean at the continuous predictor being zero?

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

在下面的示例 (fit) 中,截距为 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)

What am I missing?

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