Saya menggunakan glmer
fungsi dari lme4
paket dalam R, dan saya menggunakan bobyqa
pengoptimal (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 glmer
dalam 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.dredge
MuMIn
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. VQUAD
muncul 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 VQUAD
menjadi> = 0 dan, mungkin, memahami bagaimana / kapan IPRINT
menjadi> 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.
src
direktori 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 ...Jawaban:
Untuk memahami nilai
VQUAD
, pertama-tama kita harus memahami beberapa variabel lain. Untungnya, ada komentar bagus tepat di bawah deklarasiSUBROUTINE BOBYQB
. Variabel yang menonjol adalah:GOPT
, gradien modelHQ
, Goni modelD
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 percobaanD
. Ini mengakumulasikan perubahan yang diprediksi diVQUAD
. 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: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,
VQUAD
memegang perubahan dalam fungsi objektif yang diprediksi oleh model. Jadi, jikaVQUAD
tidak negatif, itu buruk. Sekarang pemecah khusus ini dapat menggunakan perhitungan langkah alternatif (mungkin pencarian baris), yang manaNTRITS
masuk untuk bermain. Jadi logika di 430 mengatakan, "Jika iterasi terakhir menggunakan perhitungan langkah alternatif DAN model tidak memprediksi penurunan DANIPRINT
> 0, cetak pesan peringatan." Perhatikan bahwa pemecah akan berakhir terlepas dari nilaiIPRINT
.Omong-omong
IPRINT
, nilai itu diteruskanBOBYQA
oleh fungsi panggilan. Dalam hal ini, rutin R Anda adalah fungsi panggilan. Adaverbose
parameter untukglmer
- saya akan dime ke dolar yang nilai yang sama diteruskan keBOBYQA
. Coba aturverbose
ke 0 dan Anda mungkin tidak akan melihat peringatan. Tapi itu tidak akan mengubah apa yang terjadi di bawah tenda, tentu saja.sumber
?lme4::convergence
: singkat / lengkap evaluasi prosedur optimasi, yang terbaik adalah membandingkan hasil dari pengoptimal yang berbeda.