Słownik metodologiczny · Modele regresji

Błędy standardowe odporne na klastrowanie – kiedy i jak ich użyć?

Błędy standardowe odporne na klastrowanie korygują wnioskowanie, gdy obserwacje są pogrupowane i skorelowane wewnątrz grup. Pokazujemy różnicę wobec HC3, poprawkę CR2 przy małej liczbie klastrów, przykład w R i opis do pracy.

Strona główna / Słownik / Błędy odporne na klastrowanie
W skrócie: Błędy standardowe odporne na klastrowanie dopuszczają dowolną korelację reszt wewnątrz skupień (szkół, osób, firm) i zakładają tylko niezależność między nimi. W przeciwieństwie do HC3 chronią przed zawyżoną precyzją przy danych pogrupowanych.

Co to są błędy standardowe odporne na klastrowanie?

Błędy standardowe odporne na klastrowanie (ang. cluster-robust standard errors, CRVE) korygują wnioskowanie, gdy obserwacje tworzą skupienia: uczniów w szkołach, pacjentów w szpitalach, pomiary w osobach. Wewnątrz skupienia reszty są skorelowane, więc klasyczne błędy, liczone jak dla niezależnych obserwacji, zawyżają precyzję (Cameron i Miller, 2015). Estymator kanapkowy sumuje reszty w obrębie klastra i dopuszcza dowolną korelację oraz różne wariancje wewnątrz niego. Zakłada tylko niezależność między klastrami.

Czym różnią się od HC3?

Błędy HC3 chronią przed heteroskedastycznością, ale każdą obserwację nadal traktują jako niezależną. Przy korelacji wewnątrz skupień nie pomagają. Z kolei błędy klastrowe przy jednoelementowych klastrach sprowadzają się do zwykłych błędów odpornych. O sile zależności informuje ICC.

Przykład

W symulacji 20 szkół po 25 uczniów program przydzielono całym szkołom. Różnica wyników wyniosła 5.53 punktu. Klasyczne SE = 0.779, HC3 = 0.780, a SE klastrowe (CR1) = 1.871. Przy małej liczbie klastrów Pustejovsky i Tipton (2018) zalecają poprawkę CR2 z przybliżeniem Satterthwaite’a: SE = 1.92, t(18) = 2.88, p = .010. Klasyczny test dawał p < .001 przy 498 stopniach swobody.

Jak opisać w pracy

Błędy standardowe obliczono z poprawką na klastrowanie uczniów w szkołach (CR2, 20 klastrów, stopnie swobody Satterthwaite’a). Uczniowie szkół objętych programem uzyskali wyższe wyniki, b = 5.53, SE = 1.92, t(18) = 2.88, p = .010.

Na co uważać

  • Liczy się liczba klastrów. Przy kilkunastu klastrach zwykłe CRVE jest zaniżone i test zbyt często odrzuca hipotezę zerową; używaj CR2 i stopni swobody Satterthwaite’a.
  • Klastruj na poziomie przydziału. Gdy interwencję losowano szkołom, klastrem jest szkoła, nie klasa ani uczeń. Analiza uczniów jak niezależnych obserwacji to pseudoreplikacja.
  • Korekta zamiast modelu. CRVE poprawia tylko błędy. Jeśli interesuje cię zmienność między szkołami albo efekty różnych poziomów, potrzebny jest model wielopoziomowy.

W danych panelowych błędy klastrowe zwykle łączy się z estymatorem efektów stałych – pokazuje to wpis Dane panelowe – efekty stałe, losowe i test Hausmana.

Przykład reprodukowalny

Błędy klastrowe w R

Kod symuluje 20 szkół z programem przydzielonym całym szkołom i porównuje klasyczne SE, HC3, CR1 (vcovCL) oraz CR2 ze stopniami swobody Satterthwaite’a (clubSandwich).

Program szkolny przydzielony szkołom

Dane wejściowe: dane symulowane: 20 szkół po 25 uczniów, wspólny efekt szkoły; set.seed(3551).

Co odczytać: SE współczynnika program w czterech wersjach oraz wartości t, stopnie swobody i p.

R
suppressPackageStartupMessages({library(sandwich); library(lmtest); library(clubSandwich)})
set.seed(3551)
K <- 20; n <- 25                                   # 20 szkół po 25 uczniów
szkola  <- rep(1:K, each = n)
program <- rep(rep(0:1, each = K / 2), each = n)   # program przydzielony całym szkołom
u <- rep(rnorm(K, 0, 4), each = n)                 # wspólny efekt szkoły
wynik <- 50 + 2 * program + u + rnorm(K * n, 0, 8)
d <- data.frame(szkola = factor(szkola), program, wynik)
m <- lm(wynik ~ program, data = d)
se <- c(klasyczne = sqrt(vcov(m)[2, 2]),
        HC3 = sqrt(vcovHC(m, type = "HC3")[2, 2]),
        CR1 = sqrt(vcovCL(m, cluster = ~ szkola, type = "HC1")[2, 2]))
round(c(b = unname(coef(m)[2]), se), 3)
round(coeftest(m)[2, ], 4)                         # klasyczny test t (df = 498)
round(coeftest(m, vcov. = vcovCL(m, cluster = ~ szkola, type = "HC1"), df = K - 1)[2, ], 4)  # CR1, df = K - 1
coef_test(m, vcov = "CR2", cluster = d$szkola, test = "Satterthwaite")[2, ]  # CR2 (clubSandwich)
Wynik w R
        b klasyczne       HC3       CR1 
    5.529     0.779     0.780     1.871 
  Estimate Std. Error    t value   Pr(>|t|) 
    5.5289     0.7789     7.0980     0.0000 
  Estimate Std. Error    t value   Pr(>|t|) 
    5.5289     1.8708     2.9553     0.0081 
Alternative hypothesis: two-sided 
   Coef. Estimate   SE Null value t-stat d.f. (Satt) p-val (Satt) Sig.
 program     5.53 1.92          0   2.88          18      0.00998   **

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (pakiety sandwich, lmtest i clubSandwich). 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
  3. clubSandwich (wersja 0.7.0): Pustejovsky, J. E. (2026). clubSandwich: Cluster-robust (sandwich) variance estimators with small-sample corrections [R package]. https://doi.org/10.32614/CRAN.package.clubSandwich

Najczęstsze pytania

Czym błędy odporne na klastrowanie różnią się od HC3?

HC3 poprawia tylko nierówne wariancje reszt i nadal zakłada niezależność obserwacji. Błędy klastrowe dopuszczają też korelację reszt w obrębie klastra. W danych pogrupowanych HC3 może być prawie równe klasycznemu SE, a klastrowe kilka razy większe.

Ile klastrów potrzeba?

Nie ma jednej granicy. Wnioskowanie opiera się na liczbie klastrów, nie obserwacji, a przy niewielu klastrach zwykłe błędy klastrowe są zaniżone (Cameron i Miller, 2015). Przy kilkunastu lub kilkudziesięciu klastrach stosuj CR2 ze stopniami swobody Satterthwaite’a.

Jak policzyć błędy odporne na klastrowanie w R?

Dla CR1: lmtest::coeftest(m, vcov. = sandwich::vcovCL(m, cluster = ~ szkola)). Dla CR2 z poprawką małych prób: clubSandwich::coef_test(m, vcov = "CR2", cluster = dane$szkola).

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. Cameron, A. C., & Miller, D. L. (2015). A practitioner’s guide to cluster-robust inference. Journal of Human Resources, 50(2), 317–372. https://doi.org/10.3368/jhr.50.2.317
  2. Pustejovsky, J. E., & Tipton, E. (2018). Small-sample methods for cluster-robust variance estimation and hypothesis testing in fixed effects models. Journal of Business & Economic Statistics, 36(4), 672–683. https://doi.org/10.1080/07350015.2016.1247004 ● Otwarty dostęp: pełny tekst

Cytowania BibTeX

@article{cameron2015practitioner, author={Cameron, A. Colin and Miller, Douglas L.}, title={{A practitioner’s guide to cluster-robust inference}}, journal={Journal of Human Resources}, year={2015}, volume={50}, number={2}, pages={317--372}, doi={10.3368/jhr.50.2.317}}
@article{pustejovsky2018small, author={Pustejovsky, James E. and Tipton, Elizabeth}, title={{Small-sample methods for cluster-robust variance estimation and hypothesis testing in fixed effects models}}, journal={Journal of Business \& Economic Statistics}, year={2018}, volume={36}, number={4}, pages={672--683}, doi={10.1080/07350015.2016.1247004}}
R