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= a x - b / 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
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
xi≈1a(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
xi≈b21−2a^b^x^3/2y2i.
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/y2ixixiyixi1/y2iyi
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):
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 x
dan y
dibentuk 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]