Regresja liniowa — od teorii do praktyki

Streszczenie

Model regresji prostej i wielorakiej: estymacja MNK, interpretacja współczynników, testy i diagnostyka

Model regresji prostej

Najprostszy model: jedna zmienna objaśniająca.

$$Y_i = \beta_0 + \beta_1 X_i + \varepsilon_i \quad i = 1, 2, \ldots, n$$

Gdzie:

  • $Y_i$ — zmienna zależna (objaśniana), np. dochód
  • $X_i$ — zmienna niezależna (objaśniająca), np. lata edukacji
  • $\beta_0$ — wyraz wolny (intercept) — wartość $Y$ gdy $X = 0$
  • $\beta_1$ — współczynnik nachylenia (slope) — o ile zmienia się $Y$ gdy $X$ rośnie o 1
  • $\varepsilon_i$ — składnik losowy (błąd), nieobserwowany

Metoda Najmniejszych Kwadratów (MNK)

Szukamy $\hat{\beta}_0$ i $\hat{\beta}_1$ minimalizujących sumę kwadratów reszt:

$$SSR = \sum_{i=1}^{n}(Y_i - \hat{Y}_i)^2 = \sum_{i=1}^{n}(Y_i - \hat{\beta}_0 - \hat{\beta}_1 X_i)^2$$

Rozwiązanie (przyrównując pochodne do zera):

$$\hat{\beta}_1 = \frac{\sum_{i=1}^n (X_i - \bar{X})(Y_i - \bar{Y})}{\sum_{i=1}^n (X_i - \bar{X})^2} = \frac{Cov(X,Y)}{Var(X)}$$$$\hat{\beta}_0 = \bar{Y} - \hat{\beta}_1 \bar{X}$$

Intuicja

$\hat{\beta}_1$ to znormalizowana kowariancja — miara jak mocno $X$ i $Y$ “poruszają się razem”, podzielona przez zmienność $X$.

Założenia klasycznego modelu

Żeby MNK było BLUE (Best Linear Unbiased Estimator — Twierdzenie Gaussa-Markowa):

ZałożenieOpisCo się psuje gdy naruszone
A1 LiniowośćModel jest liniowy w parametrachObciążenie
A2 Random samplingPróba jest losowaBrak reprezentatywności
A3 Brak perfekcyjnej multikolinearności$X$-y nie są liniowo zależne$(\mathbf{X}^T\mathbf{X})$ nieinwertowalna
A4 Zerowa wartość oczekiwana błędu$E(\varepsilon_i \| X_i) = 0$Obciążenie estymatorów
A5 Homoskedastyczność$Var(\varepsilon_i \| X_i) = \sigma^2$Nieefektywność, błędne SE

Dodając założenie normalności reszt ($\varepsilon \sim N(0, \sigma^2)$):

A6 Normalność — konieczna do testowania hipotez w małych próbach.

Interpretacja współczynników

Regresja prosta

$$\text{Dochód} = 10{,}000 + 3{,}000 \cdot \text{Edukacja}$$
  • Wyraz wolny 10 000: osoba bez edukacji (0 lat) zarabiałaby 10 000 zł — często niemająca sensu ekonomicznego interpretacja
  • Nachylenie 3 000: każdy dodatkowy rok edukacji wiąże się ze średnio 3 000 zł wyższym dochodem, ceteris paribus

Zmienne log-liniowe

$$\ln(\text{Dochód}) = \alpha + \beta \cdot \text{Edukacja}$$

Tu $\beta \approx$ procentowa zmiana dochodu na 1 rok edukacji (np. $\beta = 0.08$ → 8% więcej za każdy rok).

$$\ln(\text{Dochód}) = \alpha + \beta \cdot \ln(\text{Edukacja})$$

Tu $\beta$ = elastyczność — 1% więcej edukacji → $\beta$% więcej dochodu.

Miary dopasowania modelu

$R^2$ — współczynnik determinacji

$$R^2 = 1 - \frac{SSR}{SST} = 1 - \frac{\sum(\hat{\varepsilon}_i)^2}{\sum(Y_i - \bar{Y})^2}$$

$R^2 \in [0, 1]$: jaki odsetek zmienności $Y$ wyjaśnia model.

Pułapka: $R^2$ zawsze rośnie gdy dodajemy zmienne! Dlatego używamy skorygowanego:

$$\bar{R}^2 = 1 - \frac{SSR/(n-k-1)}{SST/(n-1)}$$

Koryguje za liczbę zmiennych. Może spaść gdy dodamy nieistotną zmienną.

Testy istotności

Test t dla współczynnika

Hipoteza zerowa: $H_0: \beta_j = 0$ (zmienna $j$ nie ma wpływu)

Statystyka:

$$t = \frac{\hat{\beta}_j - 0}{SE(\hat{\beta}_j)} \sim t_{n-k-1}$$

Odrzucamy $H_0$ gdy $|t| > t_{\alpha/2, n-k-1}$ lub gdy p-wartość $< \alpha$.

Test F dla całego modelu

$H_0: \beta_1 = \beta_2 = \cdots = \beta_k = 0$ (model nie wyjaśnia niczego)

$$F = \frac{(SST - SSR)/k}{SSR/(n-k-1)} \sim F_{k, n-k-1}$$

Diagnostyka modelu

1. Wykres reszt vs. dopasowanie

Powinno wyglądać jak “chmura” — brak wzorca. Wzorzec → problem z modelem.

2. Normalność reszt

Test Shapiro-Wilka lub wykres QQ. Przy dużych próbach ($n > 100$) mniej krytyczne.

3. Heteroskedastyczność

Test Breusha-Pagana lub Whitea. Gdy wykryta — używaj odpornych błędów standardowych (robust standard errors):

# R — odporne błędy (HC standard errors)
library(sandwich); library(lmtest)
coeftest(model, vcov = vcovHC(model, type = "HC3"))

4. Multikolinearność

VIF (Variance Inflation Factor): $VIF_j = \frac{1}{1-R_j^2}$

  • $VIF < 5$ → OK
  • $VIF > 10$ → poważny problem

Następnie: Testy hipotez w ekonometrii

📚 Zasoby do nauki
💻 Kod źródłowy

R:

# Wczytaj dane
data(mtcars)

# Regresja prosta: mpg = β0 + β1*wt + ε
model1 <- lm(mpg ~ wt, data = mtcars)
summary(model1)

# Regresja wieloraka
model2 <- lm(mpg ~ wt + hp + cyl, data = mtcars)
summary(model2)

# Diagnostyka
plot(model2)          # wykresy diagnostyczne
car::vif(model2)      # VIF (multikolinearność)

Python (statsmodels):

import statsmodels.formula.api as smf
import statsmodels.api as sm

# Regresja prosta
model = smf.ols('mpg ~ wt', data=mtcars).fit()
print(model.summary())

# Regresja wieloraka
model2 = smf.ols('mpg ~ wt + hp + cyl', data=mtcars).fit()
print(model2.summary())

# Diagnostyka reszt
sm.qqplot(model2.resid, line='s')