Modele zmiennych jakościowych — logit i probit

Streszczenie

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):

  1. Predykcje poza [0, 1] — model może przewidywać $P > 1$ lub $P < 0$
  2. Heteroskedastyczność — z natury, bo $\text{Var}(Y\mid X) = P(1-P)$
  3. 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) $$
ModelFunkcja $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:

MiaraOpis
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 / AUCzdolność 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

  1. Nie używaj MNK dla binarnego Y bez świadomości wad LPM
  2. Logit ≈ probit — wybór rzadko ma znaczenie merytoryczne
  3. Interpretuj efekty krańcowe (AME), nie surowe współczynniki
  4. Iloraz szans $e^\beta$ to wygodna interpretacja dla logitu
  5. 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

📚 Zasoby do nauki
  • Wooldridge, Introductory Econometrics, rozdz. 17
  • Pakiet R: glm(family = binomial), margins
  • Python: statsmodels (Logit, Probit)
💻 Kod źródłowy

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