Avertissement «Le modèle n'a pas pu converger» dans lmer ()

21

Avec l'ensemble de données suivant, je voulais voir si la réponse (effet) change en ce qui concerne les sites, la saison, la durée et leurs interactions. Certains forums en ligne sur les statistiques m'ont suggéré de continuer avec les modèles à effets mixtes linéaires, mais le problème est que, puisque les répliques sont aléatoires au sein de chaque station, j'ai peu de chance de collecter l'échantillon exactement au même endroit au cours des saisons successives (par exemple, repl-1 de s1 de l'après-mousson peut ne pas être le même que celui de la mousson). C'est différent des essais cliniques (avec une conception intra-sujet) où vous mesurez le même sujet à plusieurs reprises au fil des saisons. Cependant, considérant les sites et la saison comme un facteur aléatoire, j'ai exécuté les commandes suivantes et reçu un message d'avertissement:

Warning messages:
1: In checkConv(attr(opt, "derivs"), optpar,ctrl=controlpar,ctrl=controlcheckConv, 
: unable to evaluate scaled gradient
2: In checkConv(attr(opt, "derivs"), optpar,ctrl=controlpar,ctrl=controlcheckConv, 
: Model failed to converge: degenerate Hessian with 1 negative eigenvalues

Quelqu'un peut-il m'aider à résoudre le problème? Les codes sont donnés ci-dessous:

library(lme4)
read.table(textConnection("duration season  sites   effect
                          4d    mon s1  7305.91
                          4d    mon s2  856.297
                          4d    mon s3  649.93
                          4d    mon s1  10121.62
                          4d    mon s2  5137.85
                          4d    mon s3  3059.89
                          4d    mon s1  5384.3
                          4d    mon s2  5014.66
                          4d    mon s3  3378.15
                          4d    post    s1  6475.53
                          4d    post    s2  2923.15
                          4d    post    s3  554.05
                          4d    post    s1  7590.8
                          4d    post    s2  3888.01
                          4d    post    s3  600.07
                          4d    post    s1  6717.63
                          4d    post    s2  1542.93
                          4d    post    s3  1001.4
                          4d    pre s1  9290.84
                          4d    pre s2  2199.05
                          4d    pre s3  1149.99
                          4d    pre s1  5864.29
                          4d    pre s2  4847.92
                          4d    pre s3  4172.71
                          4d    pre s1  8419.88
                          4d    pre s2  685.18
                          4d    pre s3  4133.15
                          7d    mon s1  11129.86
                          7d    mon s2  1492.36
                          7d    mon s3  1375
                          7d    mon s1  10927.16
                          7d    mon s2  8131.14
                          7d    mon s3  9610.08
                          7d    mon s1  13732.55
                          7d    mon s2  13314.01
                          7d    mon s3  4075.65
                          7d    post    s1  11770.79
                          7d    post    s2  4254.88
                          7d    post    s3  753.2
                          7d    post    s1  11324.95
                          7d    post    s2  5133.76
                          7d    post    s3  2156.2
                          7d    post    s1  12103.76
                          7d    post    s2  3143.72
                          7d    post    s3  2603.23
                          7d    pre s1  13928.88
                          7d    pre s2  3208.28
                          7d    pre s3  8015.04
                          7d    pre s1  11851.47
                          7d    pre s2  6815.31
                          7d    pre s3  8478.77
                          7d    pre s1  13600.48
                          7d    pre s2  1219.46
                          7d    pre s3  6987.5
                          "),header=T)->dat1


m1 = lmer(effect ~ duration + (1+duration|sites) +(1+duration|season),
          data=dat1, REML=FALSE)
Syamkumar. R
la source
@Ian_Fin. Merci pour la retouche. En fait, je ne sais pas comment inclure les codes r comme ci
Syamkumar.

Réponses:

47

"Résoudre" le problème que vous rencontrez dans le sens de ne pas recevoir d'avertissements sur l'échec de la convergence est plutôt simple: vous n'utilisez pas l' optimiseur BOBYQA par défaut, mais vous choisissez plutôt d'utiliser la routine d'optimisation Nelder-Mead utilisée par défaut dans 1.0.xles versions précédentes. Ou vous installez le package optimxafin que vous puissiez directement une routine L-BFGS-B ou nlminb(identique aux lme4versions antérieures à la version 1). Par exemple:

m1 = lmer(effect~duration+(1+duration|sites)+(1+duration|season), 
          data = dat1, REML = FALSE, 
          control = lmerControl(optimizer ="Nelder_Mead")
library(optimx)
m1 = lmer(effect~duration+(1+duration|sites)+(1+duration|season), 
          data = dat1, REML = FALSE, 
          control = lmerControl(
                           optimizer ='optimx', optCtrl=list(method='L-BFGS-B')))
m1 = lmer(effect~duration+(1+duration|sites)+(1+duration|season), 
          data = dat1, REML = FALSE, 
          control = lmerControl(
                           optimizer ='optimx', optCtrl=list(method='nlminb')))

tout fonctionne bien (pas d'avertissement). Les questions intéressantes sont:

  1. pourquoi vous avez reçu ces avertissements pour commencer et
  2. pourquoi lorsque vous l'avez utilisé, REML = TRUEvous n'avez reçu aucun avertissement.

Succinctement, 1. vous avez reçu ces avertissements parce que vous avez défini à la durationfois comme un effet fixe ainsi que la pente aléatoire pour le facteur sites, ainsi que season. Le modèle a effectivement manqué de degrés de liberté pour estimer les corrélations entre les pentes et les intersections que vous avez définies. Si vous avez utilisé un modèle légèrement plus simple comme:

m1 = lmer(effect~duration+ (1+duration|sites) + (0+duration|season) + (1|season),
          data=dat1, REML = FALSE)

vous ne rencontriez aucun problème de convergence. Ce modèle estimerait efficacement les interceptions aléatoires non corrélées et les pentes aléatoires pour chacune season.

En outre, 2. lorsque vous avez défini, REML = FALSEvous avez utilisé la probabilité maximale estimée au lieu de la probabilité maximale restreinte. Les estimations REML tentent de «factoriser» l'influence des effets fixes avant de rechercher la structure optimale de variance à effet aléatoire (voir le fil « Qu'est-ce que la« probabilité maximale restreinte »et quand doit-elle être utilisée? » Pour plus de détails). informations en la matière). Calculée, cette procédure se fait essentiellement en multipliant les deux parties de l'équation du modèle LME d'origine par une matrice telle que , c'est-à-dire que vous modifiez à la fois le origine en ainsi que leXK K X = 0 y K y Z K Z Zy=Xβ+Zγ+ϵKKX=0yKyZ à . Je soupçonne fortement que cela a affecté le numéro de condition de la matrice de conception et, en tant que tel, vous aide à sortir de l'endroit difficile numérique que vous vous êtes trouvé en premier lieu.KZZ

Une dernière note est que je ne sais pas s'il est judicieux d'utiliser seasoncomme un effet aléatoire pour commencer. Après tout, il n'y a que peu de saisons, vous pouvez donc les traiter comme des effets fixes.

usεr11852 dit Reinstate Monic
la source
BTW, bienvenue dans la communauté!
usεr11852 dit Réintégrer Monic
1
@ Syamkumar.R: Cool, je suis content d'avoir pu aider. Si vous pensez que cela répond à votre question, vous pouvez envisager d'accepter la réponse.
usεr11852 dit Réintégrer Monic
Merci beaucoup!! La 3ème variante - REML = FALSE, glmerControl(optimizer ='optimx', optCtrl=list(method='nlminb'))- a en fait résolu le problème de convergence en glmer!
Curieux
0

La question est statistique plutôt que technique. En fait, j'ai utilisé un modèle à effet aléatoire au lieu d'un modèle à effet fixe.Aucun des facteurs, je pense, ne devrait être traité comme le facteur aléatoire car nous avons besoin d'au moins 5 ou 6 niveaux ou répétitions pour traiter un facteur comme un effet aléatoire (voir ici Quel est le nombre minimum recommandé de groupes pour un facteur d'effets aléatoires? ).

L'ensemble de données ci-dessus ne contient que trois échantillons / site / saison, ce qui est insuffisant pour un modèle à effet aléatoire.Dans l'ensemble de données, la durée, 4 jours et 7 jours, appartient à deux expériences parallèles distinctes exécutées en même temps. Donc, cracher l'ensemble de données par durée (4 jours et 7 jours) et effectuer une anova bidirectionnelle pour chaque durée avec saison et sites car les facteurs seraient suffisants pour modéliser l'effet (variable de réponse) ici. Le modèle doit être le suivant:

lm(day_4_effect~sites*season, data=dat1)

lm(day_7_effect~sites*season, data=dat1)

Merci à Bodo Winter ( http://www.bodowinter.com/tutorial/bw_LME_tutorial2.pdf ) et @ usεr11852 qui m'ont aidé à résoudre le problème.

Syamkumar. R
la source