Loại mô hình này thực sự phổ biến hơn nhiều trong một số ngành khoa học (ví dụ vật lý) và kỹ thuật so với hồi quy tuyến tính "bình thường". Vì vậy, trong các công cụ vật lý như ROOT
, thực hiện loại phù hợp này là không đáng kể, trong khi hồi quy tuyến tính không được thực hiện nguyên bản! Các nhà vật lý có xu hướng gọi đây chỉ là "phù hợp" hoặc phù hợp giảm thiểu chi bình phương.
Mô hình hồi quy tuyến tính bình thường giả định rằng có một phương sai tổng thể gắn vào mỗi phép đo. Sau đó, nó tối đa hóa khả năng
hoặc tương đương logarit của nó
Do đó, tên bình phương nhỏ nhất - tối đa hóa khả năng là giống như giảm thiểu tổng bình phương, và là một hằng số không quan trọng, miễn là nó là không đổi. Với các phép đo có độ không đảm bảo đã biết khác nhau, bạn sẽ muốn tối đa hóa
σ
L∝∏ie−12(yi−(axi+b)σ)2
log(L)=constant−12σ2∑i(yi−(axi+b))2
σL∝∏e−12(y−(ax+b)σi)2
hoặc tương đương logarit của nó
Vậy , bạn thực sự muốn tính trọng số của các phép đo bằng phương sai nghịch đảo , chứ không phải phương sai. Điều này có ý nghĩa - một phép đo chính xác hơn có độ không chắc chắn nhỏ hơn và nên được cân nhắc nhiều hơn. Lưu ý rằng nếu trọng lượng này là không đổi, nó vẫn là yếu tố ngoài tổng. Vì vậy, nó không ảnh hưởng đến các giá trị ước tính, nhưng nó
sẽ ảnh hưởng đến các lỗi tiêu chuẩn, được lấy từ đạo hàm thứ hai của .
log(L)=constant−12∑(yi−(axi+b)σi)2
1/σ2ilog(L)
Tuy nhiên, ở đây chúng ta đi đến một sự khác biệt khác giữa vật lý / khoa học và thống kê nói chung. Thông thường trong thống kê, bạn mong đợi rằng một mối tương quan có thể tồn tại giữa hai biến, nhưng hiếm khi nó chính xác. Mặt khác, trong vật lý và các ngành khoa học khác, bạn thường mong đợi một mối tương quan hoặc mối quan hệ là chính xác, nếu chỉ không có lỗi đo lường phiền phức (ví dụ , không phải ). Vấn đề của bạn dường như rơi nhiều hơn vào trường hợp vật lý / kỹ thuật. Do đó, cách giải thích về sự không chắc chắn gắn liền với các phép đo của bạn và về trọng lượng không hoàn toàn giống như những gì bạn muốn. Nó sẽ có trọng lượng, nhưng nó vẫn nghĩ rằng có một tổng thểF=maF=ma+ϵlm
σ2để tính đến lỗi hồi quy, đó không phải là điều bạn muốn - bạn muốn các lỗi đo lường của mình là loại lỗi duy nhất có. (Kết quả cuối cùng của lm
việc giải thích là chỉ các giá trị tương đối của trọng số mới là vấn đề, đó là lý do tại sao các trọng số không đổi bạn thêm vào dưới dạng thử nghiệm không có hiệu lực). Câu hỏi và câu trả lời ở đây có nhiều chi tiết hơn:
trọng lượng lm và lỗi tiêu chuẩn
Có một vài giải pháp có thể được đưa ra trong các câu trả lời ở đó. Cụ thể, một câu trả lời ẩn danh ở đó gợi ý sử dụng
vcov(mod)/summary(mod)$sigma^2
Về cơ bản, chia lm
tỷ lệ ma trận hiệp phương sai dựa trên ước tính của nó và bạn muốn hoàn tác điều này. Sau đó, bạn có thể nhận được thông tin bạn muốn từ ma trận hiệp phương sai đã sửa. Hãy thử điều này, nhưng hãy thử kiểm tra lại nếu bạn có thể với đại số tuyến tính thủ công. Và hãy nhớ rằng các trọng số nên phương sai nghịch đảo.σ
BIÊN TẬP
Nếu bạn đang làm điều này rất nhiều thứ bạn có thể cân nhắc sử dụng ROOT
(dường như thực hiện điều này một cách tự nhiên trong khi lm
và glm
không). Đây là một ví dụ ngắn gọn về cách làm điều này trong ROOT
. Trước hết, ROOT
có thể được sử dụng thông qua C ++ hoặc Python và tải xuống và cài đặt rất lớn. Bạn có thể dùng thử trong trình duyệt bằng sổ ghi chép Jupiter, theo liên kết tại đây , chọn "Binder" ở bên phải và "Python" ở bên trái.
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()
Tôi đã đặt căn bậc hai là sự không chắc chắn trên các giá trị . Đầu ra của sự phù hợp là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
và một cốt truyện hay được sản xuất:
Bộ đệm ROOT cũng có thể xử lý các yếu tố không chắc chắn trong các giá trị , có thể sẽ yêu cầu hack nhiều hơn . Nếu bất cứ ai biết một cách bản địa để làm điều này trong R, tôi sẽ thích tìm hiểu nó.xlm
EDIT THỨ HAI
Câu trả lời khác từ cùng một câu hỏi trước đó của @Wolfgang đưa ra một giải pháp thậm chí còn tốt hơn: rma
công cụ từ metafor
gói (ban đầu tôi đã giải thích văn bản trong câu trả lời đó có nghĩa là nó không tính toán chặn, nhưng đó không phải là trường hợp). Lấy phương sai trong các phép đo y chỉ đơn giản là 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
Đây chắc chắn là công cụ R thuần túy tốt nhất cho loại hồi quy mà tôi đã tìm thấy.
boot
gói trong R. Sau đó, bạn có thể để hồi quy tuyến tính chạy trên tập dữ liệu bootstrapping.