Comment faire un test d'hypothèse MCMC sur un modèle de régression à effets mixtes à pentes aléatoires?

12

La bibliothèque languageR fournit une méthode (pvals.fnc) pour effectuer des tests de signification MCMC des effets fixes dans un modèle de régression à effets mixtes à l'aide de lmer. Cependant, pvals.fnc donne une erreur lorsque le modèle lmer inclut des pentes aléatoires.

Existe-t-il un moyen de faire un test d'hypothèse MCMC de tels modèles?
Si c'est le cas, comment? (Pour être acceptée, une réponse doit avoir un exemple concret en R) Sinon, y a-t-il une raison conceptuelle / de calcul pour laquelle il n'y a aucun moyen?

Cette question est peut-être liée à celle-ci, mais je n'y ai pas compris le contenu suffisamment bien pour en être certain.

Edit 1 : Une preuve de concept montrant que pvals.fnc () fait toujours «quelque chose» avec les modèles lme4, mais qu'il ne fait rien avec les modèles de pente aléatoires.

library(lme4)
library(languageR)
#the example from pvals.fnc
data(primingHeid) 
# remove extreme outliers
primingHeid = primingHeid[primingHeid$RT < 7.1,]
# fit mixed-effects model
primingHeid.lmer = lmer(RT ~ RTtoPrime * ResponseToPrime + Condition + (1|Subject) + (1|Word), data = primingHeid)
mcmc = pvals.fnc(primingHeid.lmer, nsim=10000, withMCMC=TRUE)
#Subjects are in both conditions...
table(primingHeid$Subject,primingHeid$Condition)
#So I can fit a model that has a random slope of condition by participant
primingHeid.lmer.rs = lmer(RT ~ RTtoPrime * ResponseToPrime + Condition + (1+Condition|Subject) + (1|Word), data = primingHeid)
#However pvals.fnc fails here...
mcmc.rs = pvals.fnc(primingHeid.lmer.rs)

Il dit: Erreur dans pvals.fnc (primingHeid.lmer.rs): L'échantillonnage MCMC n'est pas encore implémenté dans lme4_0.999375 pour les modèles avec des paramètres de corrélation aléatoire

Question supplémentaire: pvals.fnc fonctionne-t-il comme prévu pour le modèle d'interception aléatoire? Faut-il faire confiance aux résultats?

russellpierce
la source
3
(1) Je suis surpris que pvals.fnc fonctionne toujours; Je pensais que mcmcsamp (sur lequel pvals.fnc s'appuie) n'était pas fonctionnel dans lme4 depuis un bon moment. Quelle version de lme4 utilisez-vous? (2) Il n'y a aucune raison conceptuelle pour laquelle avoir des pentes aléatoires devrait casser quoi que ce soit pour obtenir un test de signification (3) Combiner les tests de signification avec MCMC est un peu incohérent, statistiquement, bien que je comprenne l'envie de le faire intervalles est plus supportable) (4) la seule relation entre ce Q et l'autre est «MCMC» (c.-à-d. aucun, pratiquement)
Ben Bolker
La version de lme4 que j'utilise dépend de l'ordinateur sur lequel je suis assis. Cette console a lme4_0.999375-32, mais j'utilise rarement celle-ci pour l'analyse. J'ai remarqué il y a plusieurs mois que pvals.fnc () déchirait les résultats de lme4 après analyse - j'ai construit une solution pour le moment, mais cela ne semble plus être un problème. Je vais devoir poser une autre question sur votre 3ème point dans un avenir proche.
russellpierce

Réponses:

4

Il semble que votre message d'erreur ne concerne pas la variation des pentes, il s'agit d'effets corrélés aléatoires. Vous pouvez également adapter les éléments non corrélés; c'est-à-dire un modèle à effets mixtes avec des effets aléatoires indépendants:

Linear mixed model fit by REML
Formula: Reaction ~ Days + (1 | Subject) + (0 + Days | Subject)
Data: sleepstudy

depuis http://www.stat.wisc.edu/~bates/IMPS2008/lme4D.pdf

Patrick McCann
la source
8

Voici (au moins la plupart) une solution avec MCMCglmm.

Ajustez d'abord le modèle équivalent à variance d'interception uniquement avec MCMCglmm:

library(MCMCglmm)
primingHeid.MCMCglmm = MCMCglmm(fixed=RT ~ RTtoPrime * ResponseToPrime + Condition, 
                                random=~Subject+Word, data = primingHeid)

Comparer les ajustements entre MCMCglmmet lmer, d'abord récupérer ma version piratée de arm::coefplot:

source(url("http://www.math.mcmaster.ca/bolker/R/misc/coefplot_new.R"))
  ## combine estimates of fixed effects and variance components
pp  <- as.mcmc(with(primingHeid.MCMCglmm, cbind(Sol, VCV)))
  ## extract coefficient table
cc1 <- coeftab(primingHeid.MCMCglmm,ptype=c("fixef", "vcov"))
  ## strip fixed/vcov indicators to make names match with lmer output
rownames(cc1) <- gsub("(Sol|VCV).", "", rownames(cc1))
  ## fixed effects -- v. similar
coefplot(list(cc1[1:5,], primingHeid.lmer))
  ## variance components -- quite different.  Worth further exploration?
coefplot(list(cc1[6:8,], coeftab(primingHeid.lmer, ptype="vcov")),
         xlim=c(0,0.16), cex.pts=1.5)

Essayez-le maintenant avec des pentes aléatoires:

primingHeid.rs.MCMCglmm = MCMCglmm(fixed=RT ~ RTtoPrime * ResponseToPrime + Condition,
                                   random=~Subject+Subject:Condition+Word, 
                                   data = primingHeid)        
summary(primingHeid.rs.MCMCglmm)

Cela donne une sorte de "valeurs p MCMC" ... vous devrez explorer par vous-même et voir si tout cela a du sens ...

Ben Bolker
la source
Merci beaucoup Ben. On dirait que cela me dirigera dans la bonne direction. J'ai juste besoin de passer du temps à lire l'aide et les articles connexes pour MCMCglmm pour voir si je peux comprendre ce qui se passe.
russellpierce
1
Le modèle des pentes aléatoires dans ce cas a-t-il une corrélation entre la pente aléatoire et l'ordonnée à l'origine aléatoire, ou dans ce cadre une telle idée est-elle absurde?
russellpierce
J'ai modifié votre code ici pour le rendre plus facile à lire, @Ben; si vous ne l'aimez pas, n'hésitez pas à revenir en arrière avec mes excuses.
gung - Rétablir Monica