Как сгруппировать стандартную ошибку в vcovCR () clubSandwich?

Я пытаюсь указать переменную кластера после 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

person Yuki Takahashi    schedule 01.05.2019    source источник
comment
Мне кажется, что это ошибка clubSandwich, о которой уже сообщалось здесь: github.com/jepusto/clubSandwich / issues / 38   -  person Helix123    schedule 02.05.2019
comment
Спасибо, но с другим набором данных работает. Например: library(clubSandwich) library(plm) data("Produc", package = "plm") plm_FE <- plm(log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp, data = Produc, index = c("state","year"), effect = "individual", model = "within") vcovCR(plm_FE, type="CR2",cluster = Produc$state)   -  person Yuki Takahashi    schedule 06.05.2019


Ответы (1)


Сделайте ваши данные 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.

person Helix123    schedule 06.05.2019