clm在na.action = na.exclude上使用时返回NA

时间:2014-11-30 22:19:09

标签: r

我正在对集群数据运行以下加权回归,并且我使用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?

请注意,我了解我可以在运行任何回归之前从数据集中删除非完整案例,这可以解决问题,但我正在避免这种情况,因为我正在尝试许多可能的规范(因此我的协变量会不断变化)我试图避免为每组可能的协变量更改代码。

1 个答案:

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

另见: