構築により、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