Я включил пример игрушки, чтобы воссоздать мою ошибку:R соответствие dataframe до и после регрессии с пропущенными значениями и подмножества регрессии
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
Вопрос заключается в том, что оригинал dataframe больше, чем dataframe используется в regresssion из-за удаленной NA и подмножества регрессии. Мне нужно вычислить надежные стандартные ошибки, поэтому мне приходится вычислять SE с помощью функции cl, но как я могу определить удаленные NA и соответствующие подмножества, чтобы я мог идентифицировать правильный кластер, чтобы перейти с DataFrame.
Заранее спасибо.
Могу ли я спросить, почему у вас есть «Дат» в списке аргументов, так как 'cl' функция не ссылаться на него? –
Вы правы, я должен удалить это. Так как кластер - это вектор, который предположительно соответствует кадру данных, используемому в регрессии. – mumpy