Strategi untuk pemasangan fungsi yang sangat tidak linier

12

Untuk menganalisis data dari percobaan biofisika, saya saat ini mencoba melakukan kurva fitting dengan model yang sangat non-linear. Fungsi model pada dasarnya terlihat seperti:

y=ax+bx1/2

Di sini, khususnya nilai sangat menarik.b

Plot untuk fungsi ini:

Plot fungsi

(Perhatikan bahwa fungsi model didasarkan pada deskripsi matematis menyeluruh dari sistem, dan tampaknya bekerja sangat baik --- hanya saja pencocokan otomatis rumit).

Tentu saja, fungsi model bermasalah: strategi pas yang saya coba sejauh ini, gagal karena asimtot yang tajam pada , terutama dengan data yang bising.x=0

Pemahaman saya tentang masalah di sini adalah bahwa fitting kuadrat-sederhana (saya telah bermain dengan regresi linier dan non-linear di MATLAB; kebanyakan Levenberg-Marquardt) sangat sensitif terhadap asimtot vertikal, karena kesalahan kecil dalam x sangat diperkuat. .

Adakah yang bisa mengarahkan saya ke strategi yang pas yang bisa mengatasi ini?

Saya memiliki pengetahuan dasar tentang statistik, tetapi itu masih sangat terbatas. Saya akan bersemangat untuk belajar, kalau saja saya tahu harus mulai dari mana :)

Terima kasih banyak atas saran Anda!

Edit Mohon maaf untuk lupa menyebutkan kesalahannya. Satu-satunya kebisingan signifikan dalam , dan itu aditif.x

Sunting 2 Beberapa informasi tambahan tentang latar belakang pertanyaan ini. Grafik di atas memodelkan perilaku peregangan polimer. Seperti @whuber tunjukkan dalam komentar, Anda perlu untuk mendapatkan grafik seperti di atas.b200a

Mengenai bagaimana orang telah menyesuaikan kurva ini hingga titik ini: tampaknya orang umumnya memotong asimtot vertikal sampai mereka menemukan kecocokan yang baik. Pilihan cutoff masih sewenang-wenang, membuat prosedur pemasangan tidak dapat diandalkan dan tidak dapat diproduksi kembali.

Edit 3 & 4 Grafik yang diperbaiki.

onnodb
sumber
3
Apakah kesalahannya ada di atau di atau keduanya? Dalam bentuk apa Anda mengharapkan noise masuk (multiplikasi, aditif, dll.)? yxy
probabilityislogic
2
@onnodb: Kekhawatiran saya adalah, mungkin ini tidak secara mendasar mempertanyakan seberapa kuat model Anda itu sendiri? Tidak peduli apa strategi pas yang Anda gunakan tidak akan tetap sangat sensitif? Bisakah Anda memiliki kepercayaan diri yang tinggi dalam estimasi untuk ? bbb
curious_cat
1
Sayangnya, itu masih tidak berhasil. Tidak ada kemungkinan kombinasi dan yang bahkan akan secara kualitatif mereproduksi grafik yang telah Anda buat. (Jelas adalah negatif. harus kurang dari kemiringan terendah dalam grafik, namun positif, yang menempatkannya ke dalam interval yang sempit. Tetapi ketika berada dalam interval itu, itu tidak cukup besar untuk mengatasi lonjakan negatif besar pada asal yang diperkenalkan oleh istilah .) Apa yang sudah Anda gambar? Data? Beberapa fungsi lainnya? b b a a b x 1 / 2abbaabx1/2
whuber
1
Terima kasih, tapi tetap saja salah. Memperpanjang garis singgung ke grafik ini mundur dari titik mana pun mana , Anda akan memotong sumbu y di . Karena lonjakan ke bawah pada menunjukkan adalah negatif, intersep-y ini juga harus negatif. Tetapi dalam gambar Anda, sangat jelas bahwa sebagian besar intersep seperti itu positif, mencapai setinggi . Dengan demikian secara matematis tidak mungkin bahwa persamaan seperti dapat menggambarkan kurva Anda , bahkan tidak kira-kira. Minimal Anda harus menyesuaikan sesuatu seperti .x > 0 ( 0 , 3 b / ( 2 x 1 / 2 ) ) 0 b 15,5 y = a x + b x 1 / 2 y = a x + b x 1 / 2 + c(x,ax+bx1/2)x>0(0,3b/(2x1/2))0b15.5y=ax+bx1/2y=ax+bx1/2+c
whuber
1
Sebelum saya melakukan pekerjaan ini, saya ingin memastikan pernyataan pertanyaan: itu sebabnya penting untuk mendapatkan fungsi yang benar. Saya tidak punya waktu untuk memberikan jawaban penuh sekarang, tetapi ingin mengatakan bahwa "orang lain" mungkin salah - tetapi itu tergantung pada lebih banyak detail, sayangnya. Jika kesalahan Anda benar-benar aditif , bagi saya itu pasti masih sangat heteroskedastik, karena jika tidak variansnya pada nilai-nilai kecil akan benar-benar kecil. Apa yang bisa Anda ceritakan - secara kuantitatif - tentang kesalahan itu? xxx
whuber

