Mô hình tuyến tính trong đó dữ liệu không chắc chắn, sử dụng R


9

Hãy nói rằng tôi có dữ liệu có một số không chắc chắn. Ví dụ:

X  Y
1  10±4
2  50±3
3  80±7
4  105±1
5  120±9

Bản chất của độ không đảm bảo có thể là các phép đo lặp lại hoặc thí nghiệm, hoặc độ không đảm bảo của dụng cụ đo chẳng hạn.

Tôi muốn điều chỉnh đường cong cho nó bằng R, điều mà bình thường tôi sẽ làm với lm. Tuy nhiên, điều này không tính đến độ không đảm bảo của dữ liệu khi nó mang lại cho tôi độ không đảm bảo trong các hệ số phù hợp và do đó, các khoảng dự đoán. Nhìn vào tài liệu, lmtrang này có:

... trọng số có thể được sử dụng để chỉ ra rằng các quan sát khác nhau có phương sai khác nhau ...

Vì vậy, nó làm cho tôi nghĩ rằng có lẽ điều này có liên quan đến nó. Tôi biết lý thuyết thực hiện thủ công, nhưng tôi đã tự hỏi liệu có thể làm điều đó với lmchức năng không. Nếu không, có chức năng (hoặc gói) nào khác có khả năng thực hiện việc này không?

BIÊN TẬP

Xem một số ý kiến, đây là một số làm rõ. Lấy ví dụ này:

x <- 1:10
y <- c(131.4,227.1,245,331.2,386.9,464.9,476.3,512.2,510.8,532.9)
mod <- lm(y ~ x + I(x^2))
summary(mod)

Đưa cho tôi:

Residuals:
    Min      1Q  Median      3Q     Max 
-32.536  -8.022   0.087   7.666  26.358 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  39.8050    22.3210   1.783  0.11773    
x            92.0311     9.3222   9.872 2.33e-05 ***
I(x^2)       -4.2625     0.8259  -5.161  0.00131 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 18.98 on 7 degrees of freedom
Multiple R-squared:  0.986, Adjusted R-squared:  0.982 
F-statistic: 246.7 on 2 and 7 DF,  p-value: 3.237e-07

Về cơ bản, các hệ số của tôi là a = 39,8 ± 22,3, b = 92,0 ± 9,3, c = -4,3 ± 0,8. Bây giờ hãy nói rằng với mỗi điểm dữ liệu, lỗi là 20. Tôi sẽ sử dụng weights = rep(20,10)trong lmcuộc gọi và thay vào đó tôi nhận được điều này:

Residual standard error: 84.87 on 7 degrees of freedom

nhưng các lỗi tiêu chuẩn trên các hệ số không thay đổi.

Theo cách thủ công, tôi biết cách thực hiện với việc tính toán ma trận hiệp phương sai bằng cách sử dụng đại số ma trận và đặt các trọng số / lỗi trong đó và rút ra các khoảng tin cậy bằng cách sử dụng. Vì vậy, có một cách để làm điều đó trong chính chức năng lm, hoặc bất kỳ chức năng nào khác?


Nếu bạn biết phân phối dữ liệu, bạn có thể tự khởi động lại nó bằng bootgó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.
Ferdi

lmsẽ sử dụng các phương sai được chuẩn hóa làm trọng số và sau đó giả định rằng mô hình của bạn có giá trị thống kê để ước tính độ không đảm bảo của các tham số. Nếu bạn nghĩ rằng đây không phải là trường hợp (thanh lỗi quá nhỏ hoặc quá lớn), bạn không nên tin vào bất kỳ ước tính không chắc chắn nào.
Pascal

Xem thêm câu hỏi này tại đây: stats.stackexchange.com/questions/113987/ấc
jwimberley

Câu trả lời:


14

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ó 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 σ

Lie12(yi(axi+b)σ)2
log(L)=constant12σ2i(yi(axi+b))2
σ
Le12(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)=constant12(yi(axi+b)σi)2
1/σi2log(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 lmviệ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 lmtỷ 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 lmglmkhô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, ROOTcó 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:

tứ giác

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: rmacông cụ từ metaforgó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.


Tôi nghĩ rằng về cơ bản là sai lầm khi hoàn tác nhân rộng lm. Nếu bạn làm điều này, số liệu thống kê xác nhận, chẳng hạn như bình phương, sẽ bị tắt. Nếu độ phân tán của phần dư của bạn không khớp với các thanh lỗi của bạn, thì có gì đó không đúng trong mô hình thống kê (có thể là lựa chọn mô hình hoặc thanh lỗi hoặc giả thuyết bình thường ...). Trong cả hai trường hợp, độ không đảm bảo của các tham số sẽ không đáng tin cậy !!!
Pascal

@PascalPERNOT Tôi chưa nghĩ về điều này; Tôi sẽ suy nghĩ về ý kiến ​​của bạn. Thành thật mà nói, tôi đồng ý theo nghĩa chung là tôi nghĩ giải pháp tốt nhất là sử dụng phần mềm vật lý hoặc kỹ thuật được đảm bảo để giải quyết vấn đề này một cách chính xác, thay vì hack lmđể có được đầu ra chính xác. (Nếu có ai tò mò, tôi sẽ chỉ cho bạn cách làm điều này ROOT).
jwimberley

1
Một lợi thế tiềm năng của cách tiếp cận vấn đề của nhà thống kê là nó cho phép gộp các ước tính phương sai giữa các quan sát ở các cấp độ khác nhau. Nếu phương sai cơ bản là không đổi hoặc có một số mối quan hệ được xác định với các phép đo như trong các quy trình Poisson, thì phân tích thường sẽ được cải thiện so với những gì bạn nhận được từ giả định (thường không thực tế) rằng phương sai đo được cho mỗi điểm dữ liệu là chính xác và do đó trọng số không công bằng một số điểm dữ liệu. Trong dữ liệu của OP, tôi đoán rằng giả định phương sai không đổi có thể tốt hơn.
EdM

1
@jwimberley Tôi giả sử rằng đảm bảo rằng lỗi tiêu chuẩn dư có trọng số được định mức lại thành 1, trước khi tính toán ma trận hiệp phương sai tham số. Bạn có thể kiểm tra điều này để nhân trọng số của bạn với và xem đầu ra "Lỗi tiêu chuẩn dư" bị ảnh hưởng như thế nào. Trong ví dụ của bạn, nó thay đổi từ 1.088 thành 1. Nếu thiết lập của bạn hợp lệ về mặt thống kê, tỷ lệ chỉ có ảnh hưởng nhỏ đến độ không đảm bảo của tham số ...σ 2σσ2
Pascal

1
Có một cuộc thảo luận tốt về những vấn đề này trong Chương 8 của phương pháp Bayon, S. và Weaver, B. (2015) cho các ngành khoa học vật lý. Mùa xuân. springer.com/us/book/9783319152868
Tony Ladson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.