托马斯的回答很好(+1),我只是想澄清你问题措辞中的一个特别混乱:
残差中有一个模式,它们似乎不是零均值。
平均值为零。您可以轻松检查:
set.seed(1)
df <- data.frame(id=seq(1, 12, 1))
df$age <- c(18, 19, 20, 40, 41, 42,
60, 61, 62, 40, 41, 42)
df$treat <- c(rep(1,6), rep(0,6))
df$rec <- 2*df$age + rnorm(nrow(df), 0, 2)
mod2 <- lm(df$rec ~ df$treat+df$age)
# Mean value of the residuals
mean(residuals(mod2))
这等于-6.473289e-17
,即。这里与零的唯一区别是由于(缺乏)精度。0.0000000000000000647≈0
请注意,您甚至不必将第二个参数设置rnorm()
为零:
set.seed(1)
df <- data.frame(id=seq(1, 12, 1))
df$age <- c(18, 19, 20, 40, 41, 42,
60, 61, 62, 40, 41, 42)
df$treat <- c(rep(1,6), rep(0,6))
df$rec <- 2*df$age + rnorm(nrow(df), 1000, 2) # large mean
mod2 <- lm(df$rec ~ df$treat+df$age)
# Mean value of the residuals
mean(residuals(mod2))
返回-1.853384e-17
...实际上仍然为零。所以发生了什么事?1000
刚刚被添加到拦截中。