Устойчивые к гетероскедастичности стандартные ошибки с пакетом PLM

Я пытаюсь изучить R после использования Stata, и я должен сказать, что мне это нравится. Но теперь у меня проблемы. Я собираюсь сделать несколько регрессий с данными панели, поэтому я использую пакет plm.

Теперь я хочу получить те же результаты с plm в R, что и при использовании функции lm и Stata, когда я выполняю устойчивую гетероскедастичность и регрессию с фиксированной сущностью.

Допустим, у меня есть набор данных панели с переменными Y, ENTITY, TIME, V1.

Я получаю те же стандартные ошибки в R с этим кодом

lm.model<-lm(Y ~ V1 + factor(ENTITY), data=data)
coeftest(lm.model, vcov.=vcovHC(lm.model, type="HC1))

как когда я выполняю эту регрессию в Stata

xi: reg Y V1 i.ENTITY, robust

Но когда я выполняю эту регрессию с пакетом plm, я получаю другие стандартные ошибки.

plm.model<-plm(Y ~ V1 , index=C("ENTITY","YEAR"), model="within", effect="individual", data=data)
coeftest(plm.model, vcov.=vcovHC(plm.model, type="HC1))
  • Я пропустил настройку некоторых параметров?
  • Использует ли модель plm какой-либо другой вид оценки, и если да, то как?
  • Могу ли я каким-то образом иметь те же стандартные ошибки с plm, что и в Stata с , robust

person Marcus R    schedule 13.12.2010    source источник
comment
вам лучше спросить об этом на crossvalidated.com, они смогут вам больше помочь. И было бы неплохо иметь воспроизводимый код, пока вы работаете, вместе с ожидаемым результатом. Это часто решает проблему намного быстрее.   -  person Joris Meys    schedule 14.12.2010
comment
Я не знаю статистику, но похоже, что ваша регрессия статистики представляет собой объединенную линейную модель Y = a0 + a1 * V1 + a2 * ENTITY + epsilon с надежным het se, что вы делаете с lm, поэтому результаты совпадают. В модели plm вы выполняете регрессию FE Y = a0 + a1 * V1 + ui + epsilon, где ui - это FE для каждого человека, который index вы указали как ENTITY. Поэтому я думаю, что ваши результаты stata и R совпадают в первом случае, потому что вы делаете объединенную панель с entity как ind var в обоих случаях. Но я не знаю статы.   -  person Richard Herron    schedule 12.01.2011


Ответы (2)


По умолчанию пакет plm не использует точную такую ​​же мелкую корректировку для данных панели, как Stata. Однако в версии 1.5 plm (на CRAN) у вас есть опция, которая будет имитировать то, что делает Stata.

plm.model<-plm(Y ~ V1 , index=C("ENTITY","YEAR"), model="within", 
    effect="individual", data=data)
coeftest(plm.model, vcov.=function(x) vcovHC(x, type="sss"))

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

Для получения дополнительной информации об этом и некоторых тестах надежных SE для R и Stata см. Стандартные ошибки Fama-MacBeth и кластерной устойчивости (по фирме и времени) в R.

Смотрите также:

person landroni    schedule 14.08.2014
comment
type="sss" plm не воспроизводит корректировку небольшой выборки Stata именно потому, что Stata имеет точку пересечения в своей модели FE и, следовательно, использует другое количество коэффициентов в корректировке. plm не имеет этого перехвата и, таким образом, использует количество коэффициентов - 1 относительно Stata в уравнивании. Для небольших выборок это дает несколько другие результаты, но останется незамеченным в больших выборках. - person Helix123; 07.08.2016
comment
@ Helix123 Действительно. Я обсуждал это с авторами plm, и в целом неясно, каково теоретическое обоснование для Stata включения перехвата в эти вычисления. Хотя перехват может быть вычислен, и plm также делает это по запросу (within_intercept(), возможно, все еще в SVN), это кажется несколько искусственной концепцией в контексте within моделей. На данный момент не представлялось разумным включать точную числовую копию кластеризованных SE в Stata ... При этом Гретл, похоже, копирует эти вычисления в точности а-ля Stata. - person landroni; 08.08.2016

Возможно ли, что ваш код Stata отличается от того, что вы делаете с plm?

Параметр "внутри" plm с "индивидуальными" эффектами означает модель формы:

yit = a + Xit*B + eit + ci

Что делает plm, так это принижает значение коэффициентов, так что ci выпадает из уравнения.

yit_bar = Xit_bar*B + eit_bar

Таким образом, суффикс «полоса» означает, что у каждой переменной было вычтено среднее значение. Среднее значение рассчитывается с течением времени, и поэтому эффект рассчитан на человека. У вас также может быть фиксированный временной эффект, который будет общим для всех людей, и в этом случае эффект будет также через время (хотя в данном случае это не имеет значения).

Я не уверен, что делает команда «xi» в STATA, но я думаю, что она расширяет взаимодействие, верно? Тогда мне кажется, что вы пытаетесь использовать фиктивную переменную для ENTITY, как было выделено @richardh.

Чтобы ваши коды Stata и plm совпадали, вы должны использовать одну и ту же модель.

У вас есть два варианта: (1) вы устанавливаете свои данные в stata и используете опцию xtreg с модификатором fe или (2) вы используете plm с опцией объединения и одним фиктивным элементом на ENTITY.

Сопоставление Stata с R:

xtset entity year
xtreg y v1, fe robust 

Соответствие plm и Stata:

plm(Y ~ V1 + as.factor(ENTITY) , index=C("ENTITY","YEAR"), model="pooling", effect="individual", data=data)

Затем используйте vcovHC с одним из модификаторов. Обязательно ознакомьтесь с этой статьей, в которой есть хороший обзор всех механизмов, лежащих в основе "HC "варианты и то, как они влияют на ковариационную матрицу дисперсии.

Надеюсь это поможет.

person mmgm    schedule 11.12.2012