glmer : false convergence

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

Vincent Boulanger
Messages : 76
Enregistré le : 25 Avr 2006, 11:59

glmer : false convergence

Messagepar Vincent Boulanger » 11 Fév 2009, 10:24

Bonjour,

en faisant un glmer, j'ai en retour un "warning message" m'indiquant :
In mer_finalize(ans) : false convergence (8)

Quelqu'un pourrait-il me dire à quoi cela est dû, et correspond ?
Est-ce gênant pour interpréter les sorties ?

Merci à tous,

VB
Vincent Boulanger
Ingénieur Forestier
Doctorant Cemagref/INRA/ONCFS

herve chapuis
Messages : 110
Enregistré le : 05 Déc 2008, 15:26

Messagepar herve chapuis » 13 Fév 2009, 10:55

Bonjour,

J'ai également un message de ce type. Je constate malheureusement que ce message, déjà ancien, est resté sans réponse.
Pas très encourageant...
J'ai posé une question sur la liste anglophone sans y trouver de réponse vraiment satisfaisante.

Je simule une population et je l'analyse ensuite avec lmer ou glmer (du package lme4).
Forcément je fais ça en batch car j'ai un grand nombre de réplications. A la fin (dans le fichier .Rout) je trouve un message d'avertissement du style.
Warning messages:
1: In mer_finalize(ans) : false convergence (8)
2: In cor(x = additif_sire[, 1], y = pere2) : l'écart type est nulle
3: In cor(x = additif_sire[, 1], y = pere1) : l'écart type est nulle
4: In cor(x = additif_sire[, 1], y = pere1) : l'écart type est nulle

Oui, car je récupère ensuite par ranef() les effets aléatoires estimés et je les correlle avec la valeur simulée.

Si ce n'est qu'un warning sur la convergence ce n'est pas forcément inquiétant, mais si l'estimation des effets aléatoires part dans le décors, c'est moins satisfaisant.

1° J'ai trouvé des réponses suggérant de spécifier nAGQ = 5 ou plus. Je n'ai pas trop bien compris ce que ça pourrait changer. Et à quel endroit l'ajouter ?

2° Je désirais savoir comment détecter in situ l es mauvaises convergences pour ne pas les prendre en compte dans mon bilan. Il m'a été suggéré de transformer les "warnings" en "errors" mais je n'ai pas bien compris en quoi cela me dépannerait.

Quelqu'un(e) aurait-il des éléments de réponse ?

Merci

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

Messagepar Renaud Lancelot » 14 Fév 2009, 14:44

herve chapuis a écrit :1° J'ai trouvé des réponses suggérant de spécifier nAGQ = 5 ou plus. Je n'ai pas trop bien compris ce que ça pourrait changer. Et à quel endroit l'ajouter ?


nAGQ est un des arguments de glmer: voir ?glmer

nAGQ a positive integer - the number of points per axis for evaluating the adaptive Gauss-Hermite approximation to the log-likelihood. This defaults to 1, corresponding to the Laplacian approximation. Values greater than 1 produce greater accuracy in the evaluation of the log-likelihood at the expense of speed.


En clair, quand on augment nAGQ, l'approximation du log de la vraisemblance est meilleure (mais les calculs sont plus longs). Des problèmes de fausse convergence peuvent ainsi être évités dans certains cas.


2° Je désirais savoir comment détecter in situ l es mauvaises convergences pour ne pas les prendre en compte dans mon bilan. Il m'a été suggéré de transformer les "warnings" en "errors" mais je n'ai pas bien compris en quoi cela me dépannerait.


Il faut

1) jouer sur l'option "warn"; e.g.

Code : Tout sélectionner

options(warn = 2)

warn:
sets the handling of warning messages. If warn is negative all warnings are ignored. If warn is zero (the default) warnings are stored until the top–level function returns. If fewer than 10 warnings were signalled they will be printed otherwise a message saying how many (max 50) were signalled. An object called last.warning is created and can be printed through the function warnings. If warn is one, warnings are printed as they occur. If warn is two or larger all warnings are turned into errors.


2) Utiliser ensuite la fonction try pour capturer les erreurs (faire un test sur le résultat de try).

Si ce que j'écris n'est pas clair, dites-moi et je ferai un exemple.

Renaud

herve chapuis
Messages : 110
Enregistré le : 05 Déc 2008, 15:26

Messagepar herve chapuis » 16 Fév 2009, 10:30

merci

j'essaye de recréer les problèmes. Pas très simple... Plus facile de les obtenir avec 5000 réplications qu'avec seulement 20.

Sinon le nAGQ me pose un problème.
Ca fonctionne pour
lm1<-glmer(Y~1+(1|pere),data=TOTAL, family=binomial,nAGQ=5)

mais pas pour

lm2<-glmer(Y~1+(1|pere)+(1|mere),data=TOTAL,family=binomial,nAGQ=5)
car
Erreur dans validObject(.Object) :
invalid class "mer" object: AGQ method requires a single grouping factor

Le pbm c'est que vu que je lance les 2 modèles à la suite, je ne sais pas si les false convergences surviennent plus souvent avec le modèle père ou le modèle père + mère.
C'est vrai qu'il ne tient qu'à moi de le vérifier... C'est facile.

Mais à supposer que le modèle père + mère soit incriminé, comment améliorer la convergence ?

Merci.

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

Messagepar Renaud Lancelot » 16 Fév 2009, 11:14

Pas toujours possible: dépend de l'adéquation du modèle par rapport aux données et de l'allure de la fct de vraisemblance. Voir aussi l'argument control de glmer et les paramètres permettant de jouer sur l'optimisation. Nb: peut aussi être utile d'augmenter nAGQ.

Concernant l'erreur avec nAGQ, je pense qu'elle est inhérente au fait que seule la méthode de Laplace (nAGQ = 1) a été développée pour les GLMM avec des effets aléatoires croisés.

Renaud


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité