Usando R e plm para estimar modelos de efeitos fixos que incluem interações com o tempo

16

Estou usando plm()para estimar modelos de efeitos fixos do formulário

y ~ x + time + time:fixed_trait

onde fixed_traité uma variável que varia entre indivíduos, mas é constante dentro dos indivíduos.

O ponto de interagir timecom fixed_traité permitir o efeito defixed_trait variar ao longo do tempo. (Estou trabalhando aqui no livreto recente de Paul Allison sobre efeitos fixos. Citação em anexo.)

plm()não tem problemas para estimar coeficientes e erros padrão para esses modelos. Massummary.plm() não é possível calcular R ^ 2 para esses modelos. Esse é o problema que eu gostaria de corrigir.

Aqui está um exemplo mínimo:

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

Investigar plm:::summary.plmtorna o problema mais claro. Para calcular R ^ 2, plmtente fazer o seguinte:

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

Isso não funciona porque betainclui apenas estimativas para year1e year0:const, enquanto Xtambém inclui uma coluna para year1:const. Em outras palavras, Xinclui colunas para ambosyear0:const e year1:const, e é impossível estimar esses dois coeficientes.

Uma solução alternativa é criar o termo de interação "manualmente" antes de inseri-lo na fórmula:

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

Mas isso é complicado. Além disso, há algo que eu possa fazer para tornarsummary.plm trabalhar com esses modelos?

===

Allison, Paul D. 2009. Modelos de regressão de efeitos fixos. Los Angeles, CA: Sage. Veja especialmente as páginas 19-21.

user697473
fonte
1
A partir da plmversão 1.6-4, isso não é mais um problema, pois os coeficientes especificados são simplesmente eliminados.
precisa saber é o seguinte

Respostas:

9

Tente usar

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

em vez de. Até funciona se você incluir redundantemente efeitos de tempo fixo na *interação (porque o tempo está sendo corrigido com efeito):

fe4 <- plm(y ~ year * const, index = c('ID', 'year'), data = tmp, effect = "twoway")
Charlie
fonte
Dado que isso *deve ser usado em vez de :, existe uma maneira de suprimir a saída de coeficientes de não interação?
187 Arthur Arthur