Avviso "Il modello non è riuscito a convergere" in lmer ()


21

Con il seguente set di dati, volevo vedere se la risposta (effetto) cambia in relazione a siti, stagione, durata e loro interazioni. Alcuni forum online sulle statistiche mi hanno suggerito di continuare con i modelli lineari a effetti misti, ma il problema è che, poiché i replicati sono randomizzati all'interno di ciascuna stazione, ho poche possibilità di raccogliere il campione esattamente dallo stesso punto nelle stagioni successive (ad esempio, sostitu-1 di s1 del post-monsone potrebbe non essere uguale a quello del monsone). È diverso dagli studi clinici (con design all'interno del soggetto) in cui si misura ripetutamente lo stesso soggetto nel corso delle stagioni. Tuttavia, considerando i siti e la stagione come un fattore casuale ho eseguito i seguenti comandi e ho ricevuto un messaggio di avviso:

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

Qualcuno può aiutarmi a risolvere il problema? I codici sono indicati di seguito:

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)

@Ian_Fin. Grazie per la modifica. In realtà, non so come includere i codici r come sopra
Syamkumar.

Risposte:


47

"Risolvere" il problema che si verifica nel senso di non ricevere avvisi sulla mancata convergenza è piuttosto semplice: non si utilizza l' ottimizzatore BOBYQA predefinito ma si sceglie invece di utilizzare la routine di ottimizzazione Nelder-Mead utilizzata per impostazione predefinita nelle 1.0.xversioni precedenti precedenti. Oppure si installa il pacchetto in optimxmodo da poter direttamente una routine L-BFGS-B o nlminb(uguale alle lme4versioni precedenti alla ver. 1). Per esempio:

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')))

tutto funziona bene (nessun avvertimento). Le domande interessanti sono:

  1. perché hai ricevuto questi avvertimenti per cominciare e
  2. perché quando hai usato non REML = TRUEhai ricevuto avvisi.

In breve, 1. hai ricevuto quegli avvisi perché hai definito durationsia un effetto fisso che una pendenza casuale per il fattore sitese season. Il modello ha effettivamente esaurito i gradi di libertà per stimare le correlazioni tra le pendenze e le intercettazioni definite. Se hai utilizzato un modello leggermente più semplice come:

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

non sperimenteresti problemi di convergenza. Questo modello stimerebbe efficacemente le intercettazioni casuali non correlate e le pendenze casuali per ciascuna season.

REML = FALSEXy=Xβ+Zγ+εKKX=0yKyZKZZ

Un'ultima nota è che non sono sicuro che abbia senso usare seasoncome effetto casuale per cominciare. Dopotutto ci sono solo tante stagioni, quindi potresti trattarle come effetti fissi.


A proposito, benvenuto nella community!
usεr11852 dice Reinstate Monic il

1
@ Syamkumar.R: Bene, sono felice di poterti aiutare. Se ritieni che questo risponda alla tua domanda, potresti considerare di accettare la risposta.
usεr11852 dice Reinstate Monic il

Grazie mille!! La terza variante - REML = FALSE, glmerControl(optimizer ='optimx', optCtrl=list(method='nlminb'))- risolto il problema di convergenza in glmer!
Curioso il

0

La domanda è statistica piuttosto che tecnica. In realtà, ho usato un modello a effetti casuali anziché uno a effetto fisso. Nessuno dei fattori, penso, dovrebbe essere trattato come fattore casuale poiché abbiamo bisogno di almeno 5 o 6 livelli o repliche per trattare un fattore come effetto casuale (vedi qui Qual è il numero minimo raccomandato di gruppi per un fattore di effetti casuali? ).

Il set di dati sopra contiene solo campioni / sito / stagione triplicati che non sono sufficienti per un modello a effetti casuali. Nel set di dati la durata, 4 giorni e 7 giorni, appartiene a due esperimenti paralleli separati eseguiti nello stesso tempo. Quindi sputare il set di dati per durata (4 giorni e 7 giorni) ed eseguire un'anova a 2 vie per ogni durata con stagione e siti poiché i fattori sarebbero sufficienti per modellare qui l'effetto (variabile di risposta). Il modello dovrebbe essere il seguente:

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

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

Grazie a Bodo Winter ( http://www.bodowinter.com/tutorial/bw_LME_tutorial2.pdf ) e @ usεr11852 che mi hanno aiutato a risolvere il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.