Saya memiliki data dalam bentuk . Untuk estimasiβ1hinggaβ3saya menggunakan rumus dari makalah ini:John Fox - Regresi Nonlinear dan Kuadrat Terkecil Nonlinear Dalam makalah ini,β1diperkirakan dengan melihat data. Jika saya melakukan itu berfungsi dengan baik, bahkan jika saya hanya memiliki tiga poin. Dari situ saya bisa menghitung dua lainnya. Saya menguji parameter saya dengan nls () di R dan LevenbergMarquardt di C #. Model yang dikembalikan oleh mereka memuaskan.
maks ∗ 1.5
Pengukuran bisa terlihat seperti ini:
x = (40, 50, 60, 70), y = (1000, 950, 400, 200) -> mudah diperkirakan
x = (40, 50, 60, 70), y = (1000, 950, 800, 100) -> mudah diperkirakan
x = (40, 50, 60, 70), y = (500, 200, 100, 50) -> tidak mudah untuk diperkirakan
Saya kira saya bisa mencari tahu di mana saya berada di fungsi (di "bawah", di "atas", di lereng) dengan menghitung delta di poin yang diberikan dan menghitung batas atas tergantung pada itu. Adakah yang punya petunjuk untuk solusi yang lebih baik? Info tambahan: Jika tidak dapat dilakukan, lebih penting bagi saya bahwa pengukuran yang sesuai adalah sebaik mungkin dan saya menerima bahwa beberapa pengukuran tidak dapat cocok sama sekali.
(walaupun saya ingin implementasi dalam C # saya diposting di sini, saya tidak berpikir masalahnya tergantung pada bahasa)
pembaruan (Aplikasi ini):
x adalah nilai suhu di bawah pengukuran yang sesuai. Secara alami diberikan bahwa itu harus terlihat seperti kurva logistik dengan nilai y lebih tinggi pada suhu yang lebih rendah dan sebaliknya. Titik lebur sama dengan titik belok kurva, yang banyak berubah dengan perubahan kecil dari parameter model.
pembaruan (beberapa data dibuat dengan 7 titik data dan titik belok diketahui pada 60):
//first I made up some data without any noise and enough (13) points
double[] x17 = { 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90 };
double[] y17 = { 2000, 1920, 1820, 1700, 1500, 1280, 1000, 720, 500, 300, 180, 80, 0 };
//calculated inflection point: 59.642....
//Then I took three different parts of that data
(to simulate how much data I will have in the real world)
double[] x18 = { 30, 35, 40, 45, 50, 55, 60 };
double[] y18 = { 2000, 1920, 1820, 1700, 1500, 1280, 1000 };
//calculated inflection point: 59.263.... is ok!
double[] x19 = { 60, 65, 70, 75, 80, 85, 90 };
double[] y19 = { 1000, 720, 500, 300, 180, 80, 0 };
//calculated inflection point: 53.447.... to small!
double[] x20 = { 45, 50, 55, 60, 65, 70, 75 };
double[] y20 = { 1700, 1500, 1280, 1000, 720, 500, 300 };
//calculated inflection point: 59.868... almost perfect!
Pendekatan saya saat ini untuk estimasi batas atas adalah y0 * y0 / y1. Dengan cara ini saya berharap untuk memperhitungkan bahwa saya mungkin tidak selalu memiliki nilai mendekati maksimum.
pembaruan: Nilai x dan y tidak akan pernah negatif. x akan selalu {40, 45, 50, 55, 60, 65, 70} kecuali titik data hilang.
pembaruan: Saya melakukan banyak, banyak tes dengan data simulasi yang harus mudah dipasangkan (saya memilih titik data yang tepat pada kurva = tanpa noise) dan saya melihat bahwa itu berfungsi dengan baik, kecuali titik data pertama atau kedua (di mana x = 40 atau x = 45) tidak ada. Saya kira saya harus membuang pengukuran seperti itu dan pengguna harus hidup dengan itu.
sumber
Jawaban:
Saya bekerja pada masalah yang sama awal tahun ini. Solusi yang saya gunakan didasarkan pada makalah ini , yang menggunakan aljabar linier untuk menghilangkan , maksimum. Dengan cara ini, hasil untuk parameter yang tersisa, setelah ditentukan melalui beberapa prosedur (saya hanya meminimalkan permukaan kesalahan, sama seperti di koran), dapat digunakan untuk menyimpulkan pada akhirnya.β 1β1 β1
Secara intuitif, solusi ini bersandar pada premis bahwa semua kurva logistik dengan laju dan parameter lokasi yang sama memiliki kemiripan, sehingga pengaturan batas atas hanya berarti "merentangkan" kurva sigmoid ke maksimum yang sesuai.
sumber