วิธีการที่เราจะใช้ให้เหมาะกับสิ่งนี้ด้วยตนเอง (นั่นคือจากการวิเคราะห์ข้อมูลเชิงสำรวจ) สามารถทำงานได้ดีกับข้อมูลดังกล่าว
ฉันต้องการที่จะแก้ไขรูปแบบพารามิเตอร์เล็กน้อยเพื่อให้พารามิเตอร์เป็นบวก:
y=ax−b/x−−√.
สำหรับกำหนดลองสมมุติว่ามีจริงที่ไม่ซ้ำกันซึ่งทำให้สมการนี้เป็นที่พอใจ เรียกสิ่งนี้ว่าหรือเพื่อความกระชับเมื่อเข้าใจyxf(y;a,b)f(y)(a,b)
เราสังเกตการสะสมของคู่ที่ได้รับคำสั่งโดยที่เบี่ยงเบนจากโดยตัวแปรสุ่มอิสระที่มีค่าศูนย์เป็นศูนย์ ในการสนทนานี้ฉันจะสมมติว่าพวกเขาทุกคนมีความแปรปรวนร่วมกัน แต่ส่วนขยายของผลลัพธ์เหล่านี้ (โดยใช้กำลังสองน้อยที่สุด) เป็นไปได้ชัดเจนและง่ายต่อการใช้งาน นี่เป็นตัวอย่างของการจำลองเช่นคอลเลกชันของค่ากับ ,และความแปรปรวนที่พบบ่อยของ 4(xi,yi)xif(yi;a,b)100a=0.0001b=0.1σ2=4
นี่เป็นตัวอย่างที่ยาก (จงใจ) ซึ่งสามารถชื่นชมได้โดยค่าไม่ใช่ทางกายภาพ (เชิงลบ) และการแพร่กระจายพิเศษของพวกเขา (ซึ่งโดยทั่วไปคือหน่วยแนวนอนแต่สามารถอยู่ในแนวแกนหรือบนแกน ) หากเราสามารถรับข้อมูลที่เหมาะสมกับข้อมูลเหล่านี้ซึ่งใกล้เคียงกับการประเมินการ ,และเราจะทำได้ดีมากx±2 56xabσ2
กระชับสำรวจเป็นซ้ำแล้วซ้ำอีก แต่ละขั้นตอนประกอบด้วยสองขั้นตอน: ประมาณ (ขึ้นอยู่กับข้อมูลและการประมาณการก่อนหน้าและของและซึ่งค่าที่คาดการณ์ไว้ก่อนหน้านี้สามารถรับได้สำหรับ ) และจากนั้นประมาณการขเนื่องจากข้อผิดพลาดอยู่ในxความพอดีจะประมาณจากแทนที่จะเป็นวิธีอื่น หากต้องการอันดับแรกในข้อผิดพลาดในเมื่อมีขนาดใหญ่พอaa^b^abx^ixibxi(yi)xx
xi≈1a(yi+b^x^i−−√).
ดังนั้นเราจึงอาจมีการปรับปรุงโดยการปรับรูปแบบนี้มีน้อยสแควร์ (แจ้งให้ทราบว่ามีเพียงหนึ่งพารามิเตอร์ - ลาด, --and ไม่มีตัด) และการกลับของค่าสัมประสิทธิ์เป็นประมาณการปรับปรุงของa^aa
ต่อไปเมื่อมีขนาดเล็กพอคำอินเวอร์สกำลังสองจะมีค่าและเราพบ (อีกครั้งเพื่อเรียงลำดับแรกในข้อผิดพลาด) ที่x
xi≈b21−2a^b^x^3/2y2i.
อีกครั้งโดยใช้กำลังสองน้อยที่สุด (มีเพียงความชัน ) เราได้รับการประมาณการที่ปรับปรุงแล้วผ่านทางสแควร์รูทของความชันที่ติดตั้งbb^
เพื่อดูว่าทำไมงานนี้ประมาณสำรวจน้ำมันดิบจะพอดีนี้สามารถหาได้โดยการวางแผนกับสำหรับขนาดเล็กx_iยังดีกว่าเพราะจะถูกวัดด้วยข้อผิดพลาดและ monotonically การเปลี่ยนแปลงกับเราควรให้ความสำคัญกับข้อมูลที่มีขนาดใหญ่กว่าค่าของ 2 นี่คือตัวอย่างจากชุดข้อมูลจำลองของเราแสดงครึ่งที่ใหญ่ที่สุดของสีแดงครึ่งที่เล็กที่สุดในสีน้ำเงินและเส้นผ่านจุดกำเนิดพอดีกับจุดสีแดงxi1/y2ixixiyixi1/y2iyi
จุดประมาณบรรทัดขึ้นถึงแม้จะมีบิตของความโค้งที่ค่าเล็ก ๆ ของและy ที่(สังเกตการเลือกแกน: เนื่องจากคือการวัดมันเป็นเรื่องธรรมดาที่จะพล็อตมันบนแกนตั้ง ) โดยการโฟกัสให้พอดีกับจุดสีแดงซึ่งความโค้งควรน้อยที่สุดเราควรได้ค่าประมาณเหมาะสม ค่าแสดงในชื่อเป็นรากที่สองของความชันของเส้นนี้: มันมีค่าน้อยกว่าค่าจริงเพียง %!xyxb0.0964
ณ จุดนี้ค่าที่คาดการณ์สามารถอัปเดตผ่านทาง
x^i=f(yi;a^,b^).
ทำซ้ำจนกระทั่งทั้งการประมาณค่าเสถียร (ซึ่งไม่รับประกัน) หรือวนรอบผ่านค่าเล็ก ๆ (ซึ่งยังไม่สามารถรับประกันได้)
ปรากฎว่าเป็นเรื่องยากที่จะประมาณว่าเรามีค่าที่ดีมากแต่ซึ่งกำหนดเส้นกำกับแนวดิ่งในพล็อตดั้งเดิม (ในคำถาม) และเป็นจุดสำคัญของคำถาม - สามารถปักหมุดได้ค่อนข้างแม่นยำหากมีข้อมูลบางอย่างภายในเส้นกำกับแนวดิ่ง ในตัวอย่างการรันของเราการวนซ้ำจะรวมกันเป็น (ซึ่งเกือบสองเท่าของค่าที่ถูกต้องคือ ) และ (ซึ่งใกล้เคียงกับค่าที่ถูกต้อง ) พล็อตนี้แสดงข้อมูลอีกครั้งซึ่งมีการทับ (a) จริงaxba^=0.0001960.0001b^=0.10730.1โค้งเป็นสีเทา (ประ) และ (b) โค้งโดยประมาณเป็นสีแดง (ทึบ):
ความพอดีนี้ดีมากจนยากที่จะแยกแยะความแตกต่างของเส้นโค้งที่แท้จริงจากส่วนโค้งที่ประกอบเข้าด้วยกัน อนึ่งความแปรปรวนข้อผิดพลาดประมาณอยู่ใกล้กับมูลค่าที่แท้จริงของ43.734
มีปัญหาบางอย่างเกี่ยวกับวิธีการนี้:
การประมาณการมีอคติ อคติจะปรากฏเมื่อชุดข้อมูลมีขนาดเล็กและค่าค่อนข้างน้อยอยู่ใกล้กับแกน x พอดีค่อนข้างเป็นระบบต่ำเล็กน้อย
ขั้นตอนการประมาณค่าต้องใช้วิธีการที่จะบอก "ใหญ่" จาก "เล็ก" ค่าของy_iฉันสามารถเสนอวิธีการสำรวจเพื่อระบุคำจำกัดความที่ดีที่สุด แต่ในทางปฏิบัติคุณสามารถปล่อยให้สิ่งเหล่านี้เป็นค่าคงที่ "ปรับแต่ง" และปรับเปลี่ยนเพื่อตรวจสอบความอ่อนไหวของผลลัพธ์ ฉันได้ตั้งค่าโดยพลการโดยแบ่งข้อมูลออกเป็นสามกลุ่มเท่ากันตามค่าของและใช้กลุ่มนอกทั้งสองyiyi
กระบวนการนี้จะไม่ทำงานสำหรับการรวมและเป็นไปได้ทั้งหมดหรือช่วงของข้อมูลที่เป็นไปได้ทั้งหมด อย่างไรก็ตามมันควรจะทำงานได้ดีเมื่อใดก็ตามที่มีการโค้งมากพอในชุดข้อมูลเพื่อสะท้อนถึงเส้นกำกับทั้งสอง: แนวตั้งที่ปลายด้านหนึ่งและปลายเอียงอีกด้านหนึ่งab
รหัส
ต่อไปนี้จะถูกเขียนใน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}
];
ใช้สิ่งนี้กับข้อมูล (ให้โดยเวกเตอร์ขนานx
และy
กลายเป็นเมทริกซ์สองคอลัมน์data = {x,y}
) จนกระทั่งการบรรจบกันเริ่มต้นด้วยการประมาณ :a=b=0
{a, b, xHat} = NestWhile[estimate[##, data] &, {0, 0, data[[1]]},
Norm[Most[#1] - Most[#2]] >= 0.001 &, 2, 100]