Pourquoi est-ce que j'obtiens une variance nulle d'un effet aléatoire dans mon modèle mixte, malgré certaines variations dans les données?


22

Nous avons exécuté une régression logistique à effets mixtes en utilisant la syntaxe suivante;

# fit model
fm0 <- glmer(GoalEncoding ~ 1 + Group + (1|Subject) + (1|Item), exp0,
             family = binomial(link="logit"))
# model output
summary(fm0)

Le sujet et l'objet sont les effets aléatoires. Nous obtenons un résultat étrange qui est le coefficient et l'écart-type pour le terme sujet sont tous deux nuls;

Generalized linear mixed model fit by maximum likelihood (Laplace
Approximation) [glmerMod]
Family: binomial  ( logit )
Formula: GoalEncoding ~ 1 + Group + (1 | Subject) + (1 | Item)
Data: exp0

AIC      BIC      logLik deviance df.resid 
449.8    465.3   -220.9    441.8      356 

Scaled residuals: 
Min     1Q Median     3Q    Max 
-2.115 -0.785 -0.376  0.805  2.663 

Random effects:
Groups  Name        Variance Std.Dev.
Subject (Intercept) 0.000    0.000   
Item    (Intercept) 0.801    0.895   
Number of obs: 360, groups:  Subject, 30; Item, 12

Fixed effects:
                Estimate Std. Error z value Pr(>|z|)    
 (Intercept)     -0.0275     0.2843    -0.1     0.92    
 GroupGeMo.EnMo   1.2060     0.2411     5.0  5.7e-07 ***
 ---
 Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

 Correlation of Fixed Effects:
             (Intr)
 GroupGM.EnM -0.002

Cela ne devrait pas se produire car il y a évidemment des variations entre les sujets. Lorsque nous exécutons la même analyse en stata

xtmelogit goal group_num || _all:R.subject || _all:R.item

Note: factor variables specified; option laplace assumed

Refining starting values: 

Iteration 0:   log likelihood = -260.60631  
Iteration 1:   log likelihood = -252.13724  
Iteration 2:   log likelihood = -249.87663  

Performing gradient-based optimization: 

Iteration 0:   log likelihood = -249.87663  
Iteration 1:   log likelihood = -246.38421  
Iteration 2:   log likelihood =  -245.2231  
Iteration 3:   log likelihood = -240.28537  
Iteration 4:   log likelihood = -238.67047  
Iteration 5:   log likelihood = -238.65943  
Iteration 6:   log likelihood = -238.65942  

Mixed-effects logistic regression               Number of obs      =       450
Group variable: _all                            Number of groups   =         1

                                                Obs per group: min =       450
                                                               avg =     450.0
                                                               max =       450

Integration points =   1                        Wald chi2(1)       =     22.62
Log likelihood = -238.65942                     Prob > chi2        =    0.0000

------------------------------------------------------------------------------
        goal |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
   group_num |   1.186594    .249484     4.76   0.000     .6976147    1.675574
       _cons |  -3.419815   .8008212    -4.27   0.000    -4.989396   -1.850234
------------------------------------------------------------------------------

------------------------------------------------------------------------------
  Random-effects Parameters  |   Estimate   Std. Err.     [95% Conf. Interval]
-----------------------------+------------------------------------------------
_all: Identity               |
               sd(R.subject) |   7.18e-07   .3783434             0           .
-----------------------------+------------------------------------------------
_all: Identity               |
                 sd(R.trial) |   2.462568   .6226966      1.500201    4.042286
------------------------------------------------------------------------------
LR test vs. logistic regression:     chi2(2) =   126.75   Prob > chi2 = 0.0000

Note: LR test is conservative and provided only for reference.
Note: log-likelihood calculations are based on the Laplacian approximation.

les résultats sont comme prévu avec un coefficient / zéro non nul pour le terme sujet.

À l'origine, nous pensions que cela pouvait être lié au codage du terme sujet, mais le changer d'une chaîne en un entier ne faisait aucune différence.

De toute évidence, l'analyse ne fonctionne pas correctement, mais nous ne sommes pas en mesure d'identifier la source des difficultés. (NB quelqu'un d'autre sur ce forum a rencontré un problème similaire, mais ce fil reste un lien sans réponse vers la question )


2
Vous dites que cela ne devrait pas se produire parce que "évidemment il y a des variations entre les sujets" mais comme nous ne savons pas ce qui subjectest ou quoi que ce soit d'autre au sujet de ces variables, ce n'est pas si "évident" pour nous "! Aussi le" coefficient non nul " pour le terme sujet "de votre analyse Stata est 7.18e-07! Je suppose que techniquement, c'est" non nul ", mais ce n'est pas trop loin de 0 non plus!!
smillig

Merci beaucoup pour vos observations. Les sujets participent à une étude et il y a forcément des variations de performances. Les scores moyens étaient corrects à 39%, avec un écart-type de 11%. Je m'attendrais à ce que cela apparaisse comme supérieur à 0,000 dans les statistiques rapportées, mais cela peut être faux. Oui, bien sûr, 7.18e-07 équivaut à 0,000 et 0,000 n'est pas nécessairement nul.
Nick Riches

1
Combien de fois chaque sujet a-t-il été testé / échantillonné? Sans connaître les aspects substantiels de votre recherche, si Stata vous dit que la variation à l'intérieur des sujets est de 0,00000000718 (avec une erreur standard de 0,378) et R vous dit que c'est 0,000, n'est-ce pas l'histoire ici qu'il n'y a vraiment pas de variation au niveau du sujet? Notez également que Stata ne vous donne pas d'intervalle de confiance pour la variation du sujet.
smillig

Merci encore pour vos commentaires. Les sujets ont été testés à 11 reprises. Je suppose que cela signifie qu'une fois les effets de groupe et d'item pris en compte, il y a très peu de variation entre les participants. Cela semble un peu "suspect", mais je suppose qu'il y a une cohérence entre les deux analyses différentes?
Nick Riches

Réponses:


28

Ceci est discuté assez longuement sur https://bbolker.github.io/mixedmodels-misc/glmmFAQ.html (recherche de "modèles singuliers"); c'est courant, surtout quand il y a un petit nombre de groupes (bien que 30 n'est pas particulièrement petit dans ce contexte).

Une différence entre lme4et de nombreux autres packages est que de nombreux packages, y compris lme4le prédécesseur de nlme, gèrent le fait que les estimations de variance doivent être non négatives en ajustant la variance sur l'échelle logarithmique: cela signifie que les estimations de variance ne peuvent pas être exactement nulles, juste très très petit. lme4, en revanche, utilise une optimisation contrainte, de sorte qu'il peut retourner des valeurs qui sont exactement nulles (voir http://arxiv.org/abs/1406.5823 p. 24 pour plus de discussion). http://rpubs.com/bbolker/6226 en donne un exemple.

En particulier, en examinant de près vos résultats de variance entre sujets de Stata, vous avez une estimation de 7,18e-07 (par rapport à une intersection de -3,4) avec un écart-type Wald de 0,3783434 (essentiellement inutile dans ce cas!) Et un IC à 95% répertorié comme "0"; c'est techniquement "non nul", mais c'est aussi proche de zéro que le programme le rapportera ...

Il est bien connu et théoriquement prouvable (par exemple Stram et Lee Biometrics 1994) que la distribution nulle pour les composantes de la variance est un mélange d'une masse ponctuelle (`` pic '') à zéro et d'une distribution chi carré à partir de zéro. Sans surprise (mais je ne sais pas si c'est prouvé / bien connu), la distribution d'échantillonnage des estimations de la composante de la variance a souvent un pic à zéro même lorsque la vraie valeur n'est pas nulle - voir par exemple http://rpubs.com/ bbolker / 4187 pour un exemple, ou le dernier exemple de la ?bootMerpage:

library(lme4)
library(boot)
## Check stored values from a longer (1000-replicate) run:
load(system.file("testdata","boo01L.RData",package="lme4"))
plot(boo01L,index=3) 

entrez la description de l'image ici


2
+1. Une autre bonne réponse se trouve dans le fil frère: stats.stackexchange.com/a/34979 (je laisse ce lien aux futurs lecteurs).
amoeba dit Reinstate Monica

14

Je ne pense pas qu'il y ait de problème. La leçon tirée de la sortie du modèle est que, bien qu'il y ait une variation «évidente» des performances du sujet, l'ampleur de cette variation du sujet peut être entièrement ou virtuellement entièrement expliquée par le seul terme de variance résiduelle seul. Il n'y a pas suffisamment de variation supplémentaire au niveau du sujet pour justifier l'ajout d'un effet aléatoire supplémentaire au niveau du sujet pour expliquer toute la variation observée.

Pense-y de cette façon. Imaginez que nous simulons des données expérimentales sous ce même paradigme. Nous avons configuré les paramètres de sorte qu'il y ait une variation résiduelle sur une base d'essai par essai, mais aucune variation au niveau du sujet (c.-à-d., Tous les sujets ont la même «vraie moyenne», plus l'erreur). Maintenant, chaque fois que nous simulons des données à partir de cet ensemble de paramètres, nous constaterons bien sûr que les sujets n'ont pas des performances exactement égales. Certains se retrouvent avec des scores bas, certains avec des scores élevés. Mais tout cela n'est dû qu'à la variation résiduelle au niveau de l'essai. Nous «savons» (du fait d'avoir déterminé les paramètres de simulation) qu'il n'y a pas vraiment de variation au niveau du sujet.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.