แบบจำลองประเภทนี้มีอยู่ทั่วไปในสาขาวิทยาศาสตร์ (เช่นฟิสิกส์) และวิศวกรรมมากกว่าการถดถอยเชิงเส้นแบบ "ปกติ" ดังนั้นในเครื่องมือฟิสิกส์เช่นROOT
การทำแบบนี้เป็นเรื่องเล็กน้อยในขณะที่การถดถอยเชิงเส้นไม่ได้ถูกนำมาใช้จริง! นักฟิสิกส์มักจะเรียกสิ่งนี้ว่า "พอดี" หรือการลดขนาดไคสแควร์
ตัวแบบการถดถอยเชิงเส้นปกติถือว่ามีความแปรปรวนโดยรวม σติดอยู่กับทุกการวัด จากนั้นจะเพิ่มโอกาสสูงสุด
L ∝Πผมอี-12(Yผม- ( กxผม+ b )σ)2
หรือเท่ากับลอการิทึมของมัน
เข้าสู่ระบบ( L ) = C o n s T n T -12σ2Σผม(Yผม- ( กxผม+ b ))2
ดังนั้นชื่ออย่างน้อยกำลังสอง - การเพิ่มความน่าจะเป็นก็เหมือนกับการลดผลรวมของกำลังสองและ
σเป็นค่าคงที่ที่ไม่สำคัญตราบใดที่ค่า
นั้นคงที่ ด้วยการวัดที่มีความไม่แน่นอนที่แตกต่างกันคุณจะต้องการเพิ่มประสิทธิภาพ
L ∝ ∏อี-12(Y- ( a x + b )σผม)2
หรือเท่ากับลอการิทึมของมัน
เข้าสู่ระบบ( L ) = C o n s T n T -12Σ(Yผม- ( กxผม+ b )σผม)2
ดังนั้นคุณต้องการชั่งน้ำหนักการวัดตามความแปรปรวนผกผัน
1 /σ2ผมไม่ใช่ความแปรปรวน สิ่งนี้สมเหตุสมผล - การวัดที่แม่นยำยิ่งขึ้นมีความไม่แน่นอนน้อยลงและควรให้น้ำหนักมากขึ้น โปรดทราบว่าหากน้ำหนักนี้คงที่ก็ยังคงเป็นปัจจัยจากยอดรวม ดังนั้นจะไม่ส่งผลกระทบต่อค่าโดยประมาณ แต่
ควรมีผลต่อข้อผิดพลาดมาตรฐานที่นำมาจากอนุพันธ์อันดับสองของ
เข้าสู่ระบบ( L ).
อย่างไรก็ตามที่นี่เรามาถึงความแตกต่างระหว่างฟิสิกส์ / วิทยาศาสตร์และสถิติที่มีขนาดใหญ่อีก โดยทั่วไปในสถิติคุณคาดหวังว่าความสัมพันธ์อาจมีอยู่ระหว่างตัวแปรสองตัว แต่แทบจะไม่แน่นอน ในทางฟิสิกส์และวิทยาศาสตร์อื่น ๆ ในทางกลับกันคุณมักจะคาดหวังว่าความสัมพันธ์หรือความสัมพันธ์ที่แน่นอนถ้ามันไม่ได้เป็นข้อผิดพลาดในการวัดที่น่ารำคาญ (เช่นF= m aไม่ใช่ F= m a + ϵ) ดูเหมือนว่าปัญหาของคุณจะตกอยู่ในคดีฟิสิกส์ / วิศวกรรม ดังนั้นlm
การตีความความไม่แน่นอนที่แนบมากับการวัดของคุณและน้ำหนักนั้นไม่เหมือนกับสิ่งที่คุณต้องการ มันจะใช้น้ำหนัก แต่ก็ยังคิดว่ามีภาพรวมσ2เพื่อบัญชีสำหรับข้อผิดพลาดการถดถอยซึ่งไม่ใช่สิ่งที่คุณต้องการ - คุณต้องการให้ข้อผิดพลาดการวัดของคุณเป็นข้อผิดพลาดชนิดเดียวที่มี (ผลลัพธ์สุดท้ายของlm
การตีความคือเฉพาะค่าสัมพัทธ์ของตุ้มน้ำหนักซึ่งเป็นเหตุให้ตุ้มน้ำหนักคงที่ที่คุณเพิ่มเมื่อทดสอบไม่มีผล) คำถามและคำตอบที่นี่มีรายละเอียดเพิ่มเติม:
น้ำหนัก LM และข้อผิดพลาดมาตรฐาน
มีคำตอบที่เป็นไปได้สองสามข้อที่ให้ไว้ในคำตอบที่นั่น โดยเฉพาะอย่างยิ่งคำตอบที่ไม่ระบุตัวตนมีแนะนำให้ใช้
vcov(mod)/summary(mod)$sigma^2
โดยทั่วไปจะlm
ปรับเมทริกซ์ความแปรปรวนร่วมตามการประมาณของมันσและคุณต้องการยกเลิกสิ่งนี้ จากนั้นคุณสามารถรับข้อมูลที่คุณต้องการจากเมทริกซ์ความแปรปรวนร่วมที่ถูกต้อง ลองสิ่งนี้ แต่ลองตรวจสอบอีกครั้งถ้าคุณสามารถใช้พีชคณิตเชิงเส้นด้วยตนเองได้ และจำไว้ว่าน้ำหนักควรเป็นความแปรปรวนผกผัน
แก้ไข
หากคุณกำลังทำสิ่งนี้มากคุณอาจลองใช้ROOT
(ซึ่งดูเหมือนว่าจะทำสิ่งนี้ในขณะที่lm
และglm
ไม่ทำ) นี่เป็นตัวอย่างสั้น ๆ ROOT
ของวิธีการที่จะทำเช่นนี้ใน ก่อนอื่นROOT
สามารถใช้ผ่าน C ++ หรือ Python และเป็นการดาวน์โหลดและติดตั้งที่ใหญ่มาก คุณสามารถลองในเบราว์เซอร์โดยใช้สมุดบันทึก Jupiter ตามลิงค์ที่นี่เลือก "Binder" ทางด้านขวาและ "Python" ทางด้านซ้าย
import ROOT
from array import array
import math
x = range(1,11)
xerrs = [0]*10
y = [131.4,227.1,245,331.2,386.9,464.9,476.3,512.2,510.8,532.9]
yerrs = [math.sqrt(i) for i in y]
graph = ROOT.TGraphErrors(len(x),array('d',x),array('d',y),array('d',xerrs),array('d',yerrs))
graph.Fit("pol2","S")
c = ROOT.TCanvas("test","test",800,600)
graph.Draw("AP")
c.Draw()
ฉันใส่รากที่สองเป็นความไม่แน่นอนใน Yค่า ผลลัพธ์ของการสวมใส่คือ
Welcome to JupyROOT 6.07/03
****************************************
Minimizer is Linear
Chi2 = 8.2817
NDf = 7
p0 = 46.6629 +/- 16.0838
p1 = 88.194 +/- 8.09565
p2 = -3.91398 +/- 0.78028
และพล็อตที่ดีมีการผลิต:
ช่างฟิต ROOT สามารถจัดการกับความไม่แน่นอนใน x ค่าซึ่งอาจจะต้องแฮ็คมากยิ่งขึ้น lm
ค่าซึ่งอาจจะต้องมีมากขึ้นของการแฮ็คถ้าใครรู้วิธีการทำเช่นนี้ใน R ฉันจะสนใจเรียนรู้
แก้ไขครั้งที่สอง
คำตอบอื่น ๆ จากคำถามก่อนหน้านี้โดย @Wolfgang ให้วิธีแก้ปัญหาที่ดีกว่า: rma
เครื่องมือจากmetafor
แพ็คเกจ (แต่เดิมฉันตีความข้อความในคำตอบนั้นหมายความว่าไม่ได้คำนวณการสกัดกั้น แต่ไม่ใช่กรณี) การแปรปรวนในการวัด y เป็นเพียงแค่ y:
> rma(y~x+I(x^2),y,method="FE")
Fixed-Effects with Moderators Model (k = 10)
Test for Residual Heterogeneity:
QE(df = 7) = 8.2817, p-val = 0.3084
Test of Moderators (coefficient(s) 2,3):
QM(df = 2) = 659.4641, p-val < .0001
Model Results:
estimate se zval pval ci.lb ci.ub
intrcpt 46.6629 16.0838 2.9012 0.0037 15.1393 78.1866 **
x 88.1940 8.0956 10.8940 <.0001 72.3268 104.0612 ***
I(x^2) -3.9140 0.7803 -5.0161 <.0001 -5.4433 -2.3847 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
นี่เป็นเครื่องมือ R บริสุทธิ์ที่ดีที่สุดสำหรับการถดถอยแบบนี้ที่ฉันได้พบ
boot
แพคเกจใน R หลังจากนั้นคุณสามารถปล่อยให้การถดถอยเชิงเส้นทำงานบนชุดข้อมูล bootstrapped