Saya mencoba menyesuaikan model hukum kekuasaan yang sederhana dengan kumpulan data yaitu sebagai berikut:
mydf
:
rev weeks
17906.4 1
5303.72 2
2700.58 3
1696.77 4
947.53 5
362.03 6
Tujuannya adalah untuk melewati saluran listrik dan menggunakannya untuk memprediksi rev
vlaues untuk minggu mendatang. Banyak penelitian telah membawa saya ke nls
fungsi, yang saya terapkan sebagai berikut.
newMod <- nls(rev ~ a*weeks^b, data=modeldf, start = list(a=1,b=1))
predict(newMod, newdata = data.frame(weeks=c(1,2,3,4,5,6,7,8,9,10)))
Meskipun ini berfungsi untuk lm
model, saya mendapatkan singular gradient
kesalahan, yang saya pahami terkait dengan nilai awal a
dan b
. Saya mencoba nilai yang berbeda, bahkan sampai sejauh ini untuk plot ini di Excel, lulus sendirian, mendapatkan persamaan, lalu menggunakan nilai dari persamaan, tetapi saya masih mendapatkan kesalahan. Saya melihat banyak jawaban seperti ini dan mencoba jawaban kedua (tidak bisa mengerti yang pertama), tetapi tidak membuahkan hasil.
Saya benar-benar dapat menggunakan bantuan di sini tentang cara menemukan nilai awal yang tepat. Atau sebagai alternatif, fungsi lain apa yang bisa saya gunakan sebagai ganti nls.
Jika Anda ingin membuat ulang mydf
dengan mudah:
mydf <- data.frame(rev=c(17906.4, 5303.72, 2700.58 ,1696.77 ,947.53 ,362.03), weeks=c(1,2,3,4,5,6))
sumber
Jawaban:
Ini adalah masalah umum dengan model kuadrat nonlinier; jika nilai awal Anda sangat jauh dari optimal, algoritme mungkin tidak menyatu, meskipun mungkin berperilaku baik di dekat optimal.
Jika Anda mulai dengan mengambil log dari kedua sisi dan cocok dengan model linier, Anda mendapatkan estimasi dan sebagai kemiringan dan intersep (9.947 dan -2.011) (edit: itu log natural)bcatatan( a ) b
Jika Anda menggunakannya untuk memandu nilai awal untuk dan semuanya tampaknya berfungsi dengan baik:bSebuah b
sumber
exp
log
Mencoba
Saya diminta sedikit memperluas jawaban ini. Masalah ini sangat sederhana, saya agak terkejut bahwa NSL gagal melakukannya. Namun masalah sebenarnya adalah dengan seluruh pendekatan R dan filosofi pemasangan model nonlinier. Dalam dunia nyata seseorang akan skala x untuk berbohong antara -1 dan 1 dan y dan y untuk berbohong antara 0 dan 1 (y = ax ^ b). Itu mungkin akan cukup untuk membuat nls bertemu. Tentu saja seperti yang ditunjukkan Glen, Anda dapat menggunakan model log-linear yang sesuai. Itu bergantung pada kenyataan bahwa ada transformasi sederhana yang linierisasi model. Itu sering tidak terjadi. Masalah dengan rutin R seperti nls adalah bahwa mereka tidak menawarkan dukungan untuk reparameterisasi model. Dalam hal ini reparameterisasi sederhana, hanya skala ulang / baru-baru ini x dan y. Namun setelah sesuai dengan model, pengguna akan memiliki parameter a dan b yang berbeda dari yang asli. Meskipun sederhana untuk menghitung yang asli dari ini, kesulitan lainnya adalah tidak begitu sederhana secara umum untuk mendapatkan estimasi standar deviasi untuk estimasi parameter ini. Ini dilakukan dengan metode delta yang melibatkan Hessian dari log-likelihood dan beberapa turunannya. Perangkat lunak estimasi parameter nonlinear harus memasok perhitungan ini secara otomatis, sehingga reparameterisasi model mudah didukung. Hal lain yang harus didukung oleh perangkat lunak adalah gagasan tentang fase. Anda dapat memikirkan untuk menyesuaikan model dengan versi Glen sebagai fase 1. Model "asli" sesuai pada tahap 2. kesulitan lainnya adalah tidak semudah itu secara umum untuk mendapatkan estimasi standar deviasi untuk estimasi parameter ini. Ini dilakukan dengan metode delta yang melibatkan Hessian dari log-likelihood dan beberapa turunannya. Perangkat lunak estimasi parameter nonlinear harus memasok perhitungan ini secara otomatis, sehingga reparameterisasi model mudah didukung. Hal lain yang harus didukung oleh perangkat lunak adalah gagasan tentang fase. Anda dapat memikirkan untuk menyesuaikan model dengan versi Glen sebagai fase 1. Model "asli" sesuai pada tahap 2. kesulitan lainnya adalah tidak semudah itu secara umum untuk mendapatkan estimasi standar deviasi untuk estimasi parameter ini. Ini dilakukan dengan metode delta yang melibatkan Hessian dari log-likelihood dan beberapa turunannya. Perangkat lunak estimasi parameter nonlinear harus memasok perhitungan ini secara otomatis, sehingga reparameterisasi model mudah didukung. Hal lain yang harus didukung oleh perangkat lunak adalah gagasan tentang fase. Anda dapat memikirkan untuk menyesuaikan model dengan versi Glen sebagai fase 1. Model "asli" sesuai pada tahap 2. Perangkat lunak estimasi parameter nonlinear harus memasok perhitungan ini secara otomatis, sehingga reparameterisasi model mudah didukung. Hal lain yang harus didukung oleh perangkat lunak adalah gagasan tentang fase. Anda dapat memikirkan untuk menyesuaikan model dengan versi Glen sebagai fase 1. Model "asli" sesuai pada tahap 2. Perangkat lunak estimasi parameter nonlinear harus memasok perhitungan ini secara otomatis, sehingga reparameterisasi model mudah didukung. Hal lain yang harus didukung oleh perangkat lunak adalah gagasan tentang fase. Anda dapat memikirkan untuk menyesuaikan model dengan versi Glen sebagai fase 1. Model "asli" sesuai pada tahap 2.
Saya cocok dengan model Anda dengan AD Model Builder yang mendukung fase secara alami. Pada fase pertama hanya diperkirakan. Ini membawa model Anda ke stadion baseball. Pada fase kedua a dan b diperkirakan mendapatkan solusinya. Pembuat Model AD secara otomatis menghitung standar deviasi untuk setiap fungsi parameter model melalui metode delta sehingga mendorong reparameterisasi model yang stabil.
sumber
Algoritma Levenberg-Marquardt dapat membantu:
sumber
Dalam pengalaman saya, cara yang baik untuk menemukan nilai awal untuk parameter model NLR adalah dengan menggunakan algoritma evolusi. Dari populasi awal (100) dari perkiraan acak (orang tua) di ruang pencarian pilih 20 terbaik (keturunan) dan gunakan ini untuk membantu menentukan pencarian dalam populasi yang berhasil. Ulangi sampai konvergensi. Tidak perlu gradien atau goni, hanya evaluasi SSE. Jika Anda tidak terlalu serakah ini sangat sering berhasil. Masalah yang sering orang miliki adalah bahwa mereka menggunakan pencarian lokal (Newton-Raphson) untuk melakukan pekerjaan pencarian global. Seperti biasa itu adalah masalah menggunakan alat yang tepat untuk pekerjaan yang dihadapi. Lebih masuk akal untuk menggunakan pencarian global EA untuk menemukan nilai awal untuk pencarian lokal Newton, dan kemudian biarkan ini berjalan ke minimum. Tetapi, seperti semua hal lainnya, iblis ada dalam detailnya.
sumber