Po uruchomieniu standardowej specyfikacji panelu błędów klastra z plm
i lfe
otrzymuję wyniki, które różnią się od drugiej cyfry znaczącej. Czy ktokolwiek wie, dlaczego różnią się one kalkulacją SE?Skonfigurowane standardowe błędy standardowe różnią się w porównaniu do lfe
set.seed(572015)
library(lfe)
library(plm)
library(lmtest)
# clustering example
x <- c(sapply(sample(1:20), rep, times = 1000)) + rnorm(20*1000, sd = 1)
y <- 5 + 10*x + rnorm(20*1000, sd = 10) + c(sapply(rnorm(20, sd = 10), rep, times = 1000))
facX <- factor(sapply(1:20, rep, times = 1000))
mydata <- data.frame(y=y,x=x,facX=facX, state=rep(1:1000, 20))
model <- plm(y ~ x, data = mydata, index = c("facX", "state"), effect = "individual", model = "within")
plmTest <- coeftest(model,vcov=vcovHC(model,type = "HC1", cluster="group"))
lfeTest <- summary(felm(y ~ x | facX | 0 | facX))
data.frame(lfeClusterSE=lfeTest$coefficients[2],
plmClusterSE=plmTest[2])
lfeClusterSE plmClusterSE
1 0.06746538 0.06572588
Badanie 'multiwayvcov :: cluster.vcov' jest łatwo można zobaczyć algebrę używaną do uzyskania poprawki Staty o niewielkich próbach stopni swobody, a mianowicie: '(df $ M/(df $ M - 1)) * ((df $ N - 1)/(df $ N - df $ K)) '. Ale jaka byłaby odpowiednia korekta df, jaką zastosowano, to 'sandwich (..., adjust = TRUE)'? W [tej odpowiedzi] (http://stackoverflow.com/questions/27367974/) wyjaśnisz, że różnica między tymi dwoma jest taka, że dla Stata podział to "1/(n - 1)", a dla 'sandwich' jest to '1/(n - k)'. Jednak nie jestem pewien, jak to przekłada się na odpowiednią algebrę ... Czy zastępuję '(df $ N - 1)' '' '' 'df $ - df $" powyżej? – landroni
Myślę, że tak, ale nie sprawdziłem szczegółowo kodu. Zauważ też, że obecnie 'sandwich' sam w sobie nie oferuje klastrowych błędów standardowych. Wszystkie teoretyczne szczegóły dotyczące pakietu "sandwich" są również udokumentowane w dwóch winietach. –