Quando si esegue una specifica del pannello di errore standard del cluster con plm
e lfe
, ottengo risultati diversi nella seconda cifra significativa. Qualcuno sa perché si differenziano nel calcolo degli SE?Errori standard clusterizzati diversi in plm vs 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
Esaminando 'multiwayvcov :: cluster.vcov' è è facile vedere l'algebra utilizzata per ottenere la correzione dei gradienti di libertà a piccoli campioni di Stata, ovvero: '(df $ M/(df $ M - 1)) * ((df $ N - 1)/(df $ N - df $ K)) '. Ma quale sarebbe la correzione df equivalente usata come 'sandwich (..., adjust = TRUE)'? In [questa risposta] (http://stackoverflow.com/questions/27367974/) spieghi che la differenza tra i due è che per Stata la divisione è per '1/(n - 1)', e per 'sandwich' è per '1/(n - k)'. Tuttavia non sono sicuro di come questo si traduca in un'algebra appropriata ... Sostituisco '(df $ N - 1)' da '(df $ N - df $ K)' sopra? – landroni
Penso di sì ma non ho controllato il codice in dettaglio. Si noti inoltre che attualmente 'sandwich' non offre al momento errori standard in cluster. Tutti i dettagli teorici alla base del pacchetto "sandwich" sono anche documentati nelle due vignette. –