Регрессия панельных данных: устойчивые стандартные ошибки

моя проблема заключается в следующем: я получаю NA, где я должен получить некоторые значения при вычислении надежных стандартных ошибок.

Я пытаюсь провести панельную регрессию с фиксированным эффектом с кластероустойчивыми стандартными ошибками. Для этого я следую Араи (2011), который на с. 3 следует Stock/Watson (2006)(позже опубликовано в Econometricaдля тех, у кого есть доступ). Я хотел бы скорректировать степени свободы на (M/(M-1)*(N-1)/(NK)против смещения вниз, так как количество моих кластеров конечно и у меня несбалансированные данные.

Подобные проблемы были опубликованы ранее [1, 2] на StackOverflow и связанные проблемы [3] на CrossValidated.

Arai (и ответ в 1-й ссылке) использует следующий код для функций (я привожу свои данные ниже с некоторыми дополнительными комментариями ):

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) }

, где gcenterвычисляет отклонения от среднего (фиксированного Затем я продолжаю и выполняю регрессию с DS_CODEв качестве переменной кластера (я назвал свои данные «данными»).

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))

и хочу вычислить

clx(datalm, dfcw, data$DS_CODE)

Однако, когда я хочу вычислить uj(см. формулу clxвыше) для дисперсии я получаю только вначале некоторые значения для моих регрессоров, затем много нулей.Если этот вход ujиспользуется для дисперсии, в результате получаются только NAs.

Мои данные

Так как мои данные могут иметь особую структуру и я не могу понять, в чем проблема, я публикую все это как ссылкус Hotmail. Причина в том, что с другими данными (взятыми из Arai (2011)) моей проблемы не возникает. Заранее извините за беспорядок, но я был бы очень признателен, если бы вы все же могли взглянуть на это. Файл представляет собой файл .txt размером 5 МБ, содержащий исключительно данные.

6
задан Community 23 May 2017 в 11:54
поделиться