lmer() : corrélation des effets aléatoires égale à 1

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

lmer() : corrélation des effets aléatoires égale à 1

Messagepar Stéphane Laurent » 07 Oct 2011, 11:02

Bonjour,
Bon j'avoue ma question est plus d'ordre méthodologique que R-ique. Je fais un modèle avec intercept et slope aléatoires, et j'obtiens une corrélation de 1. Quel genre d'attitude faut-il adopter dans ce cas ?

Code : Tout sélectionner

Linear mixed model fit by REML
Formula: Content ~ Hour + (1 + Hour | Lot)
   Data: subset(dat, subset = Temperature == Temp)
   AIC   BIC logLik deviance REMLdev
 183.8 193.3 -85.89    169.6   171.8
Random effects:
 Groups   Name        Variance Std.Dev. Corr 
 Lot      (Intercept) 0.071160 0.26676       
          Hour        0.013943 0.11808  1.000
 Residual             5.688363 2.38503       
Number of obs: 36, groups: Lot, 3

Fixed effects:
             Estimate Std. Error t value
(Intercept) 81.984267   0.687784  119.20
Hour        -0.005408   0.080691   -0.07

Correlation of Fixed Effects:
     (Intr)
Hour -0.231

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 07 Oct 2011, 12:20

Si les deux e.a. sont parfaitement corrélés, tu peux virer l'un des deux. Logique, non ? Ici, j'essaierais de retirer la pente aléatoire (Hour) dont la variance est << celle de l'intercept. Tu peux aussi utiliser une exploration graphique, basée par exemple sur lmList, pour décider si tu as plus besoin de l'un que de l'autre (intercept ou pente aléatoire). Il y a des exemples dans le bouquin de Pinheiro et Bates. NB: si tu veux comparer les modèles avec différentes structures aléatoires, utiliser une estimation ML et les comparer avec AIC(c) ou test du rapport des vraisemblances.
Renaud

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 07 Oct 2011, 12:34

Merci.
C'est vrai que j'ai pas encore bien exploré les graphiques, ce qui est évidemment un tort.
Je ne sais pas si les efets sont "vraiment" corrélés à 1 ou si c'est un problème à cause d'une estimation de variance trop petite ; le même modèle dans SAS déconne un peu, la variance de l'intercept est 0 (donc ce serait plutôt << variance de la pente !)
Je viens aussi de le faire tourner en bayésien, les lois a posteriori des variances convergent mal.

Pour info voici les résultats avec des effets aléatoires indépendants :

Code : Tout sélectionner

Linear mixed model fit by REML
Formula: Content ~ 1 + Hour + (1 | Lot) + (0 + Hour | Lot)
   Data: subset(dat, subset = Temperature == Temp)
   AIC   BIC logLik deviance REMLdev
 181.9 189.8 -85.95    169.7   171.9
Random effects:
 Groups   Name        Variance   Std.Dev. 
 Lot      (Intercept) 4.3543e-16 2.0867e-08
 Lot      Hour        1.7384e-02 1.3185e-01
 Residual             5.7092e+00 2.3894e+00
Number of obs: 36, groups: Lot, 3

Fixed effects:
             Estimate Std. Error t value
(Intercept) 81.984267   0.671544  122.08
Hour        -0.005408   0.087548   -0.06

Correlation of Fixed Effects:
     (Intr)
Hour -0.398

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 07 Oct 2011, 16:33

L'AIC a diminué dans le second modèle. A mon avis, si tu vires l'intercept aléatoire, il va encore diminuer.
Renaud

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 09 Oct 2011, 18:33

Merci. En effet j'ai fait les graphiques et les intercept des différents lots sont quasiment égaux, et ça tourne bien sans l'intercept aléatoire.

J'ai une autre question sur ce modèle. Comme on le voit :

Code : Tout sélectionner

lmer(Content ~ 1 + Hour + (1 + Hour | Lot) )

on a différents lots, on mesure quelque chose ("Content") sur ceux-ci à différentes heures.
Mais en fait on répète cette expérience, et dans les données on a le numéro de l'expérience dans un facteur "Run" (=1, 2, 3 ou 4). Il faudrait que le modèle prenne en compte le Run. Je ne suis pas sûr de comment m'y prendre. On m'a proposé une syntaxe SAS que je traduirais ainsi :

Code : Tout sélectionner

lmer(Content ~ 1 + Hour + (1 + Hour | Lot) + (Run | Lot) )

Je ne comprends pas le facteur (Run|Lot), est-ce bien la bonne façon de procéder ? Et la sortie R est différente de la sortie SAS : la sortie R retourne une matrice de variance pour le facteur Run alors que SAS retourne une seule variance.

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 10 Oct 2011, 08:41

