Как кластеризовать стандартную ошибку в vCovCR clubSandwich's ()? - PullRequest
2 голосов
/ 01 мая 2019

Я пытаюсь указать кластерную переменную после plm, используя vcovCR () в пакете clubSandwich для моих смоделированных данных (которые я использую для имитации мощности), но я получаю следующее сообщение об ошибке: «Ошибка в [.data.frame (eval(mf $ data, envir),, index_names): выбраны неопределенные столбцы "

Я не уверен, относится ли это к vcovCR () или что-то общее к R, но кто-нибудь может сказать мне, что не так с моимкод?(Я видел похожий пост здесь Как кластеризовать стандартные ошибки plm на другом уровне, а не id или времени? , но это не решило мою проблему).

Мой код:

N <- 100;id <- 1:N;id <- c(id,id);gid <- 1:(N/2);
gid <- c(gid,gid,gid,gid);T <- rep(0,N);T = c(T,T+1)
a <- qnorm(runif(N),mean=0,sd=0.005)
gp <- qnorm(runif(N/2),mean=0,sd=0.0005)
u <- qnorm(runif(N*2),mean=0,sd=0.05)
a <- c(a,a);gp = c(gp,gp,gp,gp)
Ylatent <- -0.05*T + a + u
Data <- data.frame(
  Y = ifelse(Ylatent > 0, 1, 0),
  id = id,gid = gid,T = T
)
library(clubSandwich)
library(plm)
fe.fit <- plm(formula = Y ~ T, data = Data, model = "within", index = "id",effect = "individual", singular.ok = FALSE)
vcovCR(fe.fit,cluster=Data$id,type = "CR2") # doesn't work, but I can run this by not specifying cluster as in the next line
vcovCR(fe.fit,type = "CR2")
vcovCR(fe.fit,cluster=Data$gid,type = "CR2") # I ultimately want to run this

1 Ответ

1 голос
/ 07 мая 2019

Сделайте ваши данные pdata.frame первыми. Это безопаснее, особенно если вы хотите, чтобы указатель времени создавался автоматически (кажется, это имеет место при просмотре вашего кода).

Продолжаем то, что у вас есть:

pData <- pdata.frame(Data, index = "id") # time index is created automatically
fe.fit2 <- plm(formula = Y ~ T, data = pData, model = "within", effect = "individual")
vcovCR(fe.fit2, cluster=Data$id,type = "CR2")
vcovCR(fe.fit2, type = "CR2")
vcovCR(fe.fit2,cluster=Data$gid,type = "CR2")

Ваш пример не работает из-за ошибки в функции извлечения данных clubSandwich get_index_order (начиная с версии 0.3.3) для объектов plm. Предполагается, что обе индексные переменные находятся в исходных данных, но в вашем примере это не так, когда временной индекс создается автоматически путем указания только отдельного измерения в аргументе index.

...