Tôi đang sử dụng plm()để ước tính các mô hình hiệu ứng cố định của biểu mẫu
y ~ x + time + time:fixed_trait
trong đó fixed_traitmột biến số khác nhau giữa các cá nhân nhưng không đổi trong các cá nhân.
Điểm tương tác timevới fixed_traitlà cho phép hiệu ứng fixed_traitthay đổi theo thời gian. (Tôi đang làm việc ở đây từ tập sách gần đây của Paul Allison về các hiệu ứng cố định. Trích dẫn được thêm vào.)
plm()không gặp khó khăn khi ước tính hệ số và sai số chuẩn cho các mô hình đó. Nhưng summary.plm()không thể tính R ^ 2 cho các mô hình này. Đây là vấn đề mà tôi muốn khắc phục.
Đây là một ví dụ tối thiểu:
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
Đi sâu vào plm:::summary.plmlàm cho vấn đề rõ ràng hơn. Để tính R ^ 2, hãy plmthử làm điều này:
beta <- coef(fe2)
X <- model.matrix(fe2)
crossprod(t(X), beta)
Điều này không hoạt động vì betachỉ bao gồm các ước tính cho year1và year0:const, trong khi Xcũng bao gồm một cột cho year1:const. Nói cách khác, Xbao gồm các cột cho cả hai year0:constvà year1:const, và không thể ước tính cả hai hệ số đó.
Cách giải quyết là tạo thuật ngữ tương tác "bằng tay" trước khi nhập nó vào công thức:
tmp$yearXconst <- tmp$year*tmp$const
fe3 <- plm(y ~ year + yearXconst, index=c('ID', 'year'), data=tmp)
summary(fe3) # works fine
Nhưng điều này là cồng kềnh. Nói tóm lại, có điều gì tôi có thể làm để làm summary.plmviệc với những mô hình như vậy không?
===
Allison, Paul D. 2009. Các mô hình hồi quy hiệu ứng cố định. Los Angeles, CA: Hiền nhân. Xem đặc biệt trang 19-21.
plmphiên bản 1.6-4, đây không còn là vấn đề nữa vì các hệ số đã bị loại bỏ đơn giản.