vcovCR() для объекта plm, не работающего внутри функции

Недавно я заметил, что вызов vcovCR() (из пакета clubSandwich) для объекта plm (из пакета plm) внутри функции не работает должным образом.

Простой пример для воссоздания моей находки приведен ниже.

example.plm <- function(some.data, linear.formula, cluster.variable){
  require(plm)
  require(clubSandwich)
  model.output <- plm(formula = linear.formula, data = some.data, model = "within", index = cluster.variable)
  vcovCR(model.output, cluster = some.data[, cluster.variable], type="CR1S")
}

Теперь мы запускаем функцию на знаменитых данных радужной оболочки.

example.plm(some.data = iris,
            linear.formula = "Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width",
            cluster.variable = "Species")

и в конечном итоге с сообщением об ошибке, которое гласит: Error in eval(mf$data, envir) : object 'some.data' not found.

Однако запуск тех же вычислений, но не внутри функции, работает нормально:

require(clubSandwich)
model.output <- plm(formula = Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width, data = iris, model = "within", index = "Species")
vcovCR(model.output, cluster = iris[, "Species"], type="CR1S")

Я что-то упустил здесь? Почему функция может нормально работать вне другой функции, но не внутри нее? Чтобы еще больше запутать ситуацию, эта проблема не возникает при использовании объекта lm() вместо объекта plm(). Кроме того, если я уберу часть cluster = some.data[, cluster.variable] из вызова vcovCR() внутри функции, она тоже почему-то сработает.


r plm
person Phil    schedule 05.12.2019    source источник


Ответы (1)


Это может быть ошибка в следующих строках функции clubSandwich:::get_index_order, которая вызывается из vcovCR:

envir <- environment(obj$formula)
mf <- match.call(plm::plm, call = obj$call, envir = envir)

Похоже, что match.call ищет вашу переменную some.data в среде верхнего уровня, тогда как она существует только в рамках вашей функции example.plm().

Может быть, создать отчет об ошибке с сопровождающим пакета clubSandwich?

person user2474226    schedule 05.12.2019