GLMM et variable qualitative uniquement

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

Anais Edme
Messages : 57
Enregistré le : 02 Avr 2014, 13:19

GLMM et variable qualitative uniquement

Messagepar Anais Edme » 06 Nov 2014, 13:58

Bonjour à tous !

Me voilà de nouveau à ramer avec R !
J'ai déjà fait des GLMM qui tournaient bien, je me disais qu'on faire une autre serai simple. Pensez donc !

Voila mon model : age <-glmer(age.male~statut+(1|Nid), binomial, data)
Donc age.male est binomial (adult/sub adult), statut est qualitatif (social, extra pair ou pontential males) et nid est aussi qualitatif.

Et R m'affiche une erreur:
Warning messages:
1: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
unable to evaluate scaled gradient
2: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
Hessian is numerically singular: parameters are not uniquely determined

alors que le meme model en glm simple marche ...
des idées de ce qui coince ?

merci d'avance !
Enfe-R

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

Messagepar Renaud Lancelot » 06 Nov 2014, 17:54

Il nous faut un exemple reproductible - et donc les données, pour répondre !
Renaud

Anais Edme
Messages : 57
Enregistré le : 02 Avr 2014, 13:19

Messagepar Anais Edme » 07 Nov 2014, 08:14

mon jeu de donnée est comme ça :
age ; father ; Nid
adult; social ; 1
adult; potential; 1
adult; extrapair ; 1
subadult; potential; 1
subadult; social; 2
adult; extrapair; 2
adult, potential; 2
adult; potential; 2

etc ....
Enfe-R

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

Messagepar Renaud Lancelot » 11 Nov 2014, 11:08

Il faut un jeu de données permettant de reproduire le problème.
Renaud

Anais Edme
Messages : 57
Enregistré le : 02 Avr 2014, 13:19

Messagepar Anais Edme » 11 Nov 2014, 11:29

je fais comment ?je peux pas faire de copier coller de mon jeu de données ?
Enfe-R

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

Messagepar Renaud Lancelot » 11 Nov 2014, 22:39

Renaud

Anais Edme
Messages : 57
Enregistré le : 02 Avr 2014, 13:19

Messagepar Anais Edme » 12 Nov 2014, 07:39

j'espère que j'ai bien fait comme il faut ... Merci d'avance Renaud Lancelot

Code : Tout sélectionner

extrait<-structure(list(year = c(2007L, 2007L, 2007L, 2007L, 2007L, 2007L,
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L,
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L,
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L,
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L,
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L,
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L,
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L,
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L,
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L,
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L,
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L,
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L,
2007L, 2007L, 2007L, 2007L, 2007L), nest = structure(c(26L, 25L,
15L, 16L, 17L, 24L, 17L, 16L, 25L, 32L, 17L, 31L, 36L, 24L, 23L,
17L, 57L, 40L, 96L, 74L, 34L, 50L, 2L, 59L, 60L, 79L, 49L, 71L,
30L, 68L, 26L, 88L, 93L, 33L, 44L, 14L, 29L, 61L, 16L, 56L, 86L,
95L, 25L, 9L, 7L, 1L, 55L, 32L, 12L, 85L, 63L, 66L, 15L, 69L,
17L, 43L, 46L, 13L, 3L, 31L, 61L, 87L, 77L, 20L, 18L, 64L, 53L,
84L, 92L, 42L, 36L, 89L, 72L, 38L, 90L, 80L, 70L, 81L, 28L, 54L,
83L, 78L, 24L, 95L, 23L, 39L, 45L, 91L, 65L, 82L, 51L, 75L, 41L,
35L, 19L, 48L, 73L, 22L, 52L, 94L, 47L, 10L, 37L, 21L, 76L, 11L,
6L, 38L, 8L, 17L, 41L, 67L, 58L, 62L, 4L, 5L, 27L, 26L, 25L), .Label = c("B1",
"B19", "B26", "B27", "B29", "B42", "B7", "D14", "D23", "D28",
"D30", "D31", "D38", "K10", "K11", "K15", "K16", "K19", "K20",
"K21", "K22", "K27", "K29", "K31", "K33", "K34", "K36", "K45",
"K48", "K50", "K57", "K59", "K61", "K62", "K70", "K75", "K8",
"K86", "K9", "S10", "S101", "S104", "S117", "S13", "S19", "S25",
"S27", "S28", "S30", "S31", "S36", "S39", "S42", "S45", "S46",
"S47", "S48", "S5", "S61", "S62", "S63", "S72", "S73", "S77",
"S79", "S81", "S96", "S98", "Z16", "Z29", "Z30", "Z32", "Z33",
"Z34", "Z35", "Z36", "Z4", "Z43", "Z47", "Z5", "Z51", "Z52",
"Z54", "Z55", "Z59", "Z66", "Z67", "Z68", "Z71", "Z72", "Z77",
"Z78", "Z80", "Z82", "Z84", "Z92"), class = "factor"), trio = c(1L,
1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 5L, 5L), father.statut = structure(c(2L, 2L,
1L, 3L, 2L, 1L, 2L, 3L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 3L), .Label = c("extrapair", "potential", "social"
), class = "factor"), agem = structure(c(1L, 2L, 2L, 2L, 1L,
2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L,
2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L,
2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L,
1L, 2L), .Label = c("", "ad"), class = "factor")), .Names = c("year",
"nest", "trio", "father.statut", "agem"), class = "data.frame", row.names = c(NA,
-119L))
Enfe-R

Florent Aubry
Messages : 324
Enregistré le : 25 Juin 2010, 10:21

Messagepar Florent Aubry » 12 Nov 2014, 11:33

A priori, le second message d'avis découle du premier. Une possibilité expliquant l'erreur est que certains niveaux du facteur de groupement n'ont qu'une observation ou des données redondantes.

N.B. : glm n'évalue pas le même modèle puisqu'il ne traite qu'un modèle à effets fixes tandis que glmer traite un modèle à effets mixtes. De ce fait, les algorithmes sous-jacents sont très différents.

Anais Edme
Messages : 57
Enregistré le : 02 Avr 2014, 13:19

Messagepar Anais Edme » 11 Déc 2014, 12:26

J'ai trouve une solution en ajouter nAGQ=0 a mon model.
Il tourne, par contre j'ai de p-value de 0.982 ou 1 !!
je pense vraiment qu'il y a un probleme, mais je ne sais vraiment pas si cela vient de R ou du jeu de donnees...
Enfe-R

Florent Aubry
Messages : 324
Enregistré le : 25 Juin 2010, 10:21

Messagepar Florent Aubry » 11 Déc 2014, 13:12

nAGQ = 0 conduit à utiliser une technique beaucoup moins précise pour l'estimation des paramètres, ce qui peut expliquer qu'il n'y a plus d'erreur dans l'estimation de la log-vraisemblance. Par contre, les valeurs estimées peuvent être n'importe quoi comme le montre les valeurs de p obtenues. Ce résultat remet en question le modèle utilisé, à savoir le modèle à effets aléatoires. Pour commencer, as-tu vérifié qu'il y avait plusieurs mesures par Nid simplement en construisant le tableau de contingence

Code : Tout sélectionner

with( data, table( statut, Nid))
S'il n'y a pas plusieurs statuts par Nid (ne serait-ce que pour certains), le modèle à effets mixtes a peu de chance de fonctionner.

Une autre solution est d'utiliser le test de Cochran-Mantel-Haenszel (fonction mantelhaen.test) qui vérifie que deux variables nominales sont conditionnellement indépendantes dans chaque strate d’une troisième pourvu qu’il n’y ait pas d’interactions du 3ème ordre. Le tableau de contingence peut se construire par la fonction table (avec première variable, la variable dépendante, comme seconde variable, le facteur fixe et comme troisième facteur, celui suspecté comme étant le facteur aléatoire). S'il existe des individus pour lesquels il n'y a qu'une données, le test ne passe pas.

Anais Edme
Messages : 57
Enregistré le : 02 Avr 2014, 13:19

Messagepar Anais Edme » 11 Déc 2014, 14:25

J'ai effectivement beaucoup des statuts avec une seule donne, ce qui est "logique" dans mon jeu de donner car un poussin a un seul pere biologique... Et donc mon model ne semble pas approrier ...
Un model sans randon factor serai acceptable dans ce cas ou non ?
Merci pour ton aide Florent Aubry
Enfe-R

Florent Aubry
Messages : 324
Enregistré le : 25 Juin 2010, 10:21

Messagepar Florent Aubry » 11 Déc 2014, 15:09

Un modèle à effet fixe est en effet acceptable mais avec une perte de puissance dépendant de la proportion de mesures multiples puisque les mesures multiples sur le même individu seront alors considérées comme indépendantes. Mais je pense que le problème est plus amont et concerne l'objectif de l'analyse en précisant ce que veut exactement dire une ou plusieurs observations pour un individu, si cela n'entraine pas l'existence de deux populations distinctes... Et là, on sort du cadre de R.


Retourner vers « Questions en cours »

Qui est en ligne

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