Chiến lược phù hợp với chức năng phi tuyến tính cao


12

Để phân tích dữ liệu từ một thí nghiệm vật lý sinh học, tôi hiện đang cố gắng thực hiện khớp đường cong với một mô hình phi tuyến tính cao. Hàm mô hình trông cơ bản như sau:

y=ax+bx1/2

Ở đây, đặc biệt là giá trị của b rất đáng quan tâm.

Một âm mưu cho chức năng này:

Function plot

(Lưu ý rằng chức năng mô hình dựa trên mô tả toán học kỹ lưỡng của hệ thống và dường như hoạt động rất tốt --- chỉ là sự phù hợp tự động là khó khăn).

Tất nhiên, chức năng mô hình có vấn đề: các chiến lược phù hợp mà tôi đã thử từ trước đến nay, thất bại vì tiệm cận sắc nét ở x=0 , đặc biệt là với dữ liệu nhiễu.

Sự hiểu biết của tôi về vấn đề ở đây là sự phù hợp với bình phương nhỏ nhất (Tôi đã chơi với cả hồi quy tuyến tính và phi tuyến tính trong MATLAB; chủ yếu là Levenberg-Marquest) rất nhạy cảm với tiệm cận đứng, bởi vì các lỗi nhỏ trong x được khuếch đại rất nhiều .

Bất cứ ai có thể chỉ cho tôi một chiến lược phù hợp có thể làm việc xung quanh điều này?

Tôi có một số kiến ​​thức cơ bản về thống kê, nhưng điều đó vẫn còn khá hạn chế. Tôi rất muốn học, nếu chỉ tôi biết bắt đầu tìm ở đâu :)

Cảm ơn lời khuyên của bạn nhiều!

Chỉnh sửa Bắt đầu ân xá của bạn vì quên đề cập đến các lỗi. Tiếng ồn đáng kể duy nhất là trong , và nó là phụ gia.x

Chỉnh sửa 2 Một số thông tin bổ sung về nền tảng của câu hỏi này. Biểu đồ trên mô hình hành vi kéo dài của polymer. Như @whuber đã chỉ ra trong các bình luận, bạn cần để có được một biểu đồ như trên.b200a

Về cách mọi người đã phù hợp với đường cong này cho đến thời điểm này: có vẻ như mọi người thường cắt bỏ tiệm cận đứng cho đến khi họ tìm thấy một sự phù hợp tốt. Sự lựa chọn cắt vẫn còn tùy ý, mặc dù, làm cho thủ tục phù hợp không đáng tin cậy và không thể thực hiện được.

Chỉnh sửa 3 & 4 Đồ thị cố định.


3
Các lỗi đến trong hoặc trong y hoặc cả hai? Ở dạng nào bạn mong đợi tiếng ồn đi vào (nhân, cộng, v.v.)? xy
xác suất

2
@onnodb: Mối quan tâm của tôi là, điều này có thể không đặt câu hỏi về cơ bản mô hình của bạn mạnh đến mức nào không? Không có vấn đề gì phù hợp chiến lược bạn sử dụng sẽ không vẫn rất nhạy cảm? Bạn có thể có một sự tự tin cao trong một ước tính như vậy cho b ? bb
tò mò_cat

1
Thật không may, điều đó vẫn không hoạt động. Đơn giản là không có sự kết hợp nào giữa b mà thậm chí sẽ tái tạo một cách định tính biểu đồ mà bạn đã vẽ. (Rõ ràng b là âm. A phải nhỏ hơn độ dốc nhỏ nhất trong biểu đồ, nhưng dương, đặt nó vào một khoảng hẹp. Nhưng khi a nằm trong khoảng đó, đơn giản là nó không đủ lớn để vượt qua mức tăng âm lớn ở nguồn gốc được giới thiệu bởi các b x 1 / 2 hạn.) bạn đã rút ra là gì? Dữ liệu? Một số chức năng khác? abbaabx1/2
whuber

1
Cảm ơn, nhưng nó vẫn sai. Mở rộng tiếp xúc với đồ thị này ngược từ bất kỳ điểm nơi x > 0 , bạn sẽ đánh chặn các trục y tại ( 0 , 3 b / ( 2 x 1 / 2 ) ) . Bởi vì mức tăng giảm ở 0 cho thấy b(x,ax+bx1/2)x>0(0,3b/(2x1/2))0blà tiêu cực, quá trình chặn y này cũng phải âm tính. Nhưng trong hình của bạn, rõ ràng là hầu hết các can thiệp như vậy đều tích cực, kéo dài tới . Vì vậy nó là toán học không thể là một phương trình như y = một x + b x 1 / 2 có thể mô tả đường cong của bạn , thậm chí không xấp xỉ. Tối thiểu bạn cần phải phù hợp với cái gì đó như y = một x + b x 1 / 2 + c . 15.5y=ax+bx1/2y=ax+bx1/2+c
whuber

1
Trước khi tôi thực hiện bất kỳ công việc nào về vấn đề này, tôi muốn chắc chắn về tuyên bố của câu hỏi: đó là lý do tại sao điều quan trọng là phải thực hiện đúng chức năng. Bây giờ tôi không có thời gian để đưa ra câu trả lời đầy đủ, nhưng muốn nhận xét rằng "người khác" có thể sai - nhưng nó phụ thuộc vào nhiều chi tiết hơn, than ôi. Nếu lỗi của bạn thực sự là phụ gia thì đối với tôi, nó vẫn phải là dị thể mạnh, vì nếu không, phương sai của nó ở các giá trị nhỏ của x sẽ thực sự rất nhỏ. Bạn có thể nói gì với chúng tôi - một cách định lượng - về lỗi đó? xx
whuber

Câu trả lời:


10

Các phương pháp chúng tôi sẽ sử dụng để điều chỉnh thủ công (nghĩa là Phân tích dữ liệu khám phá) có thể hoạt động rất tốt với dữ liệu đó.

Tôi muốn xác định lại thông số của mô hình một chút để làm cho các tham số của nó trở nên tích cực:

y=axb/x.

Đối với một cho trước , giả sử có một x thực duy nhất thỏa mãn phương trình này; gọi đây là f ( y ; a , b ) hoặc, để cho ngắn gọn, f ( y ) khi ( a , b ) được hiểu.yxf(y;a,b)f(y)(a,b)

Chúng tôi quan sát một tập hợp các cặp theo thứ tự trong đó x i lệch khỏi f ( y i ; a , b ) bởi các biến thiên ngẫu nhiên độc lập với phương tiện bằng không. Trong cuộc thảo luận này, tôi sẽ giả sử tất cả chúng đều có một phương sai chung, nhưng việc mở rộng các kết quả này (sử dụng bình phương tối thiểu có trọng số) là có thể, rõ ràng và dễ thực hiện. Dưới đây là một ví dụ mô phỏng của một bộ sưu tập như vậy 100 giá trị, với một = 0,0001 , b = 0,1 , và một sai chung của σ(xi,yi)xif(yi;a,b)100a=0.0001b=0.1 .σ2=4

Data plot

Đây là một (cố tình) ví dụ khó khăn, như có thể được đánh giá cao bởi các phi vật thể (âm) giá trị và lây lan phi thường của họ (mà thường là ± 2 ngang đơn vị, nhưng có thể dao động lên đến 5 hoặc 6 trên x trục). Nếu chúng ta có thể có được sự phù hợp hợp lý với những dữ liệu này đến bất kỳ nơi nào gần với việc ước tính a , bσ 2 được sử dụng, chúng ta sẽ thực sự làm tốt.x±2 56xabσ2

Một thăm dò phù hợp là lặp đi lặp lại. Mỗi giai đoạn bao gồm hai bước sau: ước tính (dựa trên các dữ liệu và trước đó ước tính mộtb của mộtb , từ đó giá trị dự đoán trước đó x i có thể thu được cho x i ) và sau đó ước tính b . Bởi vì các lỗi nằm trong x , sự phù hợp ước tính x i từ ( y i ) , thay vì ngược lại. Để thứ tự đầu tiên trong các lỗi trong x , khi xaa^b^abx^ixibxi(yi)xx là đủ lớn,

xi1a(yi+b^x^i).

Do đó, chúng tôi có thể cập nhật một bằng cách lắp mô hình này với bình phương nhỏ nhất (thông báo nó chỉ có một tham số - một dốc, một --và không đánh chặn) và lấy nghịch đảo của hệ số như dự toán được cập nhật của một .a^aa

Tiếp theo, khi đủ nhỏ, thuật ngữ bậc hai nghịch đảo chiếm ưu thế và chúng ta tìm thấy (một lần nữa theo thứ tự đầu tiên trong các lỗi) màx

xib212a^b^x^3/2yi2.

Một lần nữa sử dụng phương nhỏ nhất (chỉ với một hạn độ dốc ), chúng tôi có được một ước tính cập nhật b qua căn bậc hai của độ dốc được trang bị.bb^

Để xem lý do tại sao điều này hoạt động, một xấp xỉ thăm dò thô cho phù hợp này có thể thu được bằng cách vẽ so với 1 / y 2 i cho x i nhỏ hơn . Tốt hơn nữa, vì x i được đo bằng lỗi và y i thay đổi đơn điệu với x i , chúng ta nên tập trung vào dữ liệu với các giá trị lớn hơn 1 / y 2 i . Dưới đây là một ví dụ từ bộ dữ liệu mô phỏng của chúng tôi cho thấy một nửa lớn nhất của y ixi1/yi2xixiyixi1/yi2yi màu đỏ, một nửa nhỏ nhất màu xanh lam và một đường thẳng qua điểm gốc phù hợp với các điểm màu đỏ.

Figure

Các điểm xấp xỉ thẳng hàng, mặc dù có một chút độ cong tại các giá trị nhỏ của y . (Chú ý lựa chọn trục: vì x là đo lường, đó là truyền thống để vẽ nó trên dọc trục.) Bằng cách tập trung phù hợp trên những điểm màu đỏ, nơi cong nên được tối thiểu, chúng ta phải có được một ước tính hợp lý của b . Giá trị 0,096 hiển thị trong tiêu đề là căn bậc hai của độ dốc của dòng này: nó chỉ nhỏ hơn 4 % so với giá trị thực!xyxb0.0964

Tại thời điểm này, các giá trị dự đoán có thể được cập nhật thông qua

x^i=f(yi;a^,b^).

Lặp đi lặp lại cho đến khi các ước tính ổn định (không được bảo đảm) hoặc chúng xoay vòng qua các phạm vi giá trị nhỏ (vẫn không thể được đảm bảo).

Hóa ra rất khó ước tính trừ khi chúng ta có một tập hợp tốt các giá trị rất lớn của x , nhưng b - trong đó xác định tiệm cận đứng trong cốt truyện gốc (trong câu hỏi) và là trọng tâm của câu hỏi-- có thể được ghim xuống khá chính xác, miễn là có một số dữ liệu trong tiệm cận đứng. Trong ví dụ của chúng tôi chạy, lặp đi lặp lại làm hội tụ về một = 0.000196 (đó là gần gấp đôi giá trị chính xác của 0,0001 ) và b = 0,1073 (đó là gần đúng giá trị của 0,1axba^=0.0001960.0001b^=0.10730.1). Biểu đồ này hiển thị dữ liệu một lần nữa, trên đó được xếp chồng (a) đường cong thực sự có màu xám (nét đứt) và (b) đường cong ước tính có màu đỏ (rắn):

Fits

Sự phù hợp này tốt đến mức khó có thể phân biệt đường cong thực sự với đường cong được trang bị: chúng trùng nhau gần như ở mọi nơi. Ngẫu nhiên, phương sai sai số ước tính là rất gần với giá trị thực của 4 .3.734

Có một số vấn đề với phương pháp này:

  • Các ước tính là sai lệch. Sự thiên vị trở nên rõ ràng khi tập dữ liệu nhỏ và tương đối ít giá trị gần với trục x. Sự phù hợp là có hệ thống một chút thấp.

  • Quy trình ước tính đòi hỏi một phương thức để nói giá trị "lớn" từ giá trị "nhỏ" của . Tôi có thể đề xuất các cách thăm dò để xác định các định nghĩa tối ưu, nhưng như một vấn đề thực tế, bạn có thể để chúng là các hằng số "điều chỉnh" và thay đổi chúng để kiểm tra độ nhạy của kết quả. Tôi đã đặt chúng tùy ý bằng cách chia dữ liệu thành ba nhóm bằng nhau theo giá trị của y i và sử dụng hai nhóm bên ngoài.yiyi

  • Quy trình sẽ không hoạt động đối với tất cả các kết hợp có thể có của b hoặc tất cả các phạm vi dữ liệu có thể. Tuy nhiên, nó phải hoạt động tốt bất cứ khi nào đủ đường cong được biểu thị trong tập dữ liệu để phản ánh cả hai tiệm cận: cái dọc ở một đầu và cái nghiêng ở đầu kia.ab


Sau đây được viết bằng Mathicala .

estimate[{a_, b_, xHat_}, {x_, y_}] := 
  Module[{n = Length[x], k0, k1, yLarge, xLarge, xHatLarge, ySmall, 
    xSmall, xHatSmall, a1, b1, xHat1, u, fr},
   fr[y_, {a_, b_}] := Root[-b^2 + y^2 #1 - 2 a y #1^2 + a^2 #1^3 &, 1];
   k0 = Floor[1 n/3]; k1 = Ceiling[2 n/3];(* The tuning constants *)
   yLarge = y[[k1 + 1 ;;]]; xLarge = x[[k1 + 1 ;;]]; xHatLarge = xHat[[k1 + 1 ;;]];
   ySmall = y[[;; k0]]; xSmall = x[[;; k0]]; xHatSmall = xHat[[;; k0]];
   a1 = 1/
     Last[LinearModelFit[{yLarge + b/Sqrt[xHatLarge], 
          xLarge}\[Transpose], u, u]["BestFitParameters"]];
   b1 = Sqrt[
     Last[LinearModelFit[{(1 - 2 a1 b  xHatSmall^(3/2)) / ySmall^2, 
          xSmall}\[Transpose], u, u]["BestFitParameters"]]];
   xHat1 = fr[#, {a1, b1}] & /@ y;
   {a1, b1, xHat1}
   ];

Áp dụng điều này cho dữ liệu (được đưa ra bởi các vectơ song song xyđược tạo thành ma trận hai cột data = {x,y}) cho đến khi hội tụ, bắt đầu với các ước tính :a=b=0

{a, b, xHat} = NestWhile[estimate[##, data] &, {0, 0, data[[1]]}, 
                Norm[Most[#1] - Most[#2]] >= 0.001 &,  2, 100]

3
Đây là một câu trả lời tuyệt vời; Tôi có nhiều nghĩa vụ! Tôi đã chơi với điều này, và kết quả trông rất hứa hẹn. Tuy nhiên, tôi sẽ cần thêm một chút thời gian để hiểu đầy đủ lý do :) Ngoài ra: tôi có thể liên hệ với bạn qua trang web của bạn để có thêm một câu hỏi (riêng tư), liên quan đến các xác nhận không?
onnodb

3

Xem những câu hỏi quan trọng @probabilityislogic đã đăng

Nếu bạn chỉ có sai sót trong y, và họ đang phụ gia và bạn có sai không đổi (tức là giả định của bạn phù hợp với những gì nó có vẻ như bạn đã làm), sau đó nếu bạn để cho y=yxyx=x3/21/x

b

x

-

Chỉnh sửa để xem xét các thông tin bổ sung:

y=b+ax

Bây giờ chúng ta có các lỗi nằm ở x và phụ gia. Chúng tôi vẫn không biết nếu phương sai không đổi trên thang đo đó.

x=y/ab/a=my+c

xo=x+ηx

oxo

xo=c+my+ϵϵ=ζxy

Tôi không chắc chắn rằng cải thiện mọi thứ! Tôi tin rằng có những phương pháp cho loại điều đó, nhưng nó không thực sự là khu vực của tôi.

Tôi đã đề cập trong các ý kiến ​​rằng bạn có thể muốn xem xét hồi quy nghịch đảo, nhưng hình thức cụ thể của chức năng của bạn có thể ngăn cản việc đi xa với điều đó.

Bạn thậm chí có thể bị mắc kẹt với việc thử các phương thức khá mạnh mẽ-lỗi-in-x ở dạng tuyến tính đó.

-

y

x


Thanks! It's an interesting transformation, hadn't thought of that --- even though the errors are in x, I'll play around with it anyway!
onnodb

2
"even though the errors are in x" -- yikes, that's kind of important. You may want to check up on inverse regression.
Glen_b -Reinstate Monica

3
...or you could directly fit the model x=13(2ya+21/3y2(27a4b22a3y3+3327a8b44a7b2y3)1/3+(27a4b22a3y3+3327a8b44a7b2y3)1/321/3a2) :-).
whuber

@whuber Hmm. Solving for the cubic, clever. If we write the original in terms of xo where xo is x+ζ, this would leave us with x=(thatmonster)+ϵ, (again with ϵ=ζ) which at least notionally can be done with nonlinear least squares. So that looks like it takes care of the error propagation properly. It might actually work if the OP was to use the linear form I was playing with (using some robust-to-errors-in-the-IV-and-hetero estimation) to get good starting values for the parameters and then try to use this nonlinear LS form to polish it.
Glen_b -Reinstate Monica

I believe linearizing the function x(y) and (ironically) applying nonlinear (weighted) least squares would work, especially if the data were restricted to relatively small values of y where the curve is primarily determined by b.
whuber

0

After some more weeks of experimenting, a different technique seems to work the best in this particular case: Total Least Squares fitting. It's a variant of the usual (nonlinear) Least Squares fitting, but instead of measuring fit errors along just one of the axes (which causes problems in highly nonlinear cases such as this one), it takes both axes into account.

There's a plethora of articles, tutorials and books avaiable on the subject, although the nonlinear case is more elusive. There's even some MATLAB code available.


Thanks for sharing this. I accept that it it might produce good-looking results in your case, but I have two concerns. The first you mention: how exactly does one apply total least squares/errors-in-variables regression/orthogonal regression/Deming regression to nonlinear fits? The second is that this approach does not seem appropriate for your data, in which y is measured essentially without error. When that's the case, you should not be allowing for residuals in the y variable and doing so ought to produce unreliable, biased results.
whuber

@whuber Thanks for expressing your concerns! Right now, I'm still working on running simulations to probe the reliability of TLS fitting for this problem. What I've seen thus far, though, is that TLS' consideration of both variables helps greatly in overcoming the high non-linearity of the model. Fits of simulated data are reliable and converge very well. More work needs to be done though, and I'll definitely have to stack your method up to this one, once we have more actual data available --- and look in detail into your concerns.
onnodb

OK--don't forget I have comparable concerns about the method I proposed!
whuber
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.