ข้อผิดพลาดของพารามิเตอร์ที่เกิดขึ้นมีความหมายหรือมีประโยชน์เพียงใดเมื่อทำการเพอร์ฟรอม LinearModelFit ที่ไม่ถ่วงน้ำหนักหรือ NonlinearModelFit

Aug 16 2020

นี่อาจเป็นคำถามที่ยั่วยวนในขอบเขตของสถิติและCross-Validated SEแต่ฉันก็สนใจกิจวัตรที่เหมาะสมของ Mathematica เป็นพิเศษด้วย

โดยปกติแล้วหากฉันต้องการปรับโมเดลให้พอดีกับข้อมูลบางอย่างโดยใช้อย่างใดอย่างหนึ่งNonlinearModelFitหรือLinearModelFitฉันจะมีข้อผิดพลาดบางอย่างที่เกี่ยวข้องกับไฟล์$y$- ข้อมูลที่ฉันใช้เพื่อถ่วงน้ำหนักให้พอดี ข้อผิดพลาดเหล่านี้อาจเป็นเพียงข้อผิดพลาดมาตรฐานที่ได้รับจากการวัดซ้ำหรือฉันอาจรู้บางอย่างเกี่ยวกับกระบวนการทางกายภาพและสามารถกำหนดน้ำหนักได้

ตัวอย่างและฉันมักจะตั้งประมาณการความแปรปรวนของฉันเป็นWeights->1/YDataErrors^2 VarianceEstimatorFunction -> (1 &)จากนั้นฉันสามารถรับข้อผิดพลาดของพารามิเตอร์จากเมทริกซ์ความแปรปรวนร่วมหรือเพียงแค่ด้วยMyFit["ParameterErrors"].

อย่างไรก็ตามในบางกรณีอาจไม่มีข้อผิดพลาดใด ๆ สำหรับข้อมูลที่คุณต้องการให้พอดีหมายความว่าไม่สามารถให้น้ำหนักได้ตามที่อธิบายไว้ข้างต้น คำถามของฉันคือความน่าเชื่อถือ - หรือที่สำคัญกว่านั้นคือข้อผิดพลาดของพารามิเตอร์สำหรับความพอดีที่ไม่ได้ถ่วงน้ำหนักใน Mathematica มีความน่าเชื่อถือเพียงใด

คำตอบ

4 JimB Aug 16 2020 at 19:20

ตัวอย่างเช่นหากแหล่งใดแหล่งหนึ่งมีข้อผิดพลาด 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ยังไม่เพียงพอสำหรับโมเดลที่มีแหล่งที่มาของข้อผิดพลาดมากกว่าหนึ่งแหล่ง ฉันหวังว่าพวกเขาจะเป็น