Zamanla etkileşimleri içeren sabit etki modellerini tahmin etmek için R ve plm kullanma


16

plm()Formun sabit efekt modellerini tahmin etmek için kullanıyorum

y ~ x + time + time:fixed_trait

burada fixed_traitbireyler arasında değişen ancak bireyler içinde sabit olan bir değişkendir.

Etkileşim noktası timeile fixed_traitetkisini imkan vermek için fixed_traitzaman içinde değişir. (Burada Paul Allison'ın sabit etkilerle ilgili son kitapçığında çalışıyorum. Alıntı eklenmiştir.)

plm()bu tür modeller için katsayıları ve standart hataları tahmin etmekte sorun yaşamaz. Ancak summary.plm()bu modeller için R ^ 2 hesaplanamıyor. Düzeltmek istediğim sorun bu.

İşte minimal bir örnek:

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

İncelemek plm:::summary.plmsorunu daha net hale getirir. R ^ 2 plmdeğerini hesaplamak için şunu yapmaya çalışır:

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

Bunun nedeni çalışmaz betasadece tahminler içerir year1ve year0:constsüre, Xayrıca için bir sütun içeriyor year1:const. Başka bir deyişle, Xher ikisi için de sütunlar içerir year0:constve year1:constbu katsayıların her ikisini de tahmin etmek imkansızdır.

Çözüm, formüle girmeden önce "el ile" etkileşim terimini oluşturmaktır:

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

Ama bu hantal. Kısacası, bu summary.plmmodellerle çalışmak için yapabileceğim bir şey var mı?

===

Allison, Paul D. 2009. Sabit Etkiler Regresyon Modelleri. Los Angeles, CA: Adaçayı. Bkz. Özellikle sayfa 19-21.


1
Başlayarak plmleştirilmiş katsayıları sadece bırakılan olarak sürümü 1,6-4, bu artık bir sorun değildir.
Helix123

Yanıtlar:


9

Kullanmayı deneyin

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

yerine. *Etkileşime zaman sabit efektleri ekliyorsanız bile çalışır (çünkü zaman etkisi düzeltildi):

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

*Bunun yerine kullanılması gerektiği göz önüne alındığında, :etkileşimsiz katsayıların çıktısını bastırmanın bir yolu var mı?
Arthur
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.