ข้อผิดพลาดของพารามิเตอร์ที่เกิดขึ้นมีความหมายหรือมีประโยชน์เพียงใดเมื่อทำการเพอร์ฟรอม LinearModelFit ที่ไม่ถ่วงน้ำหนักหรือ NonlinearModelFit
นี่อาจเป็นคำถามที่ยั่วยวนในขอบเขตของสถิติและCross-Validated SEแต่ฉันก็สนใจกิจวัตรที่เหมาะสมของ Mathematica เป็นพิเศษด้วย
โดยปกติแล้วหากฉันต้องการปรับโมเดลให้พอดีกับข้อมูลบางอย่างโดยใช้อย่างใดอย่างหนึ่งNonlinearModelFit
หรือLinearModelFit
ฉันจะมีข้อผิดพลาดบางอย่างที่เกี่ยวข้องกับไฟล์$y$- ข้อมูลที่ฉันใช้เพื่อถ่วงน้ำหนักให้พอดี ข้อผิดพลาดเหล่านี้อาจเป็นเพียงข้อผิดพลาดมาตรฐานที่ได้รับจากการวัดซ้ำหรือฉันอาจรู้บางอย่างเกี่ยวกับกระบวนการทางกายภาพและสามารถกำหนดน้ำหนักได้
ตัวอย่างและฉันมักจะตั้งประมาณการความแปรปรวนของฉันเป็นWeights->1/YDataErrors^2
VarianceEstimatorFunction -> (1 &)
จากนั้นฉันสามารถรับข้อผิดพลาดของพารามิเตอร์จากเมทริกซ์ความแปรปรวนร่วมหรือเพียงแค่ด้วยMyFit["ParameterErrors"]
.
อย่างไรก็ตามในบางกรณีอาจไม่มีข้อผิดพลาดใด ๆ สำหรับข้อมูลที่คุณต้องการให้พอดีหมายความว่าไม่สามารถให้น้ำหนักได้ตามที่อธิบายไว้ข้างต้น คำถามของฉันคือความน่าเชื่อถือ - หรือที่สำคัญกว่านั้นคือข้อผิดพลาดของพารามิเตอร์สำหรับความพอดีที่ไม่ได้ถ่วงน้ำหนักใน Mathematica มีความน่าเชื่อถือเพียงใด
คำตอบ
ตัวอย่างเช่นหากแหล่งใดแหล่งหนึ่งมีข้อผิดพลาด 2 แหล่งให้พูดว่าเป็นข้อผิดพลาดในการวัดและข้อผิดพลาดที่ไม่พอดีดังนั้นการใช้น้ำหนักตามข้อผิดพลาดในการวัดอาจส่งผลให้ข้อผิดพลาดมาตรฐานต่ำลง พิจารณารูปแบบต่อไปนี้:
$$y=a+b x +\gamma + \epsilon$$
ที่ไหน $y$ คือการตอบสนองที่วัดได้ $x$ เป็นตัวทำนาย $a$ และ $b$ เป็นค่าคงที่ที่จะประมาณ $\gamma$ คือข้อผิดพลาดในการวัดซ้ำกับ $\gamma \sim N(0,\sigma_{ME})$และ $\epsilon$ คือข้อผิดพลาดที่ไม่พอดีกับ $\epsilon \sim N(0,\sigma)$ และข้อผิดพลาดทั้งหมดจะถือว่าเป็นอิสระ
ก่อนอื่นให้ตั้งค่าพารามิเตอร์เฉพาะบางอย่าง:
(* Measurement error standard deviation *)
σME = 10;
(* Lack-of-fit error standard deviation *)
σ = 20;
(* Regression coefficients *)
a = 1;
b = 1;
สร้างและลงจุดข้อมูลบางส่วน:
n = 100;
x = Range[n];
SeedRandom[12345];
measurementError = RandomVariate[NormalDistribution[0, σME], n];
lackOfFitError = RandomVariate[NormalDistribution[0, σ], n];
y = a + b x + measurementError + lackOfFitError;
data = Transpose[{x, y}];
data2 = {#[[1]], Around[#[[2]], σME]} & /@ data;
ListPlot[data2]

ตอนนี้พิจารณาแบบจำลองเชิงเส้นสองแบบที่แตกต่างกันว่าตรงไหนlm1
ที่คุณแนะนำและlm2
เป็นสิ่งที่ฉันแนะนำ:
lm1 = LinearModelFit[data, z, z, Weights -> 1/ConstantArray[σME^2, n],
VarianceEstimatorFunction -> (1 &)];
lm2 = LinearModelFit[data, z, z];
lm1["ParameterTable"]

lm2["ParameterTable"]

ประมาณการของพารามิเตอร์ที่เหมือนกัน แต่ข้อผิดพลาดมาตรฐานน้อยกว่าครึ่งหนึ่งของขนาดเป็นที่สำหรับlm1
lm2
อันไหนที่ถูก?
เมทริกซ์ความแปรปรวนร่วม "จริง" ของตัวประมาณกำลังสองน้อยที่สุดของa
และb
สำหรับโมเดลนี้คือ
$$\left(\sigma ^2+\sigma_{ME}^2\right) \left(X^T.X\right)^{-1}$$
ที่ไหน $X$คือเมทริกซ์การออกแบบ ในรหัสMathematicaข้อผิดพลาดมาตรฐานสำหรับb
คือ
X = Transpose[{ConstantArray[1, n], Range[n]}]
Sqrt[(σME^2 + σ^2) Inverse[Transpose[X].X][[2, 2]]] // N
(* 0.0774635 *)
lm2
ที่ตรงกับความสวยกันได้ดีกับ
นี่เป็นตัวอย่างที่สร้างขึ้นเล็กน้อยเนื่องจากฉันมีข้อผิดพลาดมาตรฐานการวัดทั้งหมดเหมือนกันเนื่องจากฟังก์ชันการถดถอยของMathematicaอนุญาตให้มีข้อผิดพลาดเพียงคำเดียวเท่านั้น และด้วยการมีข้อผิดพลาดมาตรฐานการวัดเหมือนกันจึงส่งผลให้โมเดลที่เทียบเท่ามีข้อผิดพลาดเพียงครั้งเดียว
อย่างไรก็ตามแม้ว่าค่าเบี่ยงเบนมาตรฐานการวัดจะแตกต่างกันมาก แต่ปัญหาเกี่ยวกับการถ่วงน้ำหนักที่ไม่เหมาะสมซึ่งไม่ตรงกับโครงสร้างข้อผิดพลาดของแบบจำลองก็ยังคงอยู่
กิจวัตรการถดถอยของMathematicaยังไม่เพียงพอสำหรับโมเดลที่มีแหล่งที่มาของข้อผิดพลาดมากกว่าหนึ่งแหล่ง ฉันหวังว่าพวกเขาจะเป็น