Peringatan "Model gagal berkumpul" di lmer ()


21

Dengan dataset berikut, saya ingin melihat apakah respons (efek) berubah sehubungan dengan situs, musim, durasi, dan interaksinya. Beberapa forum online tentang statistik menyarankan saya untuk melanjutkan dengan Linear Mixed-Effects Model, tetapi masalahnya adalah karena replikat diacak di setiap stasiun, saya memiliki sedikit kesempatan untuk mengumpulkan sampel dari tempat yang persis sama di musim berturut-turut (misalnya, repl-1 dari s1 post-monsoon mungkin tidak sama dengan monsoon). Ini tidak seperti uji klinis (dengan desain dalam-subjek) di mana Anda mengukur subjek yang sama berulang kali selama musim. Namun, dengan mempertimbangkan situs dan musim sebagai faktor acak, saya menjalankan perintah berikut dan menerima pesan peringatan:

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

Adakah yang bisa membantu saya menyelesaikan masalah ini? Kode diberikan di bawah ini:

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. Terima kasih atas hasil editnya. Sebenarnya, saya tidak tahu bagaimana memasukkan kode r seperti di atas
Syamkumar.

Jawaban:


47

"Memecahkan" masalah yang Anda alami dalam arti tidak menerima peringatan tentang konvergensi yang gagal agak mudah: Anda tidak menggunakan pengoptimal BOBYQA default tetapi Anda memilih untuk menggunakan rutin optimasi Nelder-Mead yang digunakan secara default pada 1.0.xversi sebelumnya sebelumnya. Atau Anda menginstal paket optimxsehingga Anda dapat langsung melakukan rutinitas L-BFGS-B atau nlminb(sama seperti lme4versi sebelum ver. 1). Sebagai contoh:

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

semua berfungsi dengan baik (tidak ada peringatan). Pertanyaan menarik adalah:

  1. mengapa Anda mendapat peringatan ini untuk memulai dan
  2. mengapa ketika Anda menggunakan REML = TRUEAnda tidak mendapat peringatan.

Ringkas, 1. Anda menerima peringatan-peringatan itu karena Anda didefinisikan durationbaik sebagai efek tetap serta kemiringan acak untuk faktor sitesserta season. Model ini secara efektif kehabisan derajat kebebasan untuk memperkirakan korelasi antara lereng dan intersep yang Anda tetapkan. Jika Anda menggunakan model yang sedikit lebih sederhana seperti:

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

Anda tidak akan mengalami masalah konvergensi. Model ini akan secara efektif memperkirakan intersepsi acak tidak berkorelasi dan lereng acak untuk masing-masing season.

Selain itu, 2. saat Anda menentukan REML = FALSEAnda menggunakan estimasi Kemungkinan Maksimum alih-alih yang Maksimal Kemungkinan Maksimal. Perkiraan REML mencoba untuk "faktor keluar" pengaruh efek tetap sebelum pindah ke menemukan struktur varians efek acak optimal (lihat utas " Apa itu" kemungkinan maksimum dibatasi "dan kapan harus digunakan? " Untuk lebih rinci informasi tentang masalah ini). Secara komputasional prosedur ini pada dasarnya dilakukan dengan mengalikan kedua bagian dari persamaan model LME asli dengan matriks sedemikian rupa sehingga , yaitu Anda mengubah asli ke serta ituXy=Xβ+Zγ+ϵKKX=0yKyZ ke . Saya sangat curiga bahwa ini mempengaruhi nomor kondisi dari matriks desain dan dengan demikian membantu Anda keluar dari angka-angka keras yang Anda temukan sendiri.KZZ

Catatan terakhir adalah bahwa saya tidak yakin apakah itu masuk akal untuk digunakan seasonsebagai efek acak untuk memulai. Bagaimanapun, hanya ada begitu banyak musim sehingga Anda mungkin memperlakukannya sebagai efek tetap.


BTW, selamat datang di komunitas!
usεr11852 mengatakan Reinstate Monic

1
@ Syamkumar.R: Keren, saya senang bisa membantu. Jika Anda yakin ini menjawab pertanyaan Anda, Anda bisa mempertimbangkan menerima jawabannya.
usεr11852 mengatakan Reinstate Monic

Terima kasih banyak!! Varian ke-3 - REML = FALSE, glmerControl(optimizer ='optimx', optCtrl=list(method='nlminb'))- benar-benar memecahkan masalah konvergensi glmer!
Penasaran

0

Pertanyaannya adalah statistik daripada teknis. Sebenarnya, saya menggunakan model efek acak alih-alih efek tetap. Tidak satu pun faktor, saya pikir, harus diperlakukan sebagai faktor acak karena kita memerlukan setidaknya 5 atau 6 level atau replikasi untuk memperlakukan faktor sebagai efek acak (lihat di sini Berapakah jumlah minimum kelompok yang disarankan untuk faktor efek acak? ).

Dataset di atas hanya berisi sampel rangkap tiga / situs / musim yang tidak mencukupi untuk model efek acak. Dalam data yang menetapkan durasi, 4 hari dan 7 hari milik dua percobaan paralel terpisah yang dijalankan di bawah waktu yang sama. Jadi, letakkan data yang ditetapkan berdasarkan durasi (4 hari dan 7 hari) dan lakukan anova 2 arah untuk setiap durasi dengan musim dan lokasi karena faktor-faktor akan cukup untuk memodelkan efek (variabel respon) di sini. Model harus sebagai berikut:

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

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

Terima kasih kepada Bodo Winter ( http://www.bodowinter.com/tutorial/bw_LME_tutorial2.pdf ) dan @ usεr11852 yang membantu saya memecahkan masalah ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.