Jawaban:

10

Metode yang kami gunakan agar sesuai dengan ini secara manual (yaitu, Analisis Data Eksplorasi) dapat bekerja sangat baik dengan data tersebut.

Saya ingin sedikit mengubah model agar parameternya positif:

y=axb/x.

Untuk suatu , mari kita asumsikan ada real unik yang memenuhi persamaan ini; sebut ini atau, untuk singkatnya, ketika dipahami.x f ( y ; a , b ) f ( y ) ( a , b )yxf(y;a,b)f(y)(a,b)

Kami mengamati kumpulan pasangan berurutan mana menyimpang dari oleh acak independen dengan nol berarti. Dalam diskusi ini saya akan menganggap mereka semua memiliki varian yang sama, tetapi perpanjangan dari hasil ini (menggunakan kuadrat terkecil tertimbang) adalah mungkin, jelas, dan mudah diimplementasikan. Berikut adalah contoh simulasi dari koleksi nilai, dengan , , dan varian umum dari .x i f ( y i ; a , b ) 100 a = 0,0001 b = 0,1 σ 2 = 4(xi,yi)xif(yi;a,b)100a=0.0001b=0.1σ2=4

Plot data

Ini adalah contoh sulit (sengaja), seperti yang dapat dihargai oleh nilai nonfisik (negatif) dan penyebarannya yang luar biasa (yang biasanya unit horizontal , tetapi dapat berkisar hingga atau pada sumbu ). Jika kita dapat memperoleh kesesuaian yang masuk akal dengan data ini yang mendekati estimasi , , dan digunakan, kita akan melakukannya dengan baik.± 2 5 6 x a b σ 2x±2 56xabσ2

Pemasangan eksplorasi bersifat iteratif. Setiap tahap terdiri dari dua langkah: estimasi (berdasarkan data dan estimasi sebelumnya dan dari dan , dari mana nilai prediksi sebelumnya dapat diperoleh untuk ) lalu estimasi . Karena kesalahan dalam x , yang cocok memperkirakan dari , bukan sebaliknya. Untuk urutan pertama dalam kesalahan di , ketika cukup besar,a b a b x i x i b x i ( y i ) x xaa^b^abx^ixibxi(yi)xx

xi1a(yi+b^x^i).

Oleh karena itu, kita dapat memperbarui dengan memasang model ini dengan kuadrat (pemberitahuan hanya memiliki satu parameter - lereng, --dan tidak ada intercept) dan mengambil timbal balik dari koefisien sebagai perkiraan terbaru dari . aaa^aa

Selanjutnya, ketika cukup kecil, istilah kuadrat terbalik mendominasi dan kami menemukan (lagi untuk urutan pertama dalam kesalahan) yangx

xib212a^b^x^3/2yi2.

Sekali lagi menggunakan kuadrat terkecil (hanya dengan istilah kemiringan ) kami memperoleh estimasi yang diperbarui melalui akar kuadrat dari lereng yang dipasang.bbb^

Untuk melihat mengapa ini berhasil, perkiraan eksplorasi kasar terhadap kecocokan ini dapat diperoleh dengan memplot terhadap untuk lebih kecil . Lebih baik lagi, karena diukur dengan kesalahan dan berubah secara monoton dengan , kita harus fokus pada data dengan nilai yang lebih besar dari . Berikut ini adalah contoh dari dataset simulasi kami yang menunjukkan setengah berwarna merah, separuh terkecil berwarna biru, dan garis yang sesuai dengan titik asal sesuai dengan titik merah. 1 / y 2 i x i x i y i x i 1 / y 2 i y ixi1/yi2xixiyixi1/yi2yi

Angka

Poinnya kira-kira berbaris, meskipun ada sedikit kelengkungan pada nilai-nilai kecil dan . (Perhatikan pilihan sumbu: karena adalah pengukuran, adalah konvensional untuk memplotnya pada sumbu vertikal .) Dengan memfokuskan kecocokan pada titik merah, di mana kelengkungan harus minimal, kita harus memperoleh perkiraan yang masuk akal . Nilai ditunjukkan pada judul adalah akar kuadrat dari kemiringan garis ini: hanya % lebih rendah dari nilai sebenarnya!y x b 0,096 4xyxb0.0964

Pada titik ini nilai yang diprediksi dapat diperbarui melalui

x^i=f(yi;a^,b^).

Iterasi sampai estimasi stabil (yang tidak dijamin) atau berputar melalui rentang nilai yang kecil (yang masih belum dapat dijamin).

Ternyata sulit untuk diperkirakan kecuali kita memiliki nilai sangat besar , tetapi - yang menentukan asimtot vertikal dalam plot asli (dalam pertanyaan) dan merupakan fokus dari pertanyaan-- dapat dijabarkan dengan cukup akurat, asalkan ada beberapa data dalam asymptote vertikal. Dalam contoh berjalan kami, iterasi melakukan konvergen ke (yang hampir dua kali nilai benar ) dan (yang dekat dengan nilai ). Plot ini menunjukkan data sekali lagi, yang ditumpangkan (a) benarx b a = 0.000196 0.0001 b = 0,1073 0.1axba^=0.0001960.0001b^=0.10730.1kurva abu-abu (putus-putus) dan (b) estimasi kurva merah (padat):

Cocok

Kecocokan ini sangat baik sehingga sulit untuk membedakan kurva sebenarnya dari kurva yang pas: mereka tumpang tindih hampir di mana-mana. Kebetulan, varians kesalahan diperkirakan sangat dekat dengan nilai sebenarnya dari .43.734

Ada beberapa masalah dengan pendekatan ini:

  • Taksirannya bias. Bias menjadi jelas ketika dataset kecil dan nilai yang relatif sedikit dekat dengan sumbu x. Secara sistematis kecocokannya sedikit rendah.

  • Prosedur estimasi membutuhkan metode untuk memberi tahu nilai "besar" dari "kecil" dari . Saya dapat mengusulkan cara eksplorasi untuk mengidentifikasi definisi optimal, tetapi sebagai hal praktis Anda dapat meninggalkan ini sebagai konstanta "tuning" dan mengubahnya untuk memeriksa sensitivitas hasil. Saya telah mengatur mereka secara sewenang-wenang dengan membagi data menjadi tiga kelompok yang sama sesuai dengan nilai dan menggunakan dua kelompok luar.y iyiyi

  • Prosedur tidak akan bekerja untuk semua kemungkinan kombinasi dan atau semua rentang data yang memungkinkan. Namun, itu harus bekerja dengan baik setiap kali cukup kurva diwakili dalam dataset untuk mencerminkan kedua asimtot: yang vertikal di satu ujung dan yang miring di ujung lainnya.bab


Kode

Berikut ini ditulis dalam Mathematica .

estimate[{a_, b_, xHat_}, {x_, y_}] := 
  Module[{n = Length[x], k0, k1, yLarge, xLarge, xHatLarge, ySmall, 
    xSmall, xHatSmall, a1, b1, xHat1, u, fr},
   fr[y_, {a_, b_}] := Root[-b^2 + y^2 #1 - 2 a y #1^2 + a^2 #1^3 &, 1];
   k0 = Floor[1 n/3]; k1 = Ceiling[2 n/3];(* The tuning constants *)
   yLarge = y[[k1 + 1 ;;]]; xLarge = x[[k1 + 1 ;;]]; xHatLarge = xHat[[k1 + 1 ;;]];
   ySmall = y[[;; k0]]; xSmall = x[[;; k0]]; xHatSmall = xHat[[;; k0]];
   a1 = 1/
     Last[LinearModelFit[{yLarge + b/Sqrt[xHatLarge], 
          xLarge}\[Transpose], u, u]["BestFitParameters"]];
   b1 = Sqrt[
     Last[LinearModelFit[{(1 - 2 a1 b  xHatSmall^(3/2)) / ySmall^2, 
          xSmall}\[Transpose], u, u]["BestFitParameters"]]];
   xHat1 = fr[#, {a1, b1}] & /@ y;
   {a1, b1, xHat1}
   ];

Terapkan ini pada data (diberikan oleh vektor paralel xdan ydibentuk menjadi matriks dua kolom data = {x,y}) hingga konvergensi, dimulai dengan perkiraan :a=b=0

{a, b, xHat} = NestWhile[estimate[##, data] &, {0, 0, data[[1]]}, 
                Norm[Most[#1] - Most[#2]] >= 0.001 &,  2, 100]
whuber
sumber
3
Ini adalah jawaban yang luar biasa; Saya sangat berkewajiban! Saya sudah bermain dengan ini, dan hasilnya terlihat sangat menjanjikan. Saya akan membutuhkan sedikit lebih banyak waktu untuk sepenuhnya memahami alasannya :) Juga: dapatkah saya menghubungi Anda melalui situs web Anda untuk satu pertanyaan tambahan (pribadi), mengenai pengakuan?
onnodb
3

Lihat pertanyaan penting @probabilityislogic yang diposting

y=yxyx=x3/21/x

b

x

-

Edit untuk mempertimbangkan informasi tambahan:

y=b+ax

Kami sekarang memiliki kesalahan dalam x dan aditif. Kami masih tidak tahu apakah variansnya konstan pada skala itu.

x=y/ab/a=my+c

xo=x+ηx

oxo

xo=c+my+ϵϵ=ζxy

Saya tidak yakin itu memperbaiki keadaan! Saya percaya ada metode untuk hal semacam itu, tapi itu bukan daerah saya sama sekali.

Saya sebutkan di komentar bahwa Anda mungkin ingin melihat regresi terbalik, tetapi bentuk tertentu dari fungsi Anda mungkin menghalangi terlalu jauh dengan itu.

Anda bahkan mungkin terjebak dengan mencoba metode yang cukup kuat untuk kesalahan dalam bentuk linear.

-

y

x

Glen_b -Reinstate Monica
sumber
x
2
" Meskipun kesalahan ada di x " - ya, itu agak penting. Anda mungkin ingin memeriksa regresi terbalik.
Glen_b -Reinstate Monica
3
x=13(2ya+21/3y2(27a4b22a3y3+3327a8b44a7b2y3)1/3+(27a4b22a3y3+3327a8b44a7b2y3)1/321/3a2)
xoxox+ζx=(thatmonster)+ϵϵ=ζ
x(y)yb
0

Setelah beberapa minggu bereksperimen, teknik yang berbeda tampaknya bekerja paling baik dalam kasus khusus ini: Penyesuaian Total Least Squares . Ini adalah varian dari fitting Least Squares yang biasa (nonlinier), tetapi alih-alih mengukur kesalahan kecocokan di sepanjang salah satu sumbu (yang menyebabkan masalah dalam kasus yang sangat nonlinier seperti yang satu ini), ini perlu memperhitungkan kedua sumbu.

Ada sejumlah besar artikel, tutorial dan buku yang tersedia tentang masalah ini, meskipun kasus nonlinier lebih sulit dipahami. Bahkan ada beberapa kode MATLAB yang tersedia.

onnodb
sumber
yy
@whuber Terima kasih telah mengungkapkan kekhawatiran Anda! Saat ini, saya masih bekerja menjalankan simulasi untuk menyelidiki keandalan pemasangan TLS untuk masalah ini. Apa yang saya lihat sejauh ini, adalah bahwa pertimbangan TLS 'dari kedua variabel sangat membantu dalam mengatasi tingginya non-linearitas model. Cocok untuk data yang disimulasikan dapat diandalkan dan bertemu dengan sangat baik. Namun, masih banyak pekerjaan yang harus dilakukan, dan saya pasti harus menumpuk metode Anda hingga yang satu ini, setelah kami memiliki lebih banyak data aktual yang tersedia --- dan lihat secara terperinci masalah Anda.
onnodb
OK - jangan lupa saya memiliki keprihatinan yang sebanding tentang metode yang saya usulkan!
whuber