J'ai trouvé la traduction correcte de la syntaxe SAS, ce n'est rien d'autre que

Code : Tout sélectionner

lmer(Content ~ 1 + Hour + (1 + Hour | Lot) + (1|LotRun) )

Code : Tout sélectionner

LotRun = factor(Lot:Run)

est le facteur Run emboîté dans le facteur Lot.
Je ne suis pas convaincu que c'est la bonne façon de prendre en compte le run...

Bienvenue KOUWAYE
Messages : 42
Enregistré le : 03 Sep 2010, 11:18

Messagepar Bienvenue KOUWAYE » 10 Oct 2011, 13:27

Stéphane Laurent a écrit :J'ai trouvé la traduction correcte de la syntaxe SAS, ce n'est rien d'autre que

Code : Tout sélectionner

lmer(Content ~ 1 + Hour + (1 + Hour | Lot) + (1|LotRun) )

Code : Tout sélectionner

LotRun = factor(Lot:Run)

est le facteur Run emboîté dans le facteur Lot.
Je ne suis pas convaincu que c'est la bonne façon de prendre en compte le run...




Bonjour
Je voudrais savoir si on a besoin d’emboîter le facteur Run dans le facteur Lot avant de mettre " de manière correcte" un effet aléatoire sur "Run"?
Est ce qu'on ne pourrait pas un effet aléatoire sur "Run" indépendamment de "Lot" et "Hour".
Merci pour vos explications
KOUWAYE BIENVENUE
Phd STUDENT
STATISTIQUE APPLIQUEE
Université Paris 1 Panthéon Sorbonne (France)
Laboratoire SAMM
Université d'Abomey-Calavi (Bénin)/ CIPMA
BENIN

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 10 Oct 2011, 14:06

Bonjour Bienvenue,
Le problème est que le Run 1 du Lot A n'a aucun rapport avec le Run 1 du Lot B.

Bienvenue KOUWAYE
Messages : 42
Enregistré le : 03 Sep 2010, 11:18

Messagepar Bienvenue KOUWAYE » 10 Oct 2011, 14:22

Stéphane Laurent a écrit :Bonjour Bienvenue,
Le problème est que le Run 1 du Lot A n'a aucun rapport avec le Run 1 du Lot B.

Je suis d'accord et dans ce cas je crois que ça dépend de ce que l'ont veut voir.
Est ce qu' on veut voir la variabilité dans les données au niveau de "Run"
ou bien au niveau des différentes classes de Run.
Il faut aussi dire que je ne connais pas la structure de vos données.
Merci bien
KOUWAYE BIENVENUE

Phd STUDENT

STATISTIQUE APPLIQUEE

Université Paris 1 Panthéon Sorbonne (France)

Laboratoire SAMM

Université d'Abomey-Calavi (Bénin)/ CIPMA

BENIN

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 10 Oct 2011, 14:54

Je ne comprends pas ta question.Selon moi il faudrait un modèle avec 2 couches d'effets aléatoires : pour chaque lot, chaque run génère un "slope" et un "intercept".
Mais je ne sais pas quelle est la syntaxe lme4 correspondante.

Bienvenue KOUWAYE
Messages : 42
Enregistré le : 03 Sep 2010, 11:18

lmer()

Messagepar Bienvenue KOUWAYE » 10 Oct 2011, 15:58

Stéphane Laurent a écrit :Je ne comprends pas ta question.Selon moi il faudrait un modèle avec 2 couches d'effets aléatoires : pour chaque lot, chaque run génère un "slope" et un "intercept".
Mais je ne sais pas quelle est la syntaxe lme4 correspondante.




Mais je crois
"LotRun = factor(Lot:Run)"
met un effet aléatoire sur les interactions entre Lot et Run
Moi j'aurais d'abord ordonné tous les Run de 1 Jusquà n, où n est le nombre d'observations et faire lmer(Content ~ 1 + Hour + (1 | Run)+(0+Run|Lot))

Je le pense comme ca dites moi si c'est faux
Merci
KOUWAYE BIENVENUE

Phd STUDENT

STATISTIQUE APPLIQUEE

Université Paris 1 Panthéon Sorbonne (France)

Laboratoire SAMM

Université d'Abomey-Calavi (Bénin)/ CIPMA

BENIN

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 07 Nov 2011, 08:58

Stéphane Laurent a écrit :Selon moi il faudrait un modèle avec 2 couches d'effets aléatoires : pour chaque lot, chaque run génère un "slope" et un "intercept".
Mais je ne sais pas quelle est la syntaxe lme4 correspondante.

J'ai encore été naze, c'est ça que je cherchais :

Code : Tout sélectionner

lmer(Content ~ 1 + Hour + (1 + Hour | Lot) + (1+Hour|LotRun) )


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité