Использование R и PLM для оценки моделей с фиксированными эффектами, которые включают взаимодействия со временем


16

Я использую plm()для оценки моделей с фиксированными эффектами формы

y ~ x + time + time:fixed_trait

где fixed_traitпеременная, которая варьируется между людьми, но постоянна внутри людей.

Смысл взаимодействия timeс ним fixed_traitзаключается в том, чтобы позволить эффекту fixed_traitизменяться во времени. (Я работаю здесь из недавнего буклета Пола Эллисона о фиксированных эффектах. Ссылка добавлена.)

plm()без проблем оценивает коэффициенты и стандартные ошибки для таких моделей. Но summary.plm()не могу рассчитать R ^ 2 для этих моделей. Это проблема, которую я хотел бы решить.

Вот минимальный пример:

library(plm)
tmp <- data.frame(ID=rep(1:3, 2), year=rep(0:1, each=3), 
                  y=rnorm(6), const=rep(1:3, 2))
fe1 <- plm(y ~ year,              index=c('ID', 'year'), data=tmp)
fe2 <- plm(y ~ year + year:const, index=c('ID', 'year'), data=tmp)
summary(fe1)  # works fine
summary(fe2)  # Error in crossprod(t(X), beta) : non-conformable arguments

Погружение в plm:::summary.plmделает проблему яснее. Чтобы вычислить R ^ 2, plmпопытайтесь сделать это:

beta <- coef(fe2)
X <- model.matrix(fe2)
crossprod(t(X), beta)

Это не работает, потому что betaвключает в себя только оценки year1и year0:const, а Xтакже включает столбец для year1:const. Другими словами, Xвключает столбцы для обоих year0:constи year1:const, и невозможно оценить оба этих коэффициента.

Обходной путь - создать термин взаимодействия «вручную», прежде чем вводить его в формулу:

tmp$yearXconst <- tmp$year*tmp$const
fe3 <- plm(y ~ year + yearXconst, index=c('ID', 'year'), data=tmp)
summary(fe3)  # works fine

Но это громоздко. Если не считать этого, могу ли я что-нибудь сделать для summary.plmработы с такими моделями?

===

Эллисон, Пол Д. 2009. Фиксированные регрессионные модели эффектов. Лос-Анджелес, Калифорния: Мудрец. Смотрите особенно страницы 19-21.


1
Начиная с plmверсии 1.6-4, это больше не проблема, так как алифицированные коэффициенты просто отбрасываются.
Helix123

Ответы:


9

Попробуйте использовать

fe3 <- plm(y ~ year * const, index = c('ID', 'year'), data = tmp)

вместо. Это даже работает, если вы избыточно включаете эффекты с фиксированным временем во *взаимодействие (потому что время фиксируется как эффект исключен):

fe4 <- plm(y ~ year * const, index = c('ID', 'year'), data = tmp, effect = "twoway")

Учитывая, что *нужно использовать вместо :, есть ли способ подавить вывод коэффициентов невзаимодействия?
Артур
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.