Pertanyaan di atas mengatakan semuanya. Pada dasarnya pertanyaan saya adalah untuk fungsi pemasangan generik (bisa rumit semena-mena) yang akan nonlinier dalam parameter yang saya coba perkirakan, bagaimana cara memilih nilai awal untuk menginisialisasi fit? Saya mencoba melakukan kuadrat terkecil nonlinier. Apakah ada strategi atau metode? Apakah ini sudah dipelajari? Ada referensi? Apa pun selain menebak ad hoc? Khususnya, saat ini salah satu bentuk pemasangan yang saya kerjakan adalah bentuk Gaussian plus linear dengan lima parameter yang saya coba perkirakan, seperti
di mana (data absis) dan ( data) yang berarti bahwa dalam ruang log-log data saya terlihat seperti garis lurus ditambah benjolan yang saya aproksimasi oleh seorang Gaussian. Saya tidak punya teori, tidak ada yang membimbing saya tentang bagaimana menginisialisasi fit nonlinier kecuali mungkin grafik dan bola mata seperti kemiringan garis dan apa pusat / lebar benjolan itu. Tapi saya punya lebih dari seratus ini cocok untuk melakukannya daripada membuat grafik dan menebak, saya lebih suka beberapa pendekatan yang dapat otomatis. y = log 10
Saya tidak dapat menemukan referensi, di perpustakaan atau online. Satu-satunya hal yang dapat saya pikirkan adalah memilih nilai awal secara acak. MATLAB menawarkan untuk memilih nilai secara acak dari [0,1] yang didistribusikan secara seragam. Jadi dengan setiap set data, saya menjalankan kecocokan yang diinisialisasi secara acak ribuan kali dan kemudian memilih yang dengan tertinggi ? Ada ide lain (lebih baik)?
Adendum # 1
Pertama, berikut adalah beberapa representasi visual dari set data hanya untuk menunjukkan kepada kalian data seperti apa yang saya bicarakan. Saya memposting kedua data dalam bentuk aslinya tanpa transformasi apa pun dan kemudian representasi visualnya dalam ruang log-log saat itu mengklarifikasi beberapa fitur data sambil mendistorsi yang lain. Saya memposting sampel data baik dan buruk.
Masing-masing dari enam panel di masing-masing gambar menunjukkan empat set data yang disusun bersama merah, hijau, biru, dan cyan dan setiap set data memiliki tepat 20 titik data. Saya mencoba mencocokkan masing-masing dengan garis lurus ditambah gaussian karena benjolan yang terlihat dalam data.
Angka pertama adalah beberapa data yang baik. Gambar kedua adalah plot log-log dari data baik yang sama dari gambar satu. Angka ketiga adalah beberapa data buruk. Angka keempat adalah plot log-log dari gambar tiga. Ada lebih banyak data, ini hanya dua himpunan bagian. Sebagian besar data (sekitar 3/4) bagus, mirip dengan data bagus yang saya tunjukkan di sini.
Sekarang beberapa komentar, mohon bersabar karena ini mungkin akan lama tapi saya pikir semua detail ini diperlukan. Saya akan berusaha sesingkat mungkin.
Saya awalnya mengharapkan hukum kekuatan sederhana (artinya garis lurus dalam ruang log-log). Ketika saya memplot semuanya dalam ruang log-log, saya melihat benjolan tak terduga di sekitar 4,8 mHz. Benjolan itu diselidiki secara menyeluruh dan ditemukan dalam karya orang lain juga sehingga bukan kita yang kacau. Secara fisik ada dan karya-karya lain yang diterbitkan menyebutkan ini juga. Jadi saya baru saja menambahkan istilah gaussian ke bentuk linear saya. Perhatikan bahwa penyesuaian ini harus dilakukan dalam ruang log-log (maka dua pertanyaan saya termasuk yang satu ini).
Sekarang, setelah membaca jawaban oleh Stumpy Joe Pete untuk pertanyaan saya yang lain (tidak terkait dengan data ini sama sekali) dan membaca ini dan ini dan referensi di dalamnya (barang-barang oleh Clauset), saya menyadari bahwa saya tidak boleh masuk log-log ruang. Jadi sekarang saya ingin melakukan segalanya di ruang pra-transformasi.
Pertanyaan 1: Melihat data yang baik, saya masih berpikir bahwa linear plus gaussian dalam ruang pra-transformasi masih merupakan bentuk yang baik. Saya ingin mendengar dari orang lain yang memiliki lebih banyak data-pengalaman apa yang mereka pikirkan. Apakah gaussian + linear masuk akal? Haruskah saya melakukan gaussian saja? Atau bentuk yang sama sekali berbeda?
Pertanyaan 2: Apa pun jawaban untuk pertanyaan 1, saya masih akan membutuhkan (kemungkinan besar) kuadrat terkecil non-linear sehingga masih perlu bantuan dengan inisialisasi.
Data di mana kami melihat dua set, kami sangat suka untuk menangkap benjolan pertama di sekitar 4-5 mHz. Jadi saya tidak ingin menambahkan lebih banyak istilah gaussian dan istilah gaussian kami harus dipusatkan pada bump pertama yang hampir selalu merupakan bump yang lebih besar. Kami ingin "lebih akurat" antara 0.8mHz dan sekitar 5mHz. Kami tidak terlalu peduli untuk frekuensi yang lebih tinggi tetapi juga tidak ingin mengabaikannya. Jadi mungkin semacam penimbangan? Atau B dapat diinisialisasi sekitar 4.8mHz selalu?
Data absis adalah frekuensi dalam satuan milihertz, ditunjukkan oleh . Data ordinat adalah koefisien kita komputasi, melambangkannya dengan . Jadi tidak ada transformasi log, dan bentuknyaL
- adalah frekuensi, selalu positif.
- adalah koefisien positif. Jadi kami bekerja di kuadran pertama.
- A > 0 A , amplitudo harus selalu positif juga saya pikir karena kita hanya berurusan dengan gundukan. Ketika saya melihat data, saya selalu melihat puncak dan tidak ada lembah. Sepertinya di semua data ada beberapa gundukan pada frekuensi yang lebih tinggi. Benjolan pertama selalu jauh lebih besar dari yang lain. Dalam data yang baik, gundukan sekunder sangat lemah tetapi dalam data yang buruk (panel 2 dan 5 misalnya), gundukan sekunder kuat. Jadi sebenarnya kita tidak memiliki lembah, melainkan dua gundukan. Artinya amplitudo . Dan karena kami sangat peduli dengan puncak pertama, semakin banyak alasan untuk menjadi positif.
- adalah pusat dari benjolan dan kami selalu menginginkannya di benjolan besar sekitar 4-5mHz. Dalam rentang frekuensi yang telah kami selesaikan, frekuensi ini hampir selalu muncul pada 4,8 MHz.
- C - C adalah lebar benjolan. Saya membayangkan simetris di sekitar nol yang berarti akan memiliki efek yang sama dengan karena kuadrat. Jadi kami tidak peduli apa nilainya. Katakanlah kita lebih suka itu positif.
- adalah kemiringan garis, sepertinya itu bisa sedikit negatif sehingga tidak memberlakukan batasan apa pun padanya. Kemiringan itu menarik dengan sendirinya sehingga alih-alih menegakkan batasan apa pun, kami hanya ingin melihat seperti apa jadinya. Apakah positif atau negatif? Seberapa besar / kecil? dan seterusnya.
- L E L f = 0 adalah (hampir) -intercept. Hal yang halus di sini adalah bahwa karena istilah gaussian, tidak cukup dengan -intercept. Intep sebenarnya (jika kita mengekstrapolasi ke ) adalah
Jadi satu-satunya batasan di sini adalah intersepsi juga harus positif. Pencegatan menjadi nol, saya tidak tahu apa artinya itu. Tetapi negatif tampaknya tidak masuk akal. Saya kira di sini kita dapat memungkinkan untuk menjadi sedikit negatif dengan besarnya kecil jika perlu. Alasan dan intersep penting di sini, tetapi beberapa rekan kami sebenarnya tertarik pada ekstrapolasi juga. Frekuensi minimum yang kami miliki adalah 0.8mHz dan mereka ingin memperkirakan antara 0 dan 0.8mHz. Gagasan naif saya adalah menggunakan fit untuk turun sampai .E f = 0
Saya tahu ekstrapolasi lebih sulit / lebih berbahaya daripada interpolasi tetapi menggunakan garis lurus plus gaussian (berharap itu meluruh cukup cepat) tampaknya masuk akal bagi saya. Semacam splines kubik alami seperti dengan kondisi batas alami, kemiringan di titik akhir kiri, cukup rentangkan garis dan lihat di mana ia melintasi sumbuJika tidak negatif maka gunakan garis itu untuk ekstrapolasi.
Pertanyaan 3: Menurut Anda apa yang mengekstrapolasi dengan cara ini dalam kasus ini? Ada pro / kontra? Ada ide lain untuk ekstrapolasi? Sekali lagi kami hanya peduli tentang frekuensi yang lebih rendah sehingga memperkirakan antara 0 dan 1mHz ... kadang-kadang frekuensi sangat sangat kecil, mendekati nol. Saya tahu posting ini sudah penuh. Saya mengajukan pertanyaan ini di sini karena jawabannya mungkin terkait tetapi jika kalian lebih suka saya dapat memisahkan pertanyaan ini dan bertanya yang lain nanti.
Terakhir, berikut adalah dua set data sampel berdasarkan permintaan.
0.813010000000000 0.091178000000000 0.012728000000000
1.626000000000000 0.103120000000000 0.019204000000000
2.439000000000000 0.114060000000000 0.063494000000000
3.252000000000000 0.123130000000000 0.071107000000000
4.065000000000000 0.128540000000000 0.073293000000000
4.878000000000000 0.137040000000000 0.074329000000000
5.691100000000000 0.124660000000000 0.071992000000000
6.504099999999999 0.104480000000000 0.071463000000000
7.317100000000000 0.088040000000000 0.070336000000000
8.130099999999999 0.080532000000000 0.036453000000000
8.943100000000001 0.070902000000000 0.024649000000000
9.756100000000000 0.061444000000000 0.024397000000000
10.569000000000001 0.056583000000000 0.025222000000000
11.382000000000000 0.052836000000000 0.024576000000000
12.194999999999999 0.048727000000000 0.026598000000000
13.008000000000001 0.045870000000000 0.029321000000000
13.821000000000000 0.041454000000000 0.067300000000000
14.633999999999999 0.039596000000000 0.081800000000000
15.447000000000001 0.038365000000000 0.076443000000000
16.260000000000002 0.036425000000000 0.075912000000000
Kolom pertama adalah frekuensi dalam mHz, identik di setiap set data tunggal. Kolom kedua adalah kumpulan data yang baik (data yang baik gambar satu dan dua, panel 5, penanda merah) dan kolom ketiga adalah kumpulan data yang buruk (data angka tiga dan empat yang buruk, panel 5, penanda merah).
Semoga ini cukup untuk merangsang beberapa diskusi yang lebih tercerahkan. Terima kasih semuanya.
sumber
Jawaban:
Jika ada strategi yang baik dan umum - strategi yang selalu berhasil - itu sudah akan diterapkan di setiap program kuadrat terkecil nonlinear dan nilai awal akan menjadi masalah.
Untuk banyak masalah khusus atau keluarga masalah, beberapa pendekatan yang bagus untuk memulai nilai ada; beberapa paket dilengkapi dengan perhitungan nilai awal yang baik untuk model nonlinear tertentu atau dengan pendekatan yang lebih umum yang sering berhasil tetapi mungkin harus dibantu dengan fungsi yang lebih spesifik atau input langsung dari nilai awal.
Menjelajahi ruang diperlukan dalam beberapa situasi tetapi saya pikir situasi Anda cenderung sedemikian rupa sehingga strategi yang lebih spesifik kemungkinan akan bermanfaat - tetapi untuk merancang yang bagus cukup banyak membutuhkan banyak pengetahuan domain yang tidak mungkin kami miliki.
Beberapa data sampel akan membantu - kasus khusus dan yang sulit, jika Anda mampu.
Sunting: Berikut adalah contoh bagaimana Anda dapat melakukannya dengan cukup baik jika masalahnya tidak terlalu berisik:
Berikut adalah beberapa data yang dihasilkan dari model Anda (nilai populasi adalah A = 1,9947, B = 10, C = 2,828, D = 0,09, E = 5):
Nilai awal yang dapat saya perkirakan adalah
(As = 1.658, Bs = 10.001, Cs = 3.053, Ds = 0.0881, Es = 5.026)
Kesesuaian model awal tersebut terlihat seperti ini:
Langkah-langkahnya adalah:
Dalam hal ini, nilai-nilai sangat cocok untuk memulai fit nonlinier.
Saya menulis ini sebagai
R
kode tetapi hal yang sama dapat dilakukan di MATLAB.Saya pikir hal-hal yang lebih baik daripada ini mungkin.
Jika datanya sangat bising, ini tidak akan berfungsi sama sekali.
Sunting2: Ini adalah kode yang saya gunakan di R, jika ada yang tertarik:
.
sumber
Ada pendekatan umum untuk menyesuaikan model nonlinear semacam ini. Ini melibatkan reparameterisasi parameter linier dengan nilai-nilai variabel dependen di katakanlah pertama, nilai frekuensi terakhir dan titik yang baik di tengah mengatakan titik ke-6. maka Anda dapat menahan parameter ini tetap dan menyelesaikan parameter nonlinear pada fase pertama minimisasi dan kemudian meminimalkan keseluruhan 5 parameter.
Schnute dan saya menemukan ini sekitar tahun 1982 ketika memasang model pertumbuhan untuk ikan.
http://www.nrcresearchpress.com/doi/abs/10.1139/f80-172
Namun tidak perlu membaca makalah ini. Karena fakta bahwa parameternya linier, Anda hanya perlu mengatur dan menyelesaikan sistem persamaan linear 3x3 untuk menggunakan parameterisasi model yang stabil.
Untuk kasus Anda dengan data yang buruk, itu cukup mudah dan perkiraan parameter (biasanya) adalah:
sumber
Jika Anda harus melakukan ini berkali-kali maka saya akan menyarankan Anda menggunakan Algoritma Evolusi pada fungsi SSE sebagai front-end untuk memberikan nilai awal.
Di sisi lain Anda bisa menggunakan GEOGEBRA untuk membuat fungsi menggunakan slider untuk parameter dan bermain dengannya untuk mendapatkan nilai awal.
ATAU nilai awal dari data dapat diperkirakan dengan observasi.
sumber
Untuk nilai awal Anda bisa melakukan kuadrat terkecil biasa. Kemiringan dan intersepnya akan menjadi nilai awal untuk D dan E. Residu terbesar akan menjadi nilai awal untuk A. Posisi residu terbesar akan menjadi nilai awal untuk B. Mungkin orang lain dapat menyarankan nilai awal untuk sigma.
Namun, kuadrat terkecil non-linear tanpa menurunkan segala macam persamaan mekanistik dari pengetahuan subjek adalah bisnis yang berisiko, dan melakukan banyak kecocokan terpisah membuat hal-hal menjadi semakin dipertanyakan. Apakah ada pengetahuan subjek di balik persamaan yang Anda ajukan? Apakah ada variabel independen lain yang berhubungan dengan perbedaan antara 100 atau lebih cocok secara terpisah? Mungkin membantu jika Anda dapat menggabungkan perbedaan-perbedaan itu ke dalam satu persamaan yang akan cocok dengan semua data sekaligus.
sumber