2010-12-13 4 views
12

Я пытаюсь изучить R после использования Stata, и я должен сказать, что мне это нравится. Но теперь у меня проблемы. Я собираюсь сделать несколько регрессий с данными Panel, поэтому я использую пакет plm.Heteroscedasticity надежные стандартные ошибки с пакетом 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
+2

это то, что вам лучше спросить у http://www.crossvalidated.com, они будут в состоянии помочь вам больше. И было бы неплохо иметь некоторый воспроизводимый код, пока вы на нем, вместе с ожидаемым результатом. Это часто устраняет проблему довольно быстро. –

+3

Я не знаю stata, но похоже, что ваша регрессия stata представляет собой объединенную линейную модель Y = a0 + a1 * V1 + a2 * ENTITY + epsilon с надежным het se, что вы делаете с 'lm' , поэтому результаты совпадают. В модели 'plm' вы выполняете регрессию FE Y = a0 + a1 * V1 + ui + epsilon, где ui - это FE для каждого« индивидуального », который по индексу, указанному вами как ENTITY. Поэтому я думаю, что ваши результаты stata и R совпадают в первом случае, потому что вы делаете объединенную панель с сущностью как ind var в обоих случаях. Но я не знаю stata. –

ответ

2

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

plm «s„в“вариант с„индивидуальными“эффектами означает модель вида:

yit = a + Xit*B + eit + ci 

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

yit_bar = Xit_bar*B + eit_bar 

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

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

Для ваших кодов Stata и plm, которые соответствуют вам, вы должны использовать одну и ту же модель.

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

Matching Stata к R:

xtset entity year 
xtreg y v1, fe robust 

Согласование с Stata PLM:

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

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

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

4

По умолчанию в пакете 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 (но, как упоминалось в комментариях, не воспроизводимый пример и какие результаты вы ожидаете, что труднее ответить на вопрос).

Подробнее об этом и некоторых тестах R и Stata, надежных SE см. Fama-MacBeth and Cluster-Robust (by Firm and Time) Standard Errors in R.

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

+0

'plm'' type = "sss" 'не реплицирует небольшую настройку Stata точно, потому что Stata имеет перехват в своей FE-модели и, таким образом, использует другую величину коэффициентов при настройке. 'plm' не имеет этого перехвата и, таким образом, использует« величину коэффициентов - 1 »относительно Stata в настройке. Для небольших образцов это дает несколько иные результаты, но останется незаметным в больших образцах. – Helix123

+0

@ Helix123 Действительно. Я обсуждал это с авторами «plm», и в целом неясно, каково теоретическое обоснование для Stata включения перехвата в этих вычислениях. В то время как перехват * может быть * вычислен, а 'plm' делает это также, если запрашивается (' inside_intercept() ', возможно, все еще в SVN), это, кажется, несколько искусственное понятие в контексте' внутри' моделей. Пока не представляется разумным включать «численно точную» репликацию кластеризованных SE-групп Stata ... Это говорит о том, что Gretl, похоже, реплицирует эти вычисления * точно * à la Stata. – landroni