R lmerTest et tests de plusieurs effets aléatoires

8

Je suis curieux de savoir comment le package lmerTest dans R, en particulier la fonction "rand", gère les tests d'effets aléatoires. Prenons l'exemple du pdf lmerTest sur CRAN qui utilise l'ensemble de données "carottes" intégré:

#import lme4 package and lmerTest package
  library(lmerTest)
#lmer model with correlation between intercept and slopes
#in the random part
  m <- lmer(Preference ~ sens2+Homesize+(1+sens2|Consumer), data=carrots)
# table with p-values for the random effects
  rand(m)

Le modèle spécifie deux variances aléatoires (l'interception et "sens2"), toutes deux imbriquées dans "Consommateur", et la covariance entre l'interception et "sens2". La sortie (non fournie dans le pdf) pour les composants aléatoires de l'exécution lmer suit:

Random effects:
Groups   Name        Variance Std.Dev. Corr
Consumer (Intercept) 0.195168 0.44178      
         sens2       0.002779 0.05271  0.18
Residual             1.070441 1.03462      
Number of obs: 1233, groups:  Consumer, 103

Ce qui est attendu compte tenu des spécifications du modèle. La sortie de la fonction rand suit:

Analysis of Random effects Table:
                 Chi.sq Chi.DF p.value  
sens2:Consumer   6.99      2    0.03 *
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Étant donné le tableau des effets aléatoires, je pense que lmerTest évalue la pente aléatoire pour "sens2" mais il pourrait également s'agir de la covariance entre la pente et l'interception. Le test d'interception aléatoire n'est pas inclus. J'ai estimé un autre modèle avec seulement l'ordonnée à l'origine aléatoire (pas de pente aléatoire ni de covariance), et j'ai obtenu ce qui suit à partir de l'instruction "rand":

Analysis of Random effects Table:
           Chi.sq Chi.DF p.value    
Consumer   79.6      1  <2e-16 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Le test de la variance aléatoire associée à l'ordonnée à l'origine est fourni ici. Alors, quelqu'un sait-il ce que le test des composantes de variance aléatoire du premier modèle teste? Existe-t-il un moyen que je ne vois pas dans la documentation pour tester les trois composants aléatoires? Je dois mentionner que la page du test rand sur inside-R.org a la description déroutante suivante (que je ne vois pas dans le pdf sur CRAN):

Values
Produces a data frame with tests for the random terms being non-significant.

Note
If the effect has random slopes, then first the correlations between itercept [sic] and slopes are checked for significance

Est-il possible que la description des "Valeurs" ait le sens inverse et que seuls des effets significatifs soient signalés? J'ai exécuté la procédure «étape» et il n'était pas clair si les trois composantes de la variance aléatoire étaient prises en compte lors de l'analyse.

Tout aperçu sur la question est grandement apprécié.

Joe

EDIT: L'intrigue s'épaissit un peu. Il m'est apparu de vérifier une structure de covariance "diagonale" (pas de covariance entre l'ordonnée à l'origine aléatoire et la pente) en utilisant ce qui suit (basé sur cet excellent article ):

m2 <- lmer(Preference ~ sens2+Homesize+(1|Consumer)+(0+sens2|Consumer), data=carrots)

La sortie lmer pour les variances aléatoires, en utilisant VarCorr, est la suivante:

Groups     Name        Std.Dev.
Consumer   (Intercept) 0.441807
Consumer.1 sens2       0.052719
Residual               1.034618

Ce qui omet correctement la covariance (corrélation) entre la pente aléatoire et l'interception. L'exécution de la fonction "rand" de lmerTest produit la sortie suivante:

Analysis of Random effects Table:
                 Chi.sq Chi.DF p.value    
Consumer         84.4      1  <2e-16 ***
sens2:Consumer    6.3      1    0.01 *  
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Il testera donc les deux composantes de la variance pour ce modèle. Mais la question demeure concernant le premier modèle à covariance aléatoire. Qu'est-ce que le test lmerTest?

BBJonz
la source

Réponses:

2

La documentation sur la lmerTest::rand()fonction est définitivement concise.

D'après ce que j'ai pu recueillir, je pense que cela teste l'hypothèse que la variation de l'effet aléatoire (c'est-à-dire une intersection variable (1 | Consumer) ) est significative par rapport à la valeur nulle qu'il n'y a pas de variation entre les niveaux de groupe,H0:σα2=0, où αj[je]N(μα,σα2) pour j=1,,Jest l'indicateur de groupe. (Je suis la notation de Gelman & Hill (2007), voir ch.12).


Je ne suis pas un expert donc le code m'a un peu dérouté. Plus précisément, je ne sais pas exactement ce que fait la elimRandEffsfonction, mais je suppose qu'elle convertitαj[je] à un terme fixe (qui est mis en commun) αpuis en comparant cela au modèle d'origine. J'espère que quelqu'un avec une meilleure connaissance pourra clarifier cela.

Sur le plan théorique, randil faut effectuer quelque chose comme le test proposé dans Lee et Braun 2012 . Cependant, contrairement à leur extension aux tests0<rqeffets aléatoires à la fois (sec 3.2), la randsortie semble tester un seul effet aléatoire à la fois. Un résumé plus simple de la même idée se trouve dans les diapositives 10-12 qui se trouvent ici .


Ainsi, votre intuition selon laquelle «lmerTest évalue la pente aléatoire pour« sens2 »[et] pourrait également être la covariance entre la pente et l'interception» est correcte dans ces randtests si les variances de l'effet aléatoire sont significativement différentes de zéro.

Mais il est inexact de dire que "le test d'interception aléatoire n'est pas inclus". Le RE dans votre première spécification:

 (1 + sens2 | Consumer) 

suppose une corrélation non nulle entre l'ordonnée à l'origine et la pente, ce qui signifie qu'ils varient ensemble et rand()teste donc cette spécification par rapport à un modèle sans RE (c.-à-d., réduisant à la régression classique).

La deuxième spécification

 (1  | Consumer) + (0 + sens2 | Consumer) 

donne deux lignes de sortie car les effets aléatoires sont séparables par addition. Ici, randteste (dans la 1ère ligne de sortie) un modèle avec une interception groupée / fixe avec une pente aléatoire par rapport à vos spécifications. Dans la 2ème rangée, le test est contre un pooling en pente avec une interception aléatoire. Ainsi, comme la stepfonction, randteste les RE indépendants un par un.

Je suis toujours perplexe à l'intérieur-R.org notez que

  Note
  If the effect has random slopes, then first the correlations between itercept [sic] and slopes are checked for significance

Ce n'est pas dans la documentation du paquet, donc je ne sais pas d'où il vient ni où un tel test serait trouvé dans la sortie.

ÉDITER

Je pense que je me trompe sur le modèle nul dans un modèle de pente / interception corrélé comme dans la première spécification. La stepdocumentation dit:

dans la partie aléatoire s'il existe une corrélation entre la pente et l'ordonnée à l'origine, le modèle simplifié ne contiendra qu'une interception. C'est-à-dire que si la partie aléatoire du modèle initial est (1 + c | f), alors ce modèle est comparé à (1 | f) en utilisant LRT.

J'imagine que le même principe est à l'œuvre rand.

Tony Beans
la source
1

La documentation lmerTest décrit rand()comme cédant

"... un vecteur de statistiques du Chi carré et des valeurs de p correspondantes des tests du rapport de vraisemblance."

Je pense donc qu'il s'agit d'un test de rapport de vraisemblance. C'est, tout simplement, la comparaison d'un modèle avec un effet aléatoire donné à ce même modèle sans l'effet aléatoire.

En ce qui concerne l'exemple, rand()compare le modèle avec une pente aléatoire de sens2 dans Consumer à un modèle avec l'interception aléatoire de Consumer .

Calculez les deux modèles:

m <- lmer(Preference ~ sens2+Homesize+(1+sens2|Consumer), data=carrots, REML = FALSE)
m2 <- lmer(Preference ~ sens2+Homesize+(1|Consumer), data=carrots, REML = FALSE)

Examinez la sortie de rand(m):

rand(m)
Analysis of Random effects Table:
           Chi.sq Chi.DF p.value  
sens2:Consumer   6.99      2    0.03 *

Effectuer un test de rapport de vraisemblance comparant le modèle m au modèle m2 :

anova(m, m2, test = "Chi")
   Df  AIC    BIC    logLik  deviance  Chisq   Chi Df Pr(>Chisq)  
m   5 3751.4 3777.0 -1870.7   3741.4                           
m2  7 3748.7 3784.5 -1867.4   3734.7   6.6989    2     0.0351 *

En effet, le anova() Chisq est légèrement inférieur à celui du rand(m), mais sinon, la sortie est essentiellement identique. Peut-être que mon interprétation est inexacte, mais j'ai toujours supposé que c'était ainsi que la rand()fonction générait sa sortie.

JMB
la source