J'ai estimé des modèles à effets fixes de mesures répétées, avec une composante d'erreur imbriquée, en me basant sur des variables de regroupement, c'est-à-dire des modèles non imbriqués, en utilisant plm. Je suis maintenant intéressé à
- tester si les modèles complets sont significativement différents, c'est-à-dire où est le modèle complet pour et est le modèle complet pour et
Females
Males
- tester ensuite les coefficients de régression sélectionnés entre deux groupes, c'est-à-dire où est le coefficient de régression pour les femmes at , et est le coefficient de régression pour les hommes à .
year1.5
year1.5
Je vais illustrer la situation en utilisant l'exemple de travail ci-dessous,
Tout d'abord, certains packages nécessaires,
# install.packages(c("plm","texreg","tidyverse","lmtest"), dependencies = TRUE)
library(plm); library(lmtest); require(tidyverse)
Deuxièmement, une certaine préparation des données,
data(egsingle, package = "mlmRev")
dta <- egsingle %>% mutate(Female = recode(female,.default = 0L,`Female` = 1L))
Troisièmement, j'estime un ensemble de modèles pour chaque sexe dans les données
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") )
Quatrièmement, regardons les deux modèles estimés,
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 #>
Maintenant, je veux tester si ces deux modèles (OLS linéaire) sont significativement différents, cf. point1 ci-dessus. J'ai regardé SO et Internet et certains suggèrent que je dois utiliser plm::pFtest()
, également suggéré ici , que j'ai essayé, mais je ne suis pas convaincu. J'aurais imaginé un test pour des modèles non imbriqués, un test de Cox possible lmtest::coxtest
, mais je ne suis pas sûr du tout. Si quelqu'un ici pouvait peut-être m'aider.
J'ai essayé,
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
et,
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
Deuxièmement, je suis intéressé à comparer les coefficients de régression entre deux groupes. Dites, est-ce que l'estimation year1.5
de 3,04 est significativement différente de 3,17? Cf. point 2 ci-dessus.
Veuillez demander si l'un des éléments ci-dessus n'est pas clair et je me ferai un plaisir de vous en dire plus. Toute aide sera fortement appréciée!
Je me rends compte que cette question ressemble un peu à la programmation, mais je l'ai d'abord publiée dans SO. Cependant, DWin a eu la gentillesse de souligner que la question appartenait à CrossValidated et l'a migrée ici.
modèle à effets fixes r plm imbriqué-données tests d'hypothèses mesures répétées panel-data modèle mixte régression panel-data modèles non imbriqués modèles imbriqués
la source
plm
package sur stackoverflow.com. Je prendrai plus de soin à l'avenir pour poster mes questions à l'endroit approprié. Merci.plm(math ~ Female * (x1 + x2))
. Pour tester la première hypothèse nulle, vous exécutez simplement test F pour tous les coefficients associés àFemale:x1
,Female:x2
. Pour tester le second null, il vous suffit de tester le paramètre associé àFemale:year1.5
.suest
pour voir si deux modèles sont significativement différents. Il y a unesuest()
fonction dans un package pour R mais je doute que ce soit la même chose. Dans Stata, ilsuest
s'agit d'une "estimation apparemment sans rapport". Notez quesureg
c'est quelque peu différent. Je suis également intéressé par une solution R. J'espère que cela aiderait en quelque sorte.Réponses:
Le code suivant implémente la pratique de l'interaction entre leβFemale=βMale . La statistique t de la βFemale:year=1.5=βMale:year=1.5 . En particulier, pour
Female
mannequin et l'année. Le test F en bas teste votre nullplm
sortie teste votre valeur nulleyear=1.5
, la valeur de p est de 0,32.la source
-c(1:5)
bloc d'une manière qui rendrait le code plus générique? J'ai des vecteurs de taille changeantes qui entrent et sortent et une réponse plus générique serait également bénéfique pour les autres.-c(1:5)
par l'expression régulière. C'est plus générique maintenant. En général, vous souhaitez utilisergrepl
pour faire correspondre les modèles en présence d'un grand nombre de variables.