Mój problem polega na tym, że dostaję NA
, gdzie powinienem otrzymać pewne wartości w obliczeniach solidnych błędów standardowych.Regresja danych panelu: Solidne błędy standardowe
Próbuję wykonać regresję z panelem efektów stałych za pomocą standardowych błędów klastrowych. W tym celu podążam za Arai (2011), który na s. 3 następuje po Stock/ Watson (2006) (później opublikowane w Econometrica, dla tych, którzy mają dostęp). Chciałbym skorygować stopnie swobody przez (M/(M-1)*(N-1)/(N-K)
przeciwko odchyleniu w dół, ponieważ moja liczba klastrów jest skończona i mam niezbalansowane dane.
Podobne problemy zostały wysłane przed [1, 2] na StackOverflow i związane z tym problemy [3] na CrossValidated.
Arai (a odpowiedź w 1 linku) wykorzystuje następujący kod dla funkcji (I dostarczyć swoje dane poniżej pewnego dalszego komentarza):
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) }
, gdzie gcenter
oblicza odchylenia od średniej (poprawiony efekt). Następnie kontynuuję i wykonuję regres z DS_CODE
będącą moją zmienną klastra (nazwa moich danych to "dane").
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))
i chcemy obliczyć
clx(datalm, dfcw, data$DS_CODE)
Jednak, gdy chcę, aby obliczyć UJ (patrz wzór clx
powyżej) dla wariancji, mam tylko na początku pewne wartości dla moich regresorów, następnie wiele zer. Jeśli to wejście uj zostanie użyte dla wariancji, wyniknie tylko NAs
.
moje dane
Ponieważ moje dane mogą być z specjalnej konstrukcji i nie mogę dowiedzieć się problem, mogę napisać całą rzecz jako link z Hotmail. Powodem jest to, że z innymi danymi (zaczerpniętymi z Arai (2011)) mój problem nie występuje. Przykro mi z góry za bałagan, ale byłabym bardzo wdzięczna, gdybyś mogła rzucić na to okiem. Plik to plik 5tb .txt zawierający wyłącznie dane.
Arai już nie istnieje w linku. Czy możesz podać rzeczywisty link? – MERose