Modele zmiennych jakościowych — logit i probit
Regresja dla zmiennej zero-jedynkowej: model liniowy prawdopodobieństwa, logit, probit — interpretacja efektów krańcowych, ilorazy szans, estymacja w R i Python
Kiedy zmienna objaśniana jest binarna
Wiele pytań ekonomicznych dotyczy decyzji tak/nie:
- Czy bezrobotny znajdzie pracę? (1 = tak, 0 = nie)
- Czy klient spłaci kredyt?
- Czy gospodarstwo kupi samochód?
- Czy firma zbankrutuje?
Zmienna $Y \in \{0, 1\}$. Modelujemy prawdopodobieństwo sukcesu warunkowo na cechach:
$$ P(Y_i = 1 \mid X_i) = \mathbb{E}[Y_i \mid X_i] $$Próba 1: Liniowy model prawdopodobieństwa (LPM)
Najprostsze podejście — zwykła MNK na zmiennej zero-jedynkowej:
$$ Y_i = \beta_0 + \beta_1 X_i + \varepsilon_i, \qquad P(Y_i=1\mid X_i) = \beta_0 + \beta_1 X_i $$Zalety: prosta interpretacja — $\beta_1$ to zmiana prawdopodobieństwa przy wzroście X o jednostkę.
Wady (poważne):
- Predykcje poza [0, 1] — model może przewidywać $P > 1$ lub $P < 0$
- Heteroskedastyczność — z natury, bo $\text{Var}(Y\mid X) = P(1-P)$
- Stały efekt krańcowy — nierealistyczne (efekt powinien słabnąć przy krańcach)
# LPM — szybki, ale wadliwy
lpm <- lm(zatrudniony ~ wiek + edukacja + plec, data = dane)
# Konieczne odporne błędy standardowe!
library(sandwich); library(lmtest)
coeftest(lpm, vcov = vcovHC(lpm, type = "HC1"))
LPM bywa użyteczny jako szybkie przybliżenie (zwłaszcza efekty krańcowe blisko średniej), ale do poprawnej analizy używamy logit/probit.
Logit i probit — funkcje wiążące
Rozwiązanie: „ściśnięcie" liniowej kombinacji $X\beta$ do przedziału $(0,1)$ przez funkcję dystrybuanty:
$$ P(Y_i = 1 \mid X_i) = G(\beta_0 + \beta_1 X_i) $$| Model | Funkcja $G(z)$ | Rozkład |
|---|---|---|
| Logit | $\dfrac{e^z}{1+e^z} = \dfrac{1}{1+e^{-z}}$ | logistyczny |
| Probit | $\Phi(z)$ (dystrybuanta N(0,1)) | normalny |
Obie krzywe mają kształt S (sigmoidalny): płaskie na krańcach, strome w środku. To zapewnia $P \in (0,1)$ oraz malejący efekt krańcowy przy ekstremach.
P(Y=1)
1 ┤ ╭───────────
│ ╭──╯
0.5┤ ╭──╯
│ ╭──╯
0 ┤───╯
└────────────────────────► Xβ
Logit a probit — porównanie
W praktyce dają niemal identyczne wyniki. Różnice:
- Logit — współczynniki interpretowalne jako logarytmy ilorazów szans; popularny w ekonomii i medycynie
- Probit — wygodny teoretycznie (zmienna ukryta o rozkładzie normalnym); popularny w ekonometrii strukturalnej
Skala współczynników różni się o ok. 1,6 ($\beta_{logit} \approx 1{,}6 \cdot \beta_{probit}$), ale efekty krańcowe są zbliżone.
Estymacja: metoda największej wiarygodności
Modele nieliniowe estymujemy MNW (Maximum Likelihood), nie MNK. Funkcja log-wiarygodności:
$$ \ln L(\beta) = \sum_{i=1}^{n} \left[ y_i \ln G(X_i\beta) + (1-y_i)\ln\big(1 - G(X_i\beta)\big) \right] $$Maksymalizowana numerycznie (algorytm Newtona-Raphsona). Estymator MNW jest zgodny, asymptotycznie efektywny i normalny.
Implementacja w R
# Logit
logit <- glm(zatrudniony ~ wiek + I(wiek^2) + edukacja + plec,
data = dane, family = binomial(link = "logit"))
summary(logit)
# Probit
probit <- glm(zatrudniony ~ wiek + I(wiek^2) + edukacja + plec,
data = dane, family = binomial(link = "probit"))
# Porównanie
stargazer(logit, probit, type = "text")
Interpretacja: iloraz szans (odds ratio)
Współczynniki logitu to log-szanse. Po przekształceniu $e^{\beta}$ otrzymujemy iloraz szans:
exp(coef(logit)) # ilorazy szans
exp(confint(logit)) # przedziały ufności
- $e^{\beta_j} = 1{,}5$ → wzrost X o jednostkę mnoży szanse sukcesu przez 1,5 (o 50%)
- $e^{\beta_j} = 1$ → brak wpływu
- $e^{\beta_j} < 1$ → spadek szans
Efekty krańcowe — najważniejsza interpretacja
Współczynnik $\beta_j$ nie jest efektem krańcowym (bo model nieliniowy). Efekt krańcowy zależy od punktu:
$$ \frac{\partial P(Y=1\mid X)}{\partial X_j} = g(X\beta) \cdot \beta_j $$gdzie $g$ to gęstość. Dwa standardy raportowania:
- MEM (Marginal Effect at Means) — efekt dla „przeciętnej" obserwacji
- AME (Average Marginal Effect) — średni efekt po wszystkich obserwacjach (preferowany)
library(margins)
margins(logit) # AME — średnie efekty krańcowe
summary(margins(logit)) # z błędami standardowymi
import statsmodels.formula.api as smf
logit = smf.logit('zatrudniony ~ wiek + I(wiek**2) + edukacja + C(plec)',
data=df).fit()
print(logit.summary())
# Efekty krańcowe (AME)
print(logit.get_margeff(at='overall').summary())
# Ilorazy szans
import numpy as np
print(np.exp(logit.params))
Ocena dopasowania
MNW nie ma klasycznego $R^2$. Stosujemy:
| Miara | Opis |
|---|---|
| Pseudo-R² McFaddena | $1 - \ln L_{pełny}/\ln L_{0}$; 0,2–0,4 = dobre dopasowanie |
| Tablica trafności | % poprawnych klasyfikacji (próg 0,5) |
| Krzywa ROC / AUC | zdolność dyskryminacyjna (AUC > 0,7 = dobra) |
| Test LR | łączna istotność modelu (odpowiednik testu F) |
library(pscl)
pR2(logit) # pseudo-R^2
# Tablica trafności
pred <- ifelse(predict(logit, type = "response") > 0.5, 1, 0)
table(Przewidziane = pred, Rzeczywiste = dane$zatrudniony)
# AUC
library(pROC)
roc(dane$zatrudniony, predict(logit, type = "response"))
Podsumowanie
- Nie używaj MNK dla binarnego Y bez świadomości wad LPM
- Logit ≈ probit — wybór rzadko ma znaczenie merytoryczne
- Interpretuj efekty krańcowe (AME), nie surowe współczynniki
- Iloraz szans $e^\beta$ to wygodna interpretacja dla logitu
- Oceniaj przez pseudo-R², trafność klasyfikacji i AUC
Rozszerzenia: dla więcej niż 2 kategorii → logit wielomianowy (multinomial) lub uporządkowany (ordered logit/probit), gdy kategorie mają naturalną kolejność (np. oceny, poziomy zadowolenia).
Powrót do: Spis tematów ekonometrii
- Wooldridge, Introductory Econometrics, rozdz. 17
- Pakiet R:
glm(family = binomial),margins - Python:
statsmodels(Logit, Probit)
Wymagane pakiety:
install.packages(c("margins", "stargazer", "pscl"))
library(margins) # efekty krańcowe
library(pscl) # pseudo-R^2
import statsmodels.formula.api as smf
import statsmodels.api as sm