通过构造,OLS模型中的误差项与X协变量的观测值不相关。即使该模型产生偏差的估计值也不能反映参数的真实值,这对于观察到的数据始终是正确的,因为违反了该模型的假设(例如遗漏变量问题或因果关系存在问题)。预测值完全是这些协变量的函数,因此它们也与误差项不相关。因此,在将残差与预测值作图时,它们应始终看起来是随机的,因为它们的确与估算器的构造无关。相反,实际上,模型的误差项完全有可能(而且确实有可能)与Y相关。例如,对于二分X变量,真实Y距任一E(Y | X = 1)
或E(Y | X = 0)
残差越大。这是R中模拟数据的直觉,我们知道模型是无偏的,因为我们控制数据生成过程:
rm(list=ls())
set.seed(21391209)
trueSd <- 10
trueA <- 5
trueB <- as.matrix(c(3,5,-1,0))
sampleSize <- 100
# create independent x-values
x1 <- rnorm(n=sampleSize, mean = 0, sd = 4)
x2 <- rnorm(n=sampleSize, mean = 5, sd = 10)
x3 <- 3 + x1 * 4 + x2 * 2 + rnorm(n=sampleSize, mean = 0, sd = 10)
x4 <- -50 + x1 * 7 + x2 * .5 + x3 * 2 + rnorm(n=sampleSize, mean = 0, sd = 20)
X = as.matrix(cbind(x1,x2,x3,x4))
# create dependent values according to a + bx + N(0,sd)
Y <- trueA + X %*% trueB +rnorm(n=sampleSize,mean=0,sd=trueSd)
df = as.data.frame(cbind(Y,X))
colnames(df) <- c("y", "x1", "x2", "x3", "x4")
ols = lm(y~x1+x2+x3+x4, data = df)
y_hat = predict(ols, df)
error = Y - y_hat
cor(y_hat, error) #Zero
cor(Y, error) #Not Zero
例如,如果我们省略了偏向模型,则会得到零相关的相同结果 x1.
ols2 = lm(y~x2+x3+x4, data = df)
y_hat2 = predict(ols2, df)
error2 = Y - y_hat2
cor(y_hat2, error2) #Still zero
cor(Y, error2) #Not Zero