Я використовую 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
роботу з такими моделями?
===
Allison, Paul D. 2009. Регресійні моделі з фіксованими ефектами. Лос-Анджелес, Каліфорнія: Мудрець. Див. Особливості сторінок 19-21.
plm
версії 1.6-4, це вже не є проблемою, оскільки зменшені коефіцієнти просто знижуються.