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