He estimado algunas medidas repetidas de modelos de efectos fijos, con un componente de error anidado, basado en variables de agrupación, es decir, modelos no anidados, utilizando plm. Ahora estoy interesado en
- pruebe si los modelos completos son significativamente diferentes, es decir, donde es el modelo completo para y es el modelo completo para y
Females
Males
- posteriormente pruebe los coeficientes de regresión seleccionados entre dos grupos, es decir, donde es el coeficiente de regresión para las mujeres at , y es el coeficiente de regresión para hombres en .
year1.5
year1.5
Ilustraré la situación usando el siguiente ejemplo de trabajo,
Primero, se necesitan algunos paquetes,
# install.packages(c("plm","texreg","tidyverse","lmtest"), dependencies = TRUE)
library(plm); library(lmtest); require(tidyverse)
Segundo, algo de preparación de datos,
data(egsingle, package = "mlmRev")
dta <- egsingle %>% mutate(Female = recode(female,.default = 0L,`Female` = 1L))
Tercero, calculo un conjunto de modelos para cada género en los datos
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") )
Adelante, veamos los dos 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 #>
Ahora, quiero probar si estos dos modelos (OLS lineales) son significativamente diferentes, cf. punto 1 arriba. Miré a mi alrededor SO e Internet y algunos sugieren que necesito usar plm::pFtest()
, también sugerí aquí , que he intentado, pero no estoy convencido. Me hubiera imaginado alguna prueba para modelos no anidados, posible prueba de Cox lmtest::coxtest
, pero no estoy seguro en absoluto. Si alguien aquí podría ayudarme.
Lo intenté,
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
y,
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
En segundo lugar, estoy interesado en comparar los coeficientes de regresión entre dos grupos. Digamos, ¿la estimación year1.5
de 3.04 es significativamente diferente de 3.17? Cf. punto 2 arriba.
Pregunte si alguno de los puntos anteriores no está claro y me complacerá explicarlo. ¡Cualquier ayuda será apreciada!
Me doy cuenta de que esta pregunta es un poco de programación, pero inicialmente la publiqué en SO. Sin embargo, DWin tuvo la amabilidad de señalar que la pregunta pertenecía a CrossValidated y la migró aquí.
modelo de efectos fijos r plm datos anidados prueba de hipótesis medidas repetidas panel de datos modelo mixto regresión panel de datos modelos no anidados modelos anidados
fuente
plm
paquete, en stackoverflow.com. En el futuro, tendré más cuidado de publicar mis preguntas en el lugar apropiado. Gracias.plm(math ~ Female * (x1 + x2))
. Para probar la primera hipótesis nula, que acaba de ejecutar la prueba F para todos los coeficientes asociadosFemale:x1
,Female:x2
. Para probar el segundo nulo, solo necesita probar el parámetro asociado conFemale:year1.5
.suest
para ver si dos modelos son significativamente diferentes. Hay unasuest()
función en un paquete para R, pero dudo que sea la misma. En Statasuest
se relaciona con "Estimación aparentemente no relacionada". Tenga en cuenta que esosureg
es algo diferente. También estoy interesado en una solución R. Espero que eso ayude de alguna manera.Respuestas:
El siguiente código implementó la práctica de poner interacción entreβFe m a l e=βMETROa l e . La estadística t de βFe m a l e : ye a r = 1.5=βMETROa l e : ye a r = 1.5 . En particular, para
Female
ficticio y año. La prueba F en la parte inferior prueba tu nuloplm
salida prueba su nuloyear=1.5
, el valor p es 0.32.fuente
-c(1:5)
bloque de alguna manera que haga que el código sea más genérico? Tengo vectores de tamaño cambiante entrando y saliendo y una respuesta más genérica también podría beneficiar a otros.-c(1:5)
con expresión regular. Es más genérico ahora. En general, le gustaría usargrepl
para unir patrones en presencia de muchas variables.