Estimei algumas medidas repetidas modelos de efeitos fixos, com um componente de erro aninhado, com base em variáveis de agrupamento, ou seja, modelos não aninhados, usando plm . Agora estou interessado em
- teste se os modelos completos são significativamente diferentes, ou seja, onde é o modelo completo para e é o modelo completo para e β F e m a l e β M a l e
Females
Males
- posteriormente teste os coeficientes de regressão selecionados entre dois grupos, ou seja, que é o coeficiente de regressão para mulheres at , e é o coeficiente de regressão para homens em . β F e m um l e = = Y e um r 1,5 β M um l e = = y e a r 1,5
year1.5
year1.5
Ilustrarei a situação usando o exemplo de trabalho abaixo,
Primeiro, alguns pacotes necessários,
# install.packages(c("plm","texreg","tidyverse","lmtest"), dependencies = TRUE)
library(plm); library(lmtest); require(tidyverse)
Segundo, alguma preparação de dados,
data(egsingle, package = "mlmRev")
dta <- egsingle %>% mutate(Female = recode(female,.default = 0L,`Female` = 1L))
Terceiro, eu estimo um conjunto de modelos para cada gênero nos dados
MoSpc <- as.formula(math ~ Female + size + year)
dfMo = dta %>% group_by(female) %>%
do(fitMo = plm(update(MoSpc, . ~ . -Female),
data = ., index = c("childid", "year", "schoolid"), model="within") )
Quarto, vamos olhar para os dois modelos estimados,
texreg::screenreg(dfMo[[2]], custom.model.names = paste0('FE: ', dfMo[[1]]))
#> ===================================
#> FE: Female FE: Male
#> -----------------------------------
#> year-1.5 0.79 *** 0.88 ***
#> (0.07) (0.10)
#> year-0.5 1.80 *** 1.88 ***
#> (0.07) (0.10)
#> year0.5 2.51 *** 2.56 ***
#> (0.08) (0.10)
#> year1.5 3.04 *** 3.17 ***
#> (0.08) (0.10)
#> year2.5 3.84 *** 3.98 ***
#> (0.08) (0.10)
#> -----------------------------------
#> R^2 0.77 0.79
#> Adj. R^2 0.70 0.72
#> Num. obs. 3545 3685
#> ===================================
#> *** p < 0.001, ** p < 0.01, * p < 0.05 #>
Agora, quero testar se esses dois modelos (OLS lineares) são significativamente diferentes, cf. ponto 1 acima. Eu olhei em volta da SO e da Internet e alguns sugerem que eu preciso usar plm::pFtest()
, também sugerido aqui , o que eu tentei, mas não estou convencido. Eu teria imaginado algum teste para modelos não aninhados, possível teste de Cox lmtest::coxtest
, mas não tenho certeza. Se alguém aqui pudesse me ajudar.
Eu tentei,
plm::pFtest(dfMo[[1,2]], dfMo[[2,2]])
# >
# > F test for individual effects
# >
# >data: update(MoSpc, . ~ . - Female)
# >F = -0.30494, df1 = 113, df2 = 2693, p-value = 1
# >alternative hypothesis: significant effects
e,
lmtest::coxtest(dfMo[[1,2]], dfMo[[2,2]])
# > Cox test
# >
# > Model 1: math ~ size + year
# > Model 2: math ~ size + year
# > Estimate Std. Error z value Pr(>|z|)
# > fitted(M1) ~ M2 0.32 1.66695 0.1898 0.8494
# > fitted(M2) ~ M1 -1222.87 0.13616 -8981.1963 <2e-16 ***
# > ---
# > Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# > Warning messages:
# > 1: In lmtest::coxtest(dfMo[[1, 2]], dfMo[[2, 2]]) :
# > models fitted on different subsets
# > 2: In lmtest::coxtest(dfMo[[1, 2]], dfMo[[2, 2]]) :
# > different dependent variables specified
Segundo, estou interessado em comparar coeficientes de regressão entre dois grupos. Digamos, a estimativa year1.5
de 3,04 é significativamente diferente de 3,17? Cf. ponto 2 acima.
Por favor, pergunte se alguma das opções acima não está clara e terei prazer em elaborar. Qualquer ajuda será muito apreciada!
Sei que essa pergunta é um pouco de programação, mas inicialmente a publiquei no SO. No entanto, o DWin teve a gentileza de apontar que a pergunta pertencia ao CrossValidated e a migrou para aqui.
modelo de efeitos fixos r plm dados aninhados teste de hipóteses medidas repetidas dados em painel regressão de modelo misto regressão em painel dados não aninhados modelos aninhados
fonte
plm
pacote no stackoverflow.com. Terei mais cuidado no futuro para postar minhas perguntas no local apropriado. Obrigado.plm(math ~ Female * (x1 + x2))
. Para testar a primeira hipótese nula, basta executar o teste F para todos os coeficientes associadosFemale:x1
,Female:x2
. Para testar o segundo nulo, você só precisa testar o parâmetro associadoFemale:year1.5
.suest
para ver se dois modelos são significativamente diferentes. Existe umasuest()
função em um pacote para R, mas duvido que seja o mesmo. Em Stata,suest
está relacionado à "estimativa aparentemente não relacionada". Note que issosureg
é um pouco diferente. Também estou interessado em uma solução R. Espero que ajude de alguma forma.Respostas:
Female
plm
year=1.5
, o valor p é 0,32.fonte
-c(1:5)
bloco de alguma maneira que torne o código mais genérico? Eu tenho vetores de mudança de tamanho entrando e saindo e uma resposta mais genérica possível também beneficiaria outros.-c(1:5)
pela expressão regular. Agora é mais genérico. Em geral, você gostaria de usargrepl
para corresponder padrões na presença de muitas variáveis.