Double clustered standard errors for panel data

前端 未结 4 762
小鲜肉
小鲜肉 2020-12-09 00:33

I have a panel data set in R (time and cross section) and would like to compute standard errors that are clustered by two dimensions, because my residuals are correlated bot

4条回答
  •  [愿得一人]
    2020-12-09 00:51

    Arai's function can be used for clustering standard-errors. He has another version for clustering in multiple dimensions:

    mcl <- function(dat,fm, cluster1, cluster2){
              attach(dat, warn.conflicts = F)
              library(sandwich);library(lmtest)
              cluster12 = paste(cluster1,cluster2, sep="")
              M1  <- length(unique(cluster1))
              M2  <- length(unique(cluster2))   
              M12 <- length(unique(cluster12))
              N   <- length(cluster1)          
              K   <- fm$rank             
              dfc1  <- (M1/(M1-1))*((N-1)/(N-K))  
              dfc2  <- (M2/(M2-1))*((N-1)/(N-K))  
              dfc12 <- (M12/(M12-1))*((N-1)/(N-K))  
              u1j   <- apply(estfun(fm), 2, function(x) tapply(x, cluster1,  sum)) 
              u2j   <- apply(estfun(fm), 2, function(x) tapply(x, cluster2,  sum)) 
              u12j  <- apply(estfun(fm), 2, function(x) tapply(x, cluster12, sum)) 
              vc1   <-  dfc1*sandwich(fm, meat=crossprod(u1j)/N )
              vc2   <-  dfc2*sandwich(fm, meat=crossprod(u2j)/N )
              vc12  <- dfc12*sandwich(fm, meat=crossprod(u12j)/N)
              vcovMCL <- vc1 + vc2 - vc12
              coeftest(fm, vcovMCL)}
    

    For references and usage example see:

    • Clustered Standard Errors in R

提交回复
热议问题