我的问题是:在计算鲁棒标准误差时,我得到了“NA”,而不是一些值。
我正在尝试进行带有聚类鲁棒标准误差的固定效应面板回归。为此,我遵循Arai(2011),他在第3页上遵循Stock / Watson(2006)(后来发表在Econometrica上,对于那些有访问权限的人)。由于我的群集数量有限且数据不平衡,我想通过
然而,当我想计算方差的uj(参见上面的公式
我正在尝试进行带有聚类鲁棒标准误差的固定效应面板回归。为此,我遵循Arai(2011),他在第3页上遵循Stock / Watson(2006)(后来发表在Econometrica上,对于那些有访问权限的人)。由于我的群集数量有限且数据不平衡,我想通过
(M /(M-1)*(N-1)/(N-K)
校正自由度,以克服向下偏差。
此前在StackOverflow上已经发布过类似的问题[1, 2],CrossValidated上也有相关问题[3]。
Arai(以及第一个链接中的答案)使用以下代码进行函数操作(我在下面提供了我的数据,并加上了一些注释):
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
作为我的聚类变量进行回归(我已经将数据命名为"data")。
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
。
我的数据
由于我的数据可能具有特殊结构,我无法找出问题所在,因此我将整个数据作为link从Hotmail发布出来。原因是使用其他数据(取自Arai(2011))时没有出现这种问题。不好意思,文件有些混乱,但如果您能看一下,我将非常感激。
该文件是一个5mb的纯数据.txt文件。