我已经包含了一个玩具示例来重新创建我的错误:
data(cars)
cars$dist[cars$dist<5]<-NA
cars$fast<- (cars$speed>10)*1
fit<-lm(speed~dist,cars)
cl <- function(dat,fm, cluster){
require(sandwich, quietly = TRUE)
require(lmtest, quietly = TRUE)
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)
result<-coeftest(fm, vcovCL)
return(result)}
cl(cars,fit,cars$fast)
Error in tapply(x, cluster, sum) : arguments must have same length
问题是原始数据帧大于回归中使用的数据帧,因为移除了 NA 和子集回归。我需要计算稳健的标准误差,因此我必须使用函数 cl 计算 SE,但是如何识别已删除的 NA 和适当的子集,以便我可以识别与数据帧一起使用的正确集群。
提前致谢。