Условие
Перечисли предположения OLS-регрессии, как их проверить и что делать при нарушении.
Решение
4 ключевых предположения
- Linearity:
E[Y|X] = β_0 + β_1 X_1 + .... Зависимость линейна. - Independence of errors: остатки независимы.
- Homoscedasticity: Var(ε|X) = const. Постоянная дисперсия остатков.
- 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.
Подводные камни
- Normality of Y ≠ normality of errors. Y может быть скошен, но conditional на X — остатки нормальны.
- Большие p у Shapiro не значит «всё ок» — на больших n тест найдёт даже малые отклонения.
- Heteroscedasticity → robust SE; вместо переформулирования модели часто достаточно изменить cov_type.
- Outliers (Cook's distance) важнее, чем normality в большинстве случаев.
- 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.