Побудувавши термін помилки в моделі 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