Arti peringatan konvergensi dalam glmer

16

Saya menggunakan glmerfungsi dari lme4paket dalam R, dan saya menggunakan bobyqapengoptimal (yaitu default dalam kasus saya). Saya mendapat peringatan, dan saya ingin tahu apa artinya.

Warning message:
In optwrap(optimizer, devfun, start, rho$lower, control = control,  :
  convergence code 3 from bobyqa: bobyqa -- a trust region step failed to reduce q

Saya mencari "langkah wilayah kepercayaan gagal mengurangi q." Menemukan beberapa informasi dalam paket minqa , yang mengatakan "Konsultasikan Powell untuk penjelasan." Saya melakukannya (Anda juga bisa, jika Anda mau! Lihat referensi dan tautan ke mereka di bawah), tetapi saya gagal memahaminya. Bahkan, saya gagal menemukan apa pun tentang mengurangi q.

MJD Powell (2007) "Perkembangan NEWUOA untuk minimisasi tanpa kendala tanpa turunan", Universitas Cambridge, Departemen Matematika Terapan dan Fisika Teoritis, Kelompok Analisis Numerik, Laporan NA2007 / 05, http://www.damtp.cam.ac.uk/ user / na / NA_papers / NA2007_05.pdf .

MJD Powell (2009), "Algoritma BOBYQA untuk optimasi terbatas terikat tanpa turunan", Laporan No. DAMTP 2009 / NA06, Pusat Ilmu Matematika, University of Cambridge, Inggris. http://www.damtp.cam.ac.uk/user/na/NA_papers/NA2009_06.pdf .

Ps Saya tahu saya bisa mengubah pengoptimal, dan saya akan melihat apakah saya bisa mendapatkan output tanpa peringatan atau kesalahan. Saya juga akan memeriksa gradien dan Goni jika saya bisa, sesuai komentar / jawaban oleh Ben Bolker . Saya menggunakan dari glmerdalam dan saya tidak yakin apakah jawaban Ben akan bekerja tanpa mengutak-atik tambahan, tapi saya akan mengerjakannya begitu komputer saya menyelesaikan apa yang dilakukannya, saya ngelantur.dredgeMuMIn

Memperbarui

Sesuai komentar Dr. Bolker di bawah ini, saya mulai mencari melalui kode FORTRAN ( Ini adalah kode untuk siapa saja yang tertarik mencari tetapi tidak mengunduhnya ). "430" muncul di bagian bobyqb.f dari kode. Cukup cari "430" atau "kurangi Q" untuk menemukan kode yang relevan.

Ini adalah pertemuan pertama saya dengan kode FORTRAN, tetapi saya pikir kode mengatakan bahwa jika kondisi berikut dipenuhi, menghasilkan peringatan: NTRITS> 0, VQUAD> = 0, IPRINT> 0. "NTRIT integer diatur ke nomor" wilayah kepercayaan " iterasi yang telah terjadi sejak iterasi "alternatif" terakhir. VQUADmuncul beberapa kali, dan saya belum jelas tentang signifikansinya karena nilainya tampaknya bergantung pada berbagai variabel lain, nilai-nilai yang terkadang tergantung pada variabel lain. Dari bobyqa.f: "Nilai IPRINT harus set ke 0, 1, 2 atau 3, yang mengontrol jumlah pencetakan. Secara khusus, tidak ada output jika IPRINT = 0 dan ada output hanya pada pengembalian jika IPRINT = 1. ".

Jadi, tampaknya tugasnya adalah untuk mengetahui pentingnya VQUADmenjadi> = 0 dan, mungkin, memahami bagaimana / kapan IPRINTmenjadi> 0. Saya harus kembali ke koran untuk melihat-lihat, tetapi matematika, atau di setidaknya ekspresi simbolisnya, sedikit penghalang bagi saya. Kecuali, seseorang tahu tentang algoritma atau memiliki keinginan untuk mempelajarinya, saya pikir saya harus meningkatkan pemahaman saya tentang peringatan dengan bolak-balik di antara makalah, kode, dan internet sampai saya mengerti apa itu. cara.

Jota
sumber
3
Saya pikir pertanyaan ini mungkin pada-topik untuk CV b / c sepertinya tentang memahami ide-ide daripada membantu dengan b / se.
gung - Reinstate Monica
Saya tidak yakin saya punya banyak saran dalam hal ini di luar akan sedikit demi sedikit melalui surat-surat dan kode FORTRAN (yang termasuk dalam srcdirektori cran.r-project.org/src/contrib/minqa_1. 2.3.tar.gz ) dan melihat dengan tepat apa yang terjadi ketika kesalahan ini (kode kesalahan 430 dalam kode) terpicu ...
Ben Bolker
1
Cepat membaca sekilas kertas saya pikir peringatan menunjukkan bahwa pengoptimal tidak dapat menemukan arah di mana perkiraan kuadratik, Q, ke fungsi yang Anda ingin meminimalkan, F, berkurang. Artinya, pengoptimal berada pada titik yang kemungkinan besar tidak optimal tetapi tidak tahu apa yang harus dilakukan untuk meningkatkan tujuan. Karena itu, macet.
Sven
1
yang mana dari dua makalah yang Anda selipkan, dan kira-kira di mana Anda menemukan info ini? (Saya telah membaca skim juga tetapi tidak dapat membuat korespondensi antara kertas & kode dengan mudah ...)
Ben Bolker
Saya membaca koran BOBYQA. Saya pergi ke babak pertama dalam waktu sekitar 5 menit untuk mendapatkan gambaran luas tentang apa yang akan mereka lakukan dan apa yang Q. Tidak dapat benar-benar menunjuk ke halaman tertentu.
Sven

Jawaban:

13

f(x)xkk

  • Δk
  • f(x)x=xkQ(x)
  • skQk(xk+sk)||sk||Δk
  • skxk+1=xk+sk
  • Jika tidak, perbaiki model Anda dan coba lagi

sk

Untuk memahami nilai VQUAD, pertama-tama kita harus memahami beberapa variabel lain. Untungnya, ada komentar bagus tepat di bawah deklarasi SUBROUTINE BOBYQB. Variabel yang menonjol adalah:

  • GOPT, gradien model
  • HQ, Goni model
  • Dsk

Mulai beberapa baris di atas 410, Anda akan melihat DO 410 J=1,N. Ini memulai for-loop (dan nested for-loop) yang mengevaluasi perubahan yang diprediksi oleh model menggunakan langkah percobaan D. Ini mengakumulasikan perubahan yang diprediksi di VQUAD. Bagian pertama dari for-loop mengevaluasi persyaratan orde pertama dan nested for-loop mengevaluasi persyaratan orde kedua. Mungkin akan lebih mudah dibaca jika loop diindentasi, seperti ini:

    DO 410 J=1,N
        VQUAD=VQUAD+D(J)*GOPT(J)
        DO 410 I=1,J
            IH=IH+1
            TEMP=D(I)*D(J)
            IF (I .EQ. J) TEMP=HALF*TEMP
410         VQUAD=VQUAD+HQ(IH)*TEMP

Ada lagi for-loop setelah ini untuk memasukkan parameter lain ke dalam model. Harus saya akui, saya tidak sepenuhnya memahami hal ini - tebakan terbaik saya adalah bahwa ini khusus untuk bagaimana mereka membangun model.

Pada akhir semua ini, VQUADmemegang perubahan dalam fungsi objektif yang diprediksi oleh model. Jadi, jika VQUADtidak negatif, itu buruk. Sekarang pemecah khusus ini dapat menggunakan perhitungan langkah alternatif (mungkin pencarian baris), yang mana NTRITSmasuk untuk bermain. Jadi logika di 430 mengatakan, "Jika iterasi terakhir menggunakan perhitungan langkah alternatif DAN model tidak memprediksi penurunan DAN IPRINT> 0, cetak pesan peringatan." Perhatikan bahwa pemecah akan berakhir terlepas dari nilai IPRINT.

Omong-omong IPRINT, nilai itu diteruskan BOBYQAoleh fungsi panggilan. Dalam hal ini, rutin R Anda adalah fungsi panggilan. Ada verboseparameter untuk glmer- saya akan dime ke dolar yang nilai yang sama diteruskan ke BOBYQA. Coba atur verboseke 0 dan Anda mungkin tidak akan melihat peringatan. Tapi itu tidak akan mengubah apa yang terjadi di bawah tenda, tentu saja.

Bill Woessner
sumber
1
ini sangat membantu; Saya tidak berpikir saya akan melakukan yang lebih baik, memberikan hadiah ...
Ben Bolker
@BenBolker. Jadi haruskah saya khawatir tentang apa yang terjadi di sini, atau ini benar-benar hanya gangguan dalam kode? (Dengan kata lain, apakah peringatan ini berarti hasil saya tidak valid ??)
theforestecologist
1
saran umum dalam hal ini adalah apa yang dinyatakan dalam ?lme4::convergence: singkat / lengkap evaluasi prosedur optimasi, yang terbaik adalah membandingkan hasil dari pengoptimal yang berbeda.
Ben Bolker