Я использую 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.
plm
версии 1.6-4, это больше не проблема, так как алифицированные коэффициенты просто отбрасываются.