il mio problema è questo: ottengo NA
dove dovrei ottenere alcuni valori nel calcolo degli errori standard robusti.Regressione dati pannello: errori standard robusti
Sto cercando di eseguire una regressione del pannello di effetti fissi con errori standard robusti del cluster. Per questo, seguo lo Arai (2011) che a p. 3 segue Stock/ Watson (2006) (successivamente pubblicato in Econometrica, per coloro che hanno accesso). Vorrei correggere i gradi di libertà con (M/(M-1)*(N-1)/(N-K)
contro il bias al ribasso poiché il mio numero di cluster è finito e ho dati sbilanciati.
Problemi simili sono stati registrati prima [1, 2] su StackOverflow e problemi correlati [3] su CrossValidated.
Arai (e la risposta nel 1 ° link) utilizza il seguente codice per le funzioni (che fornisco i miei dati qui di seguito con qualche ulteriore commento):
gcenter <- function(df1,group) {
variables <- paste(
rep("C", ncol(df1)), colnames(df1), sep=".")
copydf <- df1
for (i in 1:ncol(df1)) {
copydf[,i] <- df1[,i] - ave(df1[,i], group,FUN=mean)}
colnames(copydf) <- variables
return(cbind(df1,copydf))}
# 1-way adjusting for clusters
clx <- function(fm, dfcw, cluster){
# R-codes (www.r-project.org) for computing
# clustered-standard errors. Mahmood Arai, Jan 26, 2008.
# The arguments of the function are:
# fitted model, cluster1 and cluster2
# You need to install libraries `sandwich' and `lmtest'
# reweighting the var-cov matrix for the within model
library(sandwich);library(lmtest)
M <- length(unique(cluster))
N <- length(cluster)
K <- fm$rank
dfc <- (M/(M-1))*((N-1)/(N-K))
uj <- apply(estfun(fm),2, function(x) tapply(x, cluster, sum));
vcovCL <- dfc*sandwich(fm, meat=crossprod(uj)/N)*dfcw
coeftest(fm, vcovCL) }
, dove il gcenter
calcola le deviazioni dalla media (effetto fisso). Quindi continuo e faccio la regressione con DS_CODE
come variabile del mio cluster (ho chiamato i miei dati "dati").
centerdata <- gcenter(data, data$DS_CODE)
datalm <- lm(C.L1.retE1M ~ C.MCAP_SEC + C.Impact_change + C.Mom + C.BM + C.PD + C.CashGen + C.NITA + C.PE + C.PEdummy + factor(DS_CODE), data=centerdata)
M <- length(unique(data$DS_CODE))
dfcw <- datalm$df/(datalm$df - (M-1))
e desidera calcolare
clx(datalm, dfcw, data$DS_CODE)
Tuttavia, quando ho voglia di calcolare uj (vedi sopra formula clx
) per la varianza, ottengo solo all'inizio alcuni valori per i miei regressori, poi molti zeri. Se questo input è uj utilizzato per la varianza, solo il risultato è NAs
.
I miei dati
Dato che i miei dati possono essere di struttura speciale e io non riesco a capire il problema, ho posto la cosa intera come link da Hotmail. Il motivo è che con altri dati (presi da Arai (2011)) il mio problema non si verifica. Scusa in anticipo per il casino, ma sarei molto grato se potessi comunque dare un'occhiata a questo. Il file è un file .txt 5mb contenente dati puramente.
Arai non esistono più sotto il vostro link. Puoi fornire il link attuale? – MERose