Comment puis-je tester si un effet aléatoire est significatif?

34

J'essaie de comprendre quand utiliser un effet aléatoire et quand c'est inutile. On m'a dit qu'une règle de base est si vous avez 4 groupes / individus ou plus que je fais (15 orignaux individuels). Certains de ces orignaux ont été expérimentés à deux ou trois reprises pour un total de 29 essais. Je veux savoir s'ils se comportent différemment lorsqu'ils se trouvent dans des paysages à haut risque. Alors, j'ai pensé définir l'individu comme un effet aléatoire. Cependant, on me dit maintenant qu'il n'est pas nécessaire d'inclure l'individu en tant qu'effet aléatoire, car sa réponse ne varie pas beaucoup. Ce que je n'arrive pas à comprendre, c'est comment vérifier si quelque chose est vraiment pris en compte lors de la définition d'un effet aléatoire. Peut-être une première question est: Quel test / diagnostic puis-je faire pour déterminer si Individual est une bonne variable explicative et si cela doit être un effet fixe - qq graphes? des histogrammes? nuages ​​de points? Et que chercherais-je dans ces modèles?

J'ai exécuté le modèle avec l'individu en tant qu'effet aléatoire et sans, mais j'ai ensuite lu http://glmm.wikidot.com/faq où ils indiquent:

ne comparez pas les modèles lmer avec les ajustements lm correspondants, ou glmer / glm; les log-vraisemblances ne sont pas proportionnées (c'est-à-dire qu'elles incluent différents termes additifs)

Et ici, je suppose que cela signifie que vous ne pouvez pas comparer un modèle avec effet aléatoire ou sans. Mais je ne saurais pas vraiment ce que je devrais comparer entre eux de toute façon.

Dans mon modèle avec l’effet Aléatoire, j’essayais également d’examiner le résultat pour voir quel type de preuve ou d’importance l’ER avait

lmer(Velocity ~ D.CPC.min + FD.CPC + (1|ID), REML = FALSE, family = gaussian, data = tv)

Linear mixed model fit by maximum likelihood 
Formula: Velocity ~ D.CPC.min + FD.CPC + (1 | ID) 
   Data: tv 
    AIC    BIC logLik deviance REMLdev
 -13.92 -7.087  11.96   -23.92   15.39
Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.00000  0.00000 
 Residual             0.02566  0.16019 
Number of obs: 29, groups: ID, 15

Fixed effects:
              Estimate Std. Error t value
(Intercept)  3.287e-01  5.070e-02   6.483
D.CPC.min   -1.539e-03  3.546e-04  -4.341
FD.CPC       1.153e-04  1.789e-05   6.446

Correlation of Fixed Effects:
          (Intr) D.CPC.
D.CPC.min -0.010       
FD.CPC    -0.724 -0.437

Vous voyez que ma variance et le SD de l'ID individuel en tant qu'effet aléatoire = 0. Comment est-ce possible? Que signifie 0? Est-ce correct? Ensuite, mon ami qui a dit "car il n'y a pas de variation en utilisant ID comme effet aléatoire est inutile" est correct? Alors, puis-je l'utiliser comme un effet fixe? Mais le fait qu'il y ait si peu de variation signifie-t-il qu'il ne nous en dira pas beaucoup, de toute façon?

Kerry
la source
En ce qui concerne l'obtention d'une variance exacte à 0 d'un effet aléatoire, voir stats.stackexchange.com/questions/115090 .
amibe dit de réintégrer Monica le

Réponses:

21

L'estimation, IDvariance de = 0, indique que le niveau de variabilité entre les groupes n'est pas suffisant pour justifier l'incorporation d'effets aléatoires dans le modèle; c'est à dire. votre modèle est dégénéré.

Comme vous vous identifiez correctement: très probablement, oui; IDcomme un effet aléatoire est inutile. Peu de choses me viennent à l’esprit pour tester cette hypothèse:

  1. Vous pouvez comparer (en utilisant REML = Ftoujours) l'AIC (ou votre CI préféré en général) entre un modèle avec et sans effets aléatoires et voir comment cela se passe.
  2. Vous examineriez la anova()sortie des deux modèles.
  3. Vous pouvez faire un bootstrap paramétrique en utilisant la distribution postérieure définie par votre modèle d'origine.

Remarquez que les choix 1 et 2 ont un problème: vous recherchez quelque chose qui se trouve dans les limites de l'espace des paramètres, de sorte qu'ils ne sont pas techniquement corrects. Cela dit, je ne pense pas que vous obtiendrez des idées erronées et que beaucoup de gens les utilisent (par exemple, Douglas Bates, l'un des développeurs de lme4, les utilise dans son livre mais indique clairement cette mise en garde concernant les valeurs des paramètres testés. sur la limite de l'ensemble des valeurs possibles). Le choix 3 est le plus fastidieux des 3 mais vous donne en fait la meilleure idée de ce qui se passe. Certaines personnes sont tentées d'utiliser également le bootstrap non paramétrique, mais je pense que, étant donné que vous faites des hypothèses paramétriques pour commencer, vous pourriez aussi bien les utiliser.

usεr11852 dit Réintégrer Monic
la source
6
Le package RLRsim est un moyen très pratique de tester des effets aléatoires à l'aide de tests de rapport de vraisemblance basés sur la simulation.
atrichornis
@atrichornis: +1. Forfait intéressant; Je ne savais pas à ce sujet. Je viens de regarder son code, assez simple, pourrais-je dire. Je souhaite qu'ils l'incorporent (ou quelque chose du genre) à ce lme4qui mcmcsamp()est cassé et que les gens ne disposent que de leurs propres implémentations bootstrap ad-hoc pour obtenir des valeurs p décentes, etc.
usεr11852 dit Rétablir Monic
Certes, les modèles mixtes ne sont pas simples dans R. Beaucoup d’approximations et de solutions de contournement ... Même si je comprends bien, SAS, etc., passez-vous au-dessus de certaines des mêmes incertitudes? Ben Bolker est coauteur sur les deux paquets, il peut avoir ses raisons pour ne pas l'intégrer. Probablement le temps!
atrichornis
4
Le bootstrap situé à la limite de l'espace de paramètres a son propre ensemble de problèmes et de problèmes menant à une incohérence . Le bootstrap n'est pas une panacée et ne doit pas être jeté à la légère dans le sac, à supposer qu'il permette de tout résoudre.
StasK
2
Jetez un coup d'oeil, l'argument est très subtil. Autant que je me souvienne, cela revient au fait que vous effectuez le bootstrap à partir d'une distribution différente de la distribution null; et étant donné les distributions non standard obtenues sur la limite, les conditions de régularité sont violées et la distribution bootstrap ne converge pas vers la cible. Je pense que le bootstrap non paramétrique peut encore être construit ici en supprimant le groupe des résidus. Cependant, en cas de violation de l'indépendance des observations entre groupes, une autre couche de complications peut survenir.
StasK
3

Je ne suis pas sûr que l'approche que je vais suggérer soit raisonnable, alors ceux qui en savent plus sur ce sujet me corrigent si je me trompe.

Ma proposition est de créer dans vos données une colonne supplémentaire ayant une valeur constante de 1:

IDconst <- factor(rep(1, each = length(tv$Velocity)))

Ensuite, vous pouvez créer un modèle utilisant cette colonne comme effet aléatoire:

fm1 <- lmer(Velocity ~ D.CPC.min + FD.CPC + (1|IDconst), 
  REML = FALSE, family = gaussian, data = tv)

À ce stade, vous pouvez comparer (AIC) votre modèle d'origine à l'effet aléatoire ID(appelons-le fm0) avec le nouveau modèle qui ne prend pas en compte IDcar il IDconstest identique pour toutes vos données.

anova(fm0,fm1)

Mise à jour

user11852 demandait un exemple car, à son avis, l'approche ci-dessus ne serait même pas exécutée. Au contraire, je peux montrer que l'approche fonctionne (du moins avec lme4_0.999999-0celle que j'utilise actuellement).

set.seed(101)
dataset <- expand.grid(id = factor(seq_len(10)), fac1 = factor(c("A", "B"),
  levels = c("A", "B")), trial = seq_len(10))
dataset$value <- rnorm(nrow(dataset), sd = 0.5) +
      with(dataset, rnorm(length(levels(id)), sd = 0.5)[id] +
      ifelse(fac1 == "B", 1.0, 0)) + rnorm(1,.5)
    dataset$idconst <- factor(rep(1, each = length(dataset$value)))

library(lme4)
fm0 <- lmer(value~fac1+(1|id), data = dataset)
fm1 <- lmer(value~fac1+(1|idconst), data = dataset)

anova(fm1,fm0)

Sortie:

  Data: dataset
  Models:
  fm1: value ~ fac1 + (1 | idconst)
  fm0: value ~ fac1 + (1 | id)

      Df    AIC    BIC  logLik  Chisq Chi Df Pr(>Chisq)
  fm1  4 370.72 383.92 -181.36                      
  fm0  4 309.79 322.98 -150.89 60.936      0  < 2.2e-16 ***

Selon ce dernier test, nous devrions garder l’effet aléatoire car le fm0modèle a la plus faible AIC ainsi que la BIC.

Mise à jour 2

A propos, cette même approche est proposée par NW Galwey dans 'Introduction à la modélisation mixte: au-delà de la régression et de l'analyse de variance' aux pages 213-214.

VLC
la source
Avez-vous testé votre idée? Prouvez-moi s'il vous plaît que je me trompe, mais je pense que votre idée ne sera même pas exécutée. Si le IDconstest le même pour toutes vos données, alors vous n'avez aucun groupe. Vous avez besoin d'un facteur de regroupement pour avoir au moins un niveau échantillonné et la manière dont vous configurez le modèle n'en a pas. Je pourrais peut-être croire la raison d'utiliser un "groupement aléatoire", mais c'est un jeu de balle différent dans son ensemble. Testez votre approche avec des données factices. Je crois fermement qu'avec votre configuration proposée lmer()ne fonctionnera pas. (J'utilise lme4_0.99999911-1)
usεr11852 dit Rétablir Monic
@ user11852 S'il vous plaît, voir ma mise à jour et laissez-nous savoir si cette approche fonctionne également avec lme4_0.99999911-1.
VLC
Z
3
Oui, j'ai fait ce que vous suggérez. cela ne fonctionnera pas / calculera. Error in lFormula(formula = value ~ fac1 + (1 | idconst), data = dataset) : grouping factors must have at least 1 sampled level. Et comme je l'ai dit, conceptuellement, c'est faux. Il ne s'agit pas de tromper le logiciel pour donner des chiffres, mais de dire si ce que vous dites est raisonnable. Vous n'avez pas de deuxième modèle mixte à comparer si, dans ce modèle, l'effet aléatoire est par construction une constante. Vous pouvez aussi bien l'exclure et essayer un modèle linéaire.
usεr11852 dit Réintégrer Monic
1
Mettre à jour la concertation en définissant une variable aléatoire de groupe unique dans lme4. Cela peut se faire que si vous définissez l'option: control=lmerControl(check.nlev.gtr.1="ignore"). Ben Bolker le mentionne ici: github.com/lme4/lme4/issues/411 .
Robin Beaumont
1

J'aimerais répondre à la question plus "initiale".

Si vous soupçonnez une quelconque hétérogénéité dans la variance parmi les variables dépendantes à cause de certains facteurs, vous devriez aller de l'avant et tracer les données à l'aide de diagrammes de dispersion et de boîte. Certains modèles courants à vérifier, je mets cette liste ci-dessous à partir de diverses sources sur le web.

Modèles d'hétéroscédasticité

En outre, tracez votre variable dépendante par facteur / groupe de traitement pour voir s’il existe une variance constante. Sinon, vous voudrez peut-être explorer les effets aléatoires ou les régressions pondérées. Pour par exemple. Ce tableau ci-dessous est un exemple de variance en forme d'entonnoir dans mes groupes de traitement. Je choisis donc des effets aléatoires et teste les effets sur la pente et les interceptions.

Box box pour contrôler l'hétéroscédasticité

À partir de là, les réponses ci-dessus répondent à votre question principale. Il existe également des tests qui vérifient l'hétéroscédasticité, tels que ceux-ci: https://dergipark.org.tr/download/article-file/94971 . Mais je ne suis pas sûr qu'il existe des tests permettant de détecter l'hétéroscédasticité au niveau du groupe.

Arun
la source
Utilisez uniquement le champ "Votre réponse" pour fournir des réponses à la question du PO. CV est un site de questions / réponses strict, pas un forum de discussion. La dernière partie en gras de votre message est une nouvelle question, pas une réponse à cette question. Si vous avez une nouvelle question, cliquez sur le gris ASK QUESTIONen haut et posez-le là. Puisque vous êtes nouveau ici, vous voudrez peut-être faire notre tour , qui contient des informations pour les nouveaux utilisateurs.
gung - Rétablir Monica