我正在对集群数据运行以下加权回归,并且我使用clx函数继续为我的集群标准错误获取NAs。 请注意,我使用的是na.action = na.exclude,原因是我最终将每次观察的残差附加到数据帧中以便进一步操作。
#partialing the data
partialData <- data[data$group_code2 %in% group_list,]
#running the regression and calculating clustered standard errors
reg1 <- lm(employed ~ age + eduction , data=partialData, weights = w, na.action=na.exclude)
clx(fm=reg1, dfcw = 1, cluster= partialData$group_code2)
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) }
我原本怀疑na.exclude给我带来了麻烦,因为一些残差的值是NA。那么有没有办法让clx忽略集群和对象reg1的NA?
请注意,我了解我可以在运行任何回归之前从数据集中删除非完整案例,这可以解决问题,但我正在避免这种情况,因为我正在尝试许多可能的规范(因此我的协变量会不断变化)我试图避免为每组可能的协变量更改代码。
答案 0 :(得分:0)
由于您的示例无法重现,因此很难给您一个有用的答案。但答案的关键在于Mahmood Arai的集群标准错误的原始代码不能处理NA。
在这种情况下,您可以使用multiwayvcov
包来处理您的情况:
require(lmtest)
require(multiwayvcov)
reg1 <- lm(employed ~ age + eduction, data=partialData,
weights = w, na.action=na.exclude)
coeftest(reg1, vcov=function(x) cluster.vcov(x, partialData$group_code2))
另见: