Надежная стандартная ошибка (HC3) с использованием vcovH C (), самое подходящее для объекта plm - PullRequest
0 голосов
/ 13 апреля 2020

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

Для самой модели я использую следующие строки кода:

require(plm)
require(sandwich)
require(lmtest)
require(car)
QSFE <- plm(log(SPREAD)~PERIOD, data = na.omit(QSREG), index = c("STOCKS", "TIME"), model = "within")

Это работает очень хорошо, теперь, чтобы вычислить робастную стандартную ошибку HC3, я использовал функцию coeftest с vcovHC в ней.

coeftest(x = QSFE, vcov = vcovHC(QSFE, type = "HC3", method = "arellano"))

И это не работает. Возвращаемая ошибка выглядит следующим образом:

Error in 1 - diaghat : non-numeric argument to binary operator

Проблема в vcovH C: когда устанавливается тип "HC3". Он использует функцию hatvalues() для вычисления "diaghat", которая не поддерживает plm объекты и возвращает ошибку:

Error in UseMethod("hatvalues") : 
no applicable method for 'hatvalues' applied to an object of class "c('plm', 'panelmodel')"

Кто-нибудь знает, как использовать оценщик HC3 (HC2) для plm , Я думаю, что это должно зависеть от функции hatvalues, используемой в vcov, поскольку HC0 / HC1 работает нормально, потому что это не нужно.

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

PLM разработчик здесь. В то время как вопрос эффективности интересен с точки зрения статистики, с точки зрения статистики эти поправки для небольших выборок не нужны, если у вас есть панель размером 300 x 300. Вы можете счастливо go с HC0 (или если вы определенно хотите, чтобы коррекция малых выборок на панели "sss" (панель DF) была бы лучше в любом случае, а последняя в вычислительном отношении намного легче).

Тот факт, что Корректировки малых выборок становятся бесполезными, когда размер данных увеличивается, и это главная причина, по которой мы не выделяли ограниченное время разработчиков на их повышение эффективности. Кроме того, со статистической точки зрения, пожалуйста, имейте в виду, что свойства "кластеризации" vcovs, таких как White-Arellano, менее чем идеальны для T ~ N, они предназначены для N >> T.

Наконец, одно уточнение относительно : ваш оригинальный пост: хотя изначально vcovHC является обобщенной функцией c в пакете 'sandwich', в контексте панели применяется специализированный метод vcovHC.plm из пакета 'plm'. Лучшее объяснение здесь: https://www.jstatsoft.org/article/view/v082i03

0 голосов
/ 13 апреля 2020

В методе, предоставленном plm для объектов plm, в пакете plm нет функции hatvalues, слово "hatvalues" отсутствует даже в исходном коде plm. Обязательно загрузите пакет plm при выполнении coeftest. Кроме того, убедитесь, что установлена ​​последняя версия plm из CRAN (в настоящее время версия 2.2-3).

Если у вас загружен пакет plm, код должен работать. Это делается с примером игрушек на моей машине. Чтобы быть уверенным, вы можете использовать vcovHC, как указано plm:

Fist, попробуйте vcovHC(QSFE, type = "HC3", method = "arellano"). Если это приводит к той же ошибке, попробуйте plm::vcovHC(QSFE, type = "HC3", method = "arellano").

Далее, пожалуйста, попробуйте: coeftest(QSFE, vcov.=function(x) vcovHC(QSFE, method="arellano", type="HC3"))

Редактировать : Используя предоставленный набор данных, ясно, что диспетчеризация до vcovHC.plm работает правильно. Пакет sandwich здесь не задействован. Причиной root является потребность в памяти функции vcovHC.plm с аргументом type, установленным в "HC3" (и другие). Это также объясняет ваш комментарий о функции, работающей для подмножества данных.

vcovHC(QSFE, type = "HC3", method = "arellano")
Error in 1 - diaghat : non-numeric argument to binary operator
Called from: omega(uhat, diaghat, df, G)
Browse[1]> diaghat
[1] "Error : cannot allocate vector of size 59.7 Gb\n"
attr(,"class")
[1] "try-error"
attr(,"condition")
<simpleError: cannot allocate vector of size 59.7 Gb>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...