Lmer () içindeki “Model yakınsalamadı” uyarısı


21

Aşağıdaki veri kümesiyle, yanıtın (etki) siteler, sezon, süre ve etkileşimleriyle ilgili olarak değişip değişmediğini görmek istedim. İstatistiklerle ilgili bazı çevrimiçi forumlar, Doğrusal Karışık Etkiler Modelleri ile devam etmemi önerdi, ancak sorun şu ki, her istasyonda çoğaltmalar rastgele seçildiğinden, birbirini izleyen mevsimlerde tam olarak aynı noktadan örnek alma şansım yok (örneğin, post-muson s1'in repl-1'i muson ile aynı olmayabilir). Aynı konuyu mevsimlerde tekrar tekrar ölçtüğünüz klinik denemelerin (iç denek tasarımı ile) aksine. Ancak, siteleri ve sezonu rastgele bir faktör olarak değerlendirdiğimde aşağıdaki komutları çalıştırdım ve bir uyarı mesajı aldım:

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

Birisi sorunu çözmeme yardımcı olabilir mi? Kodlar aşağıda verilmiştir:

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. Düzenleme için teşekkürler. Aslında, yukarıdaki gibi r kodlarını nasıl ekleyeceğimi bilmiyorum
Syamkumar.

Yanıtlar:


48

Başarısız yakınsama hakkında uyarı almama anlamında karşılaştığınız sorunu "çözmek" oldukça basittir: varsayılan BOBYQA optimizasyonunu kullanmazsınız, bunun yerine önceki sürümlerde varsayılan olarak kullanılan Nelder-Mead optimizasyon rutinini kullanmayı tercih edersiniz 1.0.x. Veya paketi optimxdoğrudan bir L-BFGS-B rutini veya nlminb( lme4önceki sürümlerle aynı 1) yapabilmeniz için yüklersiniz . Örneğin:

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

tüm iyi çalışır (uyarı yok). İlginç sorular:

  1. neden başlamak için bu uyarıları alıyorsunuz ve
  2. neden kullandığınızda REML = TRUEhiç uyarı almıyorsunuz.

Eğer tanımlı çünkü öz, 1. o uyarıları alınan durationfaktör için sabit bir etkisi yanı sıra rastgele eğim hem sitesde sıra season. Model, eğimler ve tanımladığınız kesişmeler arasındaki korelasyonları tahmin etmek için serbestlik derecelerinden etkili bir şekilde çıktı. Eğer marjinal olarak daha basit bir model kullandıysanız:

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

yakınsama sorunu yaşamayacaksınız. Bu model, her biri için ilişkisiz rastgele kesişimleri ve rastgele eğimleri etkili bir şekilde tahmin edecektir season.

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

Son bir not, seasonbaşlamak için rastgele bir efekt olarak kullanmanın mantıklı olup olmadığından emin değilim . Sonuçta sadece çok mevsim var, bu yüzden onlara sabit etkiler olarak da davranabilirsiniz.


BTW, topluluğa hoş geldiniz!
usεr11852 diyor Reinstate Monic

1
@ Syamkumar.R: Harika, yardım edebileceğim için mutluyum. Bunun sorunuzu cevapladığını düşünüyorsanız yanıtı kabul etmeyi düşünebilirsiniz.
usεr11852 diyor Reinstate Monic

çok teşekkür ederim!! 3. varyant - REML = FALSE, glmerControl(optimizer ='optimx', optCtrl=list(method='nlminb'))- aslında yakınsama sorunu çözüldü glmer!
Meraklı

0

Soru teknik olmaktan ziyade istatistikseldir. Aslında, sabit bir etki yerine rastgele bir etki modeli kullandım.Bence faktörlerden hiçbiri, bir faktörü rastgele etki olarak tedavi etmek için en az 5 veya 6 seviyeye veya replikatlara ihtiyacımız olduğu için rastgele faktör olarak ele alınmamalıdır (bkz. burada Rastgele etkiler faktörü için önerilen minimum grup sayısı nedir? ).

Yukarıdaki veri seti, rastgele bir etki modeli için yetersiz olan sadece üç örnek / saha / mevsim içerir. Veri setinde, 4 gün ve 7 gün, aynı zamanda yürütülen iki ayrı paralel deneylere aittir. Dolayısıyla, veri setini süreye göre (4 gün ve 7 gün) tükürmek ve mevsim ve siteler ile her süre için 2 yönlü bir anova yapmak, faktörler burada etkiyi (yanıt değişkeni) modellemek için yeterli olacaktır. Model aşağıdaki gibi olmalıdır:

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

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

Bodo Winter ( http://www.bodowinter.com/tutorial/bw_LME_tutorial2.pdf ) ve sorunu çözmeme yardımcı olan @ usεr11852 sayesinde.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.