Słownik metodologiczny · Modele regresji

Estymator efektów stałych – jak działa w danych panelowych?

Estymator efektów stałych porównuje każdą jednostkę z nią samą w czasie i usuwa wpływ jej stałych cech, także niezmierzonych. Pokazujemy wzór, przykład panelu w R, pułapkę stopni swobody i opis do pracy.

Strona główna / Słownik / Estymator efektów stałych
W skrócie: Estymator efektów stałych (FE, within) odejmuje od obserwacji średnią jednostki, więc szacuje związek wyłącznie ze zmian w obrębie jednostek. Usuwa wpływ wszystkich cech stałych w czasie, ale nie daje oszacowań dla takich cech.

Co to jest estymator efektów stałych?

Estymator efektów stałych (ang. fixed effects estimator, FE, within estimator) szacuje związek w danych panelowych, porównując każdą jednostkę – osobę, firmę, gminę – z nią samą w różnych momentach. Od każdej obserwacji odejmuje średnią jednostki:

yit − ȳi = β(xit − x̄i) + (eit − ēi).

Tak samo działa regresja z osobną zmienną zero-jedynkową dla każdej jednostki (LSDV). Znikają wtedy wszystkie cechy stałe w czasie, także niezmierzone, więc nie mogą one zaburzyć oszacowania β. Hausman (1978) w równaniu płac znalazł właśnie takie nieobserwowane cechy osób, skorelowane z predyktorem.

Przykład

W symulacji 200 pracowników zbadano pięciokrotnie. Nieobserwowana odporność zmniejszała zarówno liczbę nadgodzin, jak i zmęczenie, a prawdziwy efekt godziny nadliczbowej wynosił 0.50 punktu. Zwykła regresja na wszystkich wierszach dała b = 1.335, bo pomieszała porównania między osobami z porównaniami w czasie. FE dał b = 0.554 (SE = 0.038, przy klastrowaniu po osobach 0.045). Płeć, stała w czasie, dostała w modelu FE współczynnik NA.

Jak opisać w pracy

Zastosowano estymator efektów stałych dla pracowników (200 osób, 5 pomiarów), z błędami standardowymi odpornymi na klastrowanie po osobach. Wzrost liczby nadgodzin o jedną godzinę wiązał się ze wzrostem zmęczenia o 0.55 punktu (SE = 0.04).

Na co uważać

  • Tylko zmienność wewnątrz jednostek. Predyktor, który u danej osoby prawie się nie zmienia, daje szeroki przedział, a cechy stałe w czasie nie mają oszacowań. Bell i Jones (2015) proponują model losowy z rozdzieleniem efektów wewnątrz i między jednostkami; wybór ułatwia test Hausmana.
  • Nie usuwa wszystkiego. Zakłócacze zmienne w czasie i odwrotny kierunek zależności nadal mogą obciążać wynik.
  • Błędne stopnie swobody. Ręczne odjęcie średnich i zwykłe lm() nie odliczają 200 średnich, więc SE wychodzi za małe: 0.034 zamiast 0.038.
  • Zależność w czasie. Pomiary tej samej osoby są skorelowane, dlatego standardem są błędy odporne na klastrowanie. Inaczej grozi pseudoreplikacja.

Porównanie z efektami losowymi pokazuje hasło efekty stałe i losowe oraz wpis Dane panelowe – efekty stałe, losowe i test Hausmana.

Przykład reprodukowalny

Efekty stałe w R

Kod symuluje panel pracowników z nieobserwowaną cechą stałą, porównuje zwykłą regresję, efekty stałe (LSDV), ręczną transformację within i błędy klastrowe po osobach.

Nadgodziny a zmęczenie w panelu pracowników

Dane wejściowe: dane symulowane: 200 osób, 5 fal, prawdziwy efekt 0.50; set.seed(3541).

Co odczytać: współczynnik nadgodziny w czterech wersjach, NA dla zmiennej stałej w czasie i stopnie swobody reszt.

R
suppressPackageStartupMessages(library(sandwich))
set.seed(3541)
N <- 200; T <- 5                                    # 200 pracowników, 5 fal badania
id    <- rep(1:N, each = T)
kobieta <- rep(rbinom(N, 1, 0.5), each = T)         # cecha stała w czasie
odpornosc <- rep(rnorm(N), each = T)                # nieobserwowana stała cecha osoby
nadgodziny <- pmax(0, 5 - 2 * odpornosc + rnorm(N * T, 0, 2))
zmeczenie  <- 20 + 0.5 * nadgodziny + 1 * kobieta - 3 * odpornosc + rnorm(N * T, 0, 2)
d <- data.frame(id = factor(id), kobieta, nadgodziny, zmeczenie)
pooled <- lm(zmeczenie ~ nadgodziny + kobieta, data = d)       # zwykła regresja na wszystkich wierszach
fe     <- lm(zmeczenie ~ nadgodziny + id + kobieta, data = d)  # efekty stałe (LSDV)
# to samo przez odjęcie średnich osoby (transformacja within)
d$z_w <- d$zmeczenie  - ave(d$zmeczenie,  d$id)
d$n_w <- d$nadgodziny - ave(d$nadgodziny, d$id)
within <- lm(z_w ~ 0 + n_w, data = d)
se_cl <- sqrt(vcovCL(fe, cluster = ~ id, type = "HC1")["nadgodziny", "nadgodziny"])
round(rbind(
  pooled = coef(summary(pooled))["nadgodziny", 1:2],
  FE_LSDV = coef(summary(fe))["nadgodziny", 1:2],
  within_lm = coef(summary(within))["n_w", 1:2],
  FE_klastry = c(coef(fe)["nadgodziny"], se_cl)), 4)
coef(fe)["kobieta"]                                 # NA: cecha stała w czasie wypada z modelu
c(df_LSDV = fe$df.residual, df_within = within$df.residual)
Wynik w R
           Estimate Std. Error
pooled       1.3350     0.0328
FE_LSDV      0.5538     0.0379
within_lm    0.5538     0.0339
FE_klastry   0.5538     0.0446
kobieta 
     NA 
  df_LSDV df_within 
      799       999

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (pakiet sandwich). W pracy podaj wersje faktycznie użytych pakietów (sessionInfo()).

  1. R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
  2. sandwich (wersja 3.1.1): Zeileis, A., Köll, S., & Graham, N. (2020). Various versatile variances: An object-oriented implementation of clustered covariances in R. Journal of Statistical Software, 95(1), 1–36. https://doi.org/10.18637/jss.v095.i01

Najczęstsze pytania

Czy efekty stałe w ekonometrii to to samo co efekty stałe w modelu wielopoziomowym?

Nie. W modelu wielopoziomowym efekty stałe to współczynniki wspólne dla wszystkich jednostek, w odróżnieniu od losowych. W ekonometrii estymator efektów stałych oznacza osobny wyraz wolny dla każdej jednostki, szacowany zamiast losowego.

Dlaczego płeć dostaje w modelu efektów stałych wartość NA?

Zmienna stała w czasie jest liniową kombinacją wyrazów wolnych jednostek, więc jej efektu nie da się oddzielić. Jeśli taki efekt jest ważny, użyj modelu losowego ze średnimi predyktorów (within–between).

Jak policzyć efekty stałe w R?

Najprościej lm(y ~ x + factor(id)) z błędami sandwich::vcovCL(model, cluster = ~ id). Pakiety plm (model = "within") i fixest (feols(y ~ x | id)) dają to samo i szybciej działają przy wielu jednostkach.

Powiązane hasła

Poradniki, w których użyjesz tego pojęcia

Potrzebujesz wsparcia w analizie danych?

Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.

Wyceń analizęOferta dla studentów

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Bell, A., & Jones, K. (2015). Explaining fixed effects: Random effects modeling of time-series cross-sectional and panel data. Political Science Research and Methods, 3(1), 133–153. https://doi.org/10.1017/psrm.2014.7 ● Otwarty dostęp
  2. Hausman, J. A. (1978). Specification tests in econometrics. Econometrica, 46(6), 1251–1271. https://doi.org/10.2307/1913827 ● Otwarty dostęp: pełny tekst

Cytowania BibTeX

@article{bell2015explaining, author={Bell, Andrew and Jones, Kelvyn}, title={{Explaining fixed effects: Random effects modeling of time-series cross-sectional and panel data}}, journal={Political Science Research and Methods}, year={2015}, volume={3}, number={1}, pages={133--153}, doi={10.1017/psrm.2014.7}}
@article{hausman1978specification, author={Hausman, Jerry A.}, title={{Specification tests in econometrics}}, journal={Econometrica}, year={1978}, volume={46}, number={6}, pages={1251--1271}, doi={10.2307/1913827}}
R