Menggunakan R dan plm untuk memperkirakan model efek tetap yang mencakup interaksi dengan waktu


16

Saya menggunakan plm()untuk memperkirakan model efek tetap dari formulir

y ~ x + time + time:fixed_trait

di mana fixed_traitvariabel yang bervariasi antar individu tetapi konstan dalam individu.

Inti dari berinteraksi timedengan fixed_traitadalah untuk memungkinkan efek fixed_traitbervariasi sepanjang waktu. (Saya bekerja di sini dari buklet terbaru Paul Allison tentang efek tetap. Kutipan ditambahkan.)

plm()tidak memiliki masalah dalam memperkirakan koefisien dan kesalahan standar untuk model seperti itu. Tetapi summary.plm()tidak dapat menghitung R ^ 2 untuk model-model ini. Ini adalah masalah yang ingin saya perbaiki.

Ini adalah contoh minimal:

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

Menggali plm:::summary.plmmasalah membuat masalah menjadi lebih jelas. Untuk menghitung R ^ 2, plmcobalah untuk melakukan ini:

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

Ini tidak berfungsi karena betahanya menyertakan perkiraan untuk year1dan year0:const, sementara Xjuga menyertakan kolom untuk year1:const. Dengan kata lain, Xsertakan kolom untuk keduanya year0:constdan year1:const, dan tidak mungkin untuk memperkirakan kedua koefisien tersebut.

Solusinya adalah membuat istilah interaksi "dengan tangan" sebelum memasukkannya ke dalam rumus:

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

Tapi ini rumit. Singkatnya, apakah ada yang bisa saya lakukan untuk summary.plmbekerja dengan model seperti itu?

===

Allison, Paul D. 2009. Model Regresi Efek Tetap. Los Angeles, CA: Sage. Lihat khususnya halaman 19-21.


1
Dimulai dengan plmversi 1.6-4, ini bukan masalah lagi karena koefisien-koefisien yang telah terukur dibuang begitu saja.
Helix123

Jawaban:


9

Coba gunakan

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

sebagai gantinya. Ini bahkan berfungsi jika Anda secara berlebihan memasukkan waktu yang tetap efek dalam *interaksi (karena waktu sedang diperbaiki efek-ed out):

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

Mengingat yang *harus digunakan sebagai ganti :, apakah ada cara untuk menekan output dari koefisien non-interaksi?
Arthur
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.