Comment choisir une structure à effets aléatoires et fixes dans des modèles mixtes linéaires?

19

Considérez les données suivantes à partir d'une conception bidirectionnelle des sujets:

df <- "http://personality-project.org/r/datasets/R.appendix4.data"
df <- read.table(df,header=T)
head(df)

Observation Subject Task Valence Recall
1           1     Jim Free     Neg      8
2           2     Jim Free     Neu      9
3           3     Jim Free     Pos      5
4           4     Jim Cued     Neg      7
5           5     Jim Cued     Neu      9
6           6     Jim Cued     Pos     10

Je voudrais analyser cela en utilisant des modèles mixtes linéaires. Compte tenu de tous les effets fixes et aléatoires possibles, il existe plusieurs modèles possibles:

# different fixed effects with random-intercept
a0 <- lmer(Recall~1 + (1|Subject), REML=F,df)
a1 <- lmer(Recall~Task + (1|Subject), REML=F,df)
a2 <- lmer(Recall~Valence + (1|Subject), REML=F,df)
a3 <- lmer(Recall~Task+Valence + (1|Subject), REML=F,df)
a4 <- lmer(Recall~Task*Valence + (1|Subject), REML=F,df)

# different fixed effects with random-intercept-random-slope
b0 <- lmer(Recall~1 + (1|Subject) + (0+Task|Subject) + (0+Valence|Subject), REML=F,df)
b1 <- lmer(Recall~Task + (1|Subject) + (0+Task|Subject) + (0+Valence|Subject), REML=F,df)
b2 <- lmer(Recall~Valence + (1|Subject) + (0+Task|Subject) + (0+Valence|Subject), REML=F,df)
b3 <- lmer(Recall~Task+Valence + (1|Subject) + (0+Task|Subject) + (0+Valence|Subject), REML=F,df)
b4 <- lmer(Recall~Task*Valence + (1|Subject) + (0+Task|Subject) + (0+Valence|Subject), REML=F,df)

# different fixed effects with random-intercept-random-slope including variance-covariance matrix
c0 <- lmer(Recall~1 + (1 + Valence + Task|Subject), REML=F,df)
c1 <- lmer(Recall~Task + (1 + Valence + Task|Subject), REML=F,df)
c2 <- lmer(Recall~Valence + (1 + Valence + Task|Subject), REML=F,df)
c3 <- lmer(Recall~Task+Valence + (1 + Valence + Task|Subject), REML=F,df)
c4 <- lmer(Recall~Task*Valence + (1 + Valence + Task|Subject), REML=F,df)
  1. Quelle est la méthode recommandée pour sélectionner le modèle le mieux adapté dans ce contexte? Lors de l'utilisation de tests de rapport log-vraisemblance, quelle est la procédure recommandée? Générer des modèles vers le haut (du modèle nul au modèle le plus complexe) ou vers le bas (du modèle le plus complexe au modèle nul)? Inclusion ou exclusion par étapes? Ou est-il recommandé de mettre tous les modèles dans un test de rapport log-vraisemblance et de sélectionner le modèle avec la valeur p la plus faible? Comment comparer des modèles non imbriqués?

  2. Est-il recommandé de trouver d'abord la structure d'effets fixes appropriée puis la structure d'effets aléatoires appropriée ou l'inverse (j'ai trouvé des références pour les deux options ...)?

  3. Quelle est la méthode recommandée pour communiquer les résultats? Rapport de la valeur de p du test du rapport log-vraisemblance comparant le modèle mixte complet (avec l'effet en question) au modèle réduit (sans l'effet en question). Ou est-il préférable d'utiliser le test du rapport de vraisemblance pour trouver le meilleur modèle d'ajustement, puis d'utiliser lmerTest pour rapporter les valeurs de p à partir des effets dans le modèle d'ajustement le plus approprié?

jokel
la source

Réponses:

18

Je ne suis pas sûr qu'il y ait vraiment une réponse canonique à cela, mais je vais essayer.

Quelle est la méthode recommandée pour sélectionner le modèle le mieux adapté dans ce contexte? Lors de l'utilisation de tests de rapport log-vraisemblance, quelle est la procédure recommandée? Générer des modèles vers le haut (du modèle nul au modèle le plus complexe) ou vers le bas (du modèle le plus complexe au modèle nul)? Inclusion ou exclusion par étapes? Ou est-il recommandé de mettre tous les modèles dans un test de rapport log-vraisemblance et de sélectionner le modèle avec la valeur p la plus faible? Comment comparer des modèles non imbriqués?

Cela dépend de vos objectifs.

  • En général, vous devez être très , très prudent sur la sélection des modèles (voir par exemple cette réponse , ou ce post , ou simplement Google "Harrell pas à pas" ...).
  • Si vous souhaitez que vos valeurs p soient significatives (c'est-à-dire que vous effectuez des tests d'hypothèse de confirmation), vous ne devriez pas faire de sélection de modèle. Cependant : il n'est pas si clair pour moi si les procédures de sélection de modèle sont tout aussi mauvaises si vous effectuez une sélection de modèle sur des parties non focales du modèle , par exemple en faisant une sélection de modèle sur les effets aléatoires si votre intérêt principal est l'inférence sur les effets fixes.
  • Il n'y a rien de tel que «mettre tous les modèles dans un test de rapport de vraisemblance» - le test de rapport de vraisemblance est une procédure par paire. Si vous vouliez faire une sélection de modèle (par exemple) sur les effets aléatoires, je recommanderais probablement une approche "tout à la fois" utilisant des critères d'information comme dans cet exemple - qui évite au moins certains des problèmes des approches pas à pas (mais pas de sélection de modèles plus généralement).
  • Barr et al. 2013 "Keep it maximal" Journal of Memory and Language (doi: 10.1016 / j.jml.2012.11.001) recommanderait d'utiliser le modèle maximal (uniquement).
  • Shravan Vasishth n'est pas d'accord , arguant que ces modèles vont être sous-alimentés et donc problématiques à moins que l'ensemble de données soit très grand (et que le rapport signal / bruit soit élevé)
  • Une autre approche raisonnablement défendable consiste à ajuster un modèle large mais raisonnable , puis, si l'ajustement est singulier, supprimer les termes jusqu'à ce qu'il ne soit plus
  • Avec certaines mises en garde (énumérées dans la FAQ GLMM ), vous pouvez utiliser des critères d'information pour comparer des modèles non imbriqués avec des effets aléatoires différents (bien que Brian Ripley ne soit pas d'accord: voir le bas de la page 6 ici )

Est-il recommandé de trouver d'abord la structure d'effets fixes appropriée puis la structure d'effets aléatoires appropriée ou l'inverse (j'ai trouvé des références pour les deux options ...)?

Je pense que personne ne le sait. Voir la réponse précédente sur la sélection de modèles plus généralement. Si vous pouviez définir vos objectifs suffisamment clairement (ce que peu de gens font), la question pourrait être répondue. Si vous avez des références pour les deux options, il serait utile de modifier votre question pour les inclure ... (Pour ce que ça vaut, cet exemple (déjà cité ci-dessus) utilise des critères d'information pour sélectionner la partie des effets aléatoires, puis évite la sélection sur le partie à effet fixe du modèle.

Quelle est la méthode recommandée pour communiquer les résultats? Rapport de la valeur de p du test du rapport log-vraisemblance comparant le modèle mixte complet (avec l'effet en question) au modèle réduit (sans l'effet en question). Ou est-il préférable d'utiliser le test du rapport de vraisemblance pour trouver le meilleur modèle d'ajustement, puis d'utiliser lmerTest pour rapporter les valeurs de p à partir des effets dans le modèle d'ajustement le plus approprié?

C'est (hélas) une autre question difficile. Si vous signalez les effets marginaux tel que rapporté par lmerTest, vous avez à vous soucier de la marginalité (par exemple, si les estimations des principaux effets Aet Bsont significatifs quand il y a une A-by- Binteraction dans le modèle); c'est une énorme boîte de vers, mais elle est quelque peu atténuée si vous l'utilisez contrasts="sum"comme recommandé par afex::mixed(). Les conceptions équilibrées aident également un peu. Si vous voulez vraiment écraser toutes ces fissures, je pense que je recommanderais afex::mixed, ce qui vous donne une sortie similaire à lmerTest, mais essaie de résoudre ces problèmes.

Ben Bolker
la source
12

Mise à jour de mai 2017 : En fin de compte, un lof de ce que j'ai écrit ici est un peu malicieux . Certaines mises à jour sont effectuées tout au long de la publication.


Je suis d'accord avec ce qui a déjà été dit par Ben Bolker (merci pour les remerciements à afex::mixed()) mais permettez-moi d'ajouter quelques réflexions plus générales et spécifiques sur cette question.

Concentrez-vous sur les effets fixes par rapport aux effets aléatoires et sur la façon de communiquer les résultats

Pour le type de recherche expérimentale représenté dans l'exemple de jeu de données de Jonathan Baron, la question importante est généralement de savoir si un facteur manipulé a ou non un effet global. Par exemple, trouvons-nous un effet principal global ou une interaction de Task? Un point important est que dans ces ensembles de données, tous les facteurs sont généralement sous contrôle expérimental complet et assignés au hasard. Par conséquent, l'intérêt se porte généralement sur les effets fixes.
En revanche, les composantes des effets aléatoires peuvent être considérées comme des paramètres de «nuisance» qui capturent la variance systématique (c.-à-d. Les différences interindividuelles dans la taille de l'effet) qui ne sont pas nécessairement importantes pour la question principale. De ce point de vue, la suggestion d'utiliser la structure à effets aléatoires maximales préconisée par Barr et al. suit un peu naturellement. Il est facile d'imaginer qu'une manipulation expérimentale n'affecte pas tous les individus de la même manière et nous voulons contrôler cela. D'un autre côté, le nombre de facteurs ou de niveaux n'est généralement pas trop important, de sorte que le risque de surapprentissage semble relativement faible.

Par conséquent, je suivrais la suggestion de Barr et al. et spécifier une structure d'effets aléatoires maximale et rapporter les tests des effets fixes comme mes principaux résultats. Pour tester les effets fixes, je suggérerais également d'utiliser afex::mixed()car il rapporte des tests d'effets ou de facteurs (au lieu de tester des paramètres) et calcule ces tests d'une manière quelque peu raisonnable (par exemple, utilise la même structure d'effets aléatoires pour tous les modèles dans lesquels un l'effet unique est supprimé, utilise des contrastes de somme à zéro, propose différentes méthodes pour calculer les valeurs de p , ...).

Qu'en est-il des données d'exemple

Le problème avec les données d'exemple que vous avez fournies est que pour cet ensemble de données, la structure d'effets aléatoires maximale conduit à un modèle sursaturé car il n'y a qu'un seul point de données par cellule du plan:

> with(df, table(Valence, Subject, Task))
, , Task = Cued

       Subject
Valence Faye Jason Jim Ron Victor
    Neg    1     1   1   1      1
    Neu    1     1   1   1      1
    Pos    1     1   1   1      1

, , Task = Free

       Subject
Valence Faye Jason Jim Ron Victor
    Neg    1     1   1   1      1
    Neu    1     1   1   1      1
    Pos    1     1   1   1      1

Par conséquent, lmers'étouffe sur la structure maximale des effets aléatoires:

> lmer(Recall~Task*Valence + (Valence*Task|Subject), df)
Error: number of observations (=30) <= number of random effects (=30) for term
(Valence * Task | Subject); the random-effects parameters and the residual variance
(or scale parameter) are probably unidentifiable

Malheureusement, il n'y a à ma connaissance aucun moyen convenu de résoudre ce problème. Mais laissez-moi en esquisser et en discuter:

  1. Une première solution pourrait être de supprimer la pente aléatoire la plus élevée et de tester les effets de ce modèle:

    require(afex)
    mixed(Recall~Task*Valence + (Valence+Task|Subject), df)
            Effect    F ndf  ddf F.scaling p.value
    1         Task 6.56   1 4.00      1.00     .06
    2      Valence 0.80   2 3.00      0.75     .53
    3 Task:Valence 0.42   2 8.00      1.00     .67

    Cependant, cette solution est un peu ad-hoc et pas trop motivée.

    Mise à jour de mai 2017: c'est l'approche que j'approuve actuellement. Voir cet article de blog et le brouillon du chapitre dont je suis co-auteur , section "Structures d'effets aléatoires pour les conceptions ANOVA traditionnelles".

  2. Une solution alternative (et qui pourrait être considérée comme préconisée par la discussion de Barr et al.) Pourrait être de toujours supprimer les pentes aléatoires pour le plus petit effet. Cela pose cependant deux problèmes: (1) Quelle structure d'effets aléatoires utilisons-nous pour déterminer quel est le plus petit effet et (2) R hésite à supprimer un effet d'ordre inférieur tel qu'un effet principal si des effets d'ordre supérieur tels qu'un l'interaction de cet effet est présente (voir ici ). En conséquence, il faudrait configurer cette structure d'effets aléatoires à la main et passer la matrice de modèle ainsi construite à l'appel lmer.

  3. Une troisième solution pourrait être d'utiliser une paramétrisation alternative de la partie effets aléatoires, à savoir celle qui correspond au modèle RM-ANOVA pour ces données. Malheureusement (?), lmerNe permet pas les "variances négatives", donc ce paramétrage ne correspond pas exactement au RM-ANOVA pour tous les ensembles de données , voir la discussion ici et ailleurs (par exemple ici et ici ). Le "lmer-ANOVA" pour ces données serait:

    > mixed(Recall~Task*Valence + (1|Subject) + (1|Task:Subject) + (1|Valence:Subject), df)
            Effect    F ndf  ddf F.scaling p.value
    1         Task 7.35   1 4.00      1.00     .05
    2      Valence 1.46   2 8.00      1.00     .29
    3 Task:Valence 0.29   2 8.00      1.00     .76

Compte tenu de tous ces problèmes, je n'utiliserais tout simplement pas lmerpour ajuster des ensembles de données pour lesquels il n'y a qu'un seul point de données par cellule de la conception, à moins qu'une solution plus convenue pour le problème de la structure d'effets aléatoires maximale ne soit disponible.

  1. Au lieu de cela, je voudrais que l' on puisse également utiliser l'ANOVA classique. Utiliser l'un des wrappers car::Anova()dans afexles résultats serait:

    > aov4(Recall~Task*Valence + (Valence*Task|Subject), df)
            Effect         df  MSE      F  ges   p
    1      Valence 1.44, 5.75 4.67   1.46  .02 .29
    2         Task       1, 4 4.08 7.35 +  .07 .05
    3 Valence:Task 1.63, 6.52 2.96   0.29 .003 .71

    A noter que afexpermet désormais aussi de renvoyer le modèle équipé avec aovlequel on peut passer pour lsmeansdes tests post-hoc (mais pour le test des effets ceux rapportés par car::Anovasont encore plus raisonnables):

    > require(lsmeans)
    > m <- aov4(Recall~Task*Valence + (Valence*Task|Subject), df, return = "aov")
    > lsmeans(m, ~Task+Valence)
     Task Valence lsmean       SE   df lower.CL upper.CL
     Cued Neg       11.8 1.852026 5.52  7.17157 16.42843
     Free Neg       10.2 1.852026 5.52  5.57157 14.82843
     Cued Neu       13.0 1.852026 5.52  8.37157 17.62843
     Free Neu       11.2 1.852026 5.52  6.57157 15.82843
     Cued Pos       13.6 1.852026 5.52  8.97157 18.22843
     Free Pos       11.0 1.852026 5.52  6.37157 15.62843
    
    Confidence level used: 0.95 
Henrik
la source
(+1) "Malheureusement, lmer n'autorise pas les corrélations négatives" - cela ne devrait-il pas être "n'autorise pas les variances négatives"? En outre, concernant la mise à jour: pourriez-vous être plus explicite sur ce qu'est exactement le "faux-sens" dans cette réponse?
amibe dit Réintégrer Monica
(J'ai lu le message lié et il semble que le message principal est que l'approche répertoriée ici comme # 1 est plus casher que vous ne le pensiez. Correct? Il n'est toujours pas clair si vous pensez maintenant que c'est préférable à # 3 ou # 4 ).
amibe dit Réintégrer Monica
@amoeba Oui, vous avez raison. J'étais juste trop paresseux pour mettre à jour ma réponse ici en conséquence.
Henrik
@amoeba Et vous avez également raison concernant les corrélations. lmerne permet pas des variances négatives mais bien évidemment des corrélations négatives entre les composantes de variance.
Henrik
1
J'ai fait quelques modifications, vous voudrez peut-être vous assurer que je ne vous ai pas mal représenté.
amibe dit Réintégrer Monica