Собесов

Сценарий: предположения линейной регрессии — где они ломаются

Статистика и теорверRegressionСредняяMiddle

Условие

Перечисли предположения OLS-регрессии, как их проверить и что делать при нарушении.

Решение

4 ключевых предположения

  1. Linearity: E[Y|X] = β_0 + β_1 X_1 + .... Зависимость линейна.
  2. Independence of errors: остатки независимы.
  3. Homoscedasticity: Var(ε|X) = const. Постоянная дисперсия остатков.
  4. Normality of errors: ε ~ Normal. (Только для inference на маленьких n.)

Дополнительно: No perfect multicollinearity.

Проверка

import statsmodels.api as sm
import matplotlib.pyplot as plt
 
model = sm.OLS(y, sm.add_constant(X)).fit()
resid = model.resid
fitted = model.fittedvalues
 
# 1. Linearity: residuals vs fitted
plt.scatter(fitted, resid)   # должно быть бесструктурное облако
plt.axhline(0)
 
# 2. Independence: Durbin-Watson
from statsmodels.stats.stattools import durbin_watson
print(durbin_watson(resid))   # около 2 — independent
 
# 3. Homoscedasticity: Breusch-Pagan
from statsmodels.stats.diagnostic import het_breuschpagan
lm, p, _, _ = het_breuschpagan(resid, sm.add_constant(X))
print(p)   # > 0.05 — гомоскедастичность
 
# 4. Normality: Q-Q plot или Shapiro-Wilk
sm.qqplot(resid, line='s')
from scipy.stats import shapiro
print(shapiro(resid))

Что делать при нарушении

Нарушение Симптом Решение
Non-linearity резидуальный график изогнут log/sqrt transform, polynomial, GAM
Heteroscedasticity residuals разлетаются с x log(y), weighted LS, robust SE
Autocorrelation Durbin-Watson ≠ 2 time series модели (ARIMA), cluster SE
Non-normal residuals (small n) Q-Q plot изогнут bootstrap CI, generalized linear models
Multicollinearity VIF > 10 удалить, объединить, ridge regression

Когда не важно

  • Normality of errors: при n > 50-100 CLT делает β_hat нормальным независимо от residuals. Игнорируйте Shapiro.
  • Homoscedasticity для оценки β: оценки β unbiased даже при гетероскедастичности. Только SE врёт → используйте robust SE (HC3).

Robust SE

model_robust = sm.OLS(y, X).fit(cov_type='HC3')
print(model_robust.summary())

Решает heteroscedasticity без preprocessing.

Endogeneity (отдельная проблема)

Cov(X, ε) ≠ 0 — оценки β смещены. Источники: omitted variable, reverse causality, measurement error. Решения: IV, fixed effects, DiD.

Подводные камни

  1. Normality of Y ≠ normality of errors. Y может быть скошен, но conditional на X — остатки нормальны.
  2. Большие p у Shapiro не значит «всё ок» — на больших n тест найдёт даже малые отклонения.
  3. Heteroscedasticity → robust SE; вместо переформулирования модели часто достаточно изменить cov_type.
  4. Outliers (Cook's distance) важнее, чем normality в большинстве случаев.
  5. Endogeneity — не диагностируется residual plot'ом, нужна теория предметной области.

Эталонный ответ

Linearity, independence, homoscedasticity, (normality для small n inference). Диагностика: residual plot, Durbin-Watson, Breusch-Pagan, Q-Q. Гетероскедастичность → robust SE (HC3); non-linearity → transform; multicollinearity → VIF, drop, ridge.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти