Strategia dopasowania wysoce nieliniowej funkcji


12

Do analizy danych z eksperymentu biofizyki próbuję obecnie dopasować krzywą za pomocą wysoce nieliniowego modelu. Funkcja modelu wygląda następująco:

y=ax+bx1/2

Tutaj szczególnie duże znaczenie ma wartość .b

Wykres dla tej funkcji:

Wykres funkcji

(Zauważ, że funkcja modelu opiera się na dokładnym matematycznym opisie systemu i wydaje się działać bardzo dobrze --- po prostu zautomatyzowane dopasowania są trudne).

Oczywiście funkcja modelu jest problematyczna: strategie dopasowania, które wypróbowałem do tej pory, zawodzą z powodu ostrej asymptoty przy , szczególnie przy zaszumionych danych.x=0

Rozumiem ten problem tutaj: proste dopasowanie najmniejszych kwadratów (grałem z regresją zarówno liniową, jak i nieliniową w MATLAB; głównie Levenberg-Marquardt) jest bardzo wrażliwe na asymptotę pionową, ponieważ małe błędy w x są bardzo wzmocnione .

Czy ktoś mógłby wskazać mi odpowiednią strategię, która mogłaby obejść ten problem?

Mam podstawową wiedzę na temat statystyki, ale wciąż jest dość ograniczona. Chciałbym się uczyć, gdybym tylko wiedział, od czego zacząć :)

Bardzo dziękuję za radę!

Edytuj Błagam o wybaczenie za zapomnienie o wspominaniu błędów. Jedyny znaczący hałas występuje w i jest on addytywny.x

Edytuj 2 Dodatkowe informacje o tle tego pytania. Powyższy wykres modeluje zachowanie rozciągania polimeru. Jak zauważył @whuber w komentarzach, potrzebujesz aby uzyskać wykres podobny do powyższego.b200a

Co do tego, jak ludzie dopasowywali tę krzywą do tego momentu: wydaje się, że ludzie zazwyczaj odcinają pionową asymptotę, dopóki nie znajdą dobrego dopasowania. Wybór odcięcia jest jednak nadal arbitralny, co powoduje, że procedura dopasowania jest niewiarygodna i odtwarzalna.

Edycja 3 i 4 Naprawiono wykres.


3
Czy błędy występują w w czy w obu? W jakiej formie spodziewany jest hałas (multiplikatywny, addytywny itp.)? yxy
probabilityislogic

2
@onnodb: Obawiam się, czy to nie może w zasadniczy sposób zakwestionować solidności samego modelu? Bez względu na to, jaką strategię dopasowania zastosujesz, nie pozostanie bardzo wrażliwy? Czy możesz kiedykolwiek mieć zaufanie do takiego oszacowania dla ? bbb
curious_cat 13.03.2013

1
Niestety to nadal nie zadziała. Tam po prostu nie jest możliwe połączenie i , które nawet jakościowo odtworzenia wykres został sporządzony. (Oczywiście jest ujemne. musi być mniejsze niż najmniejsze nachylenie na wykresie, ale dodatnie, co stawia go w wąskim przedziale. Ale kiedy jest w tym przedziale, po prostu nie jest wystarczająco duży, aby pokonać ogromny ujemny skok na pochodzenie wprowadzone terminem ). Co narysowałeś? Dane? Jakaś inna funkcja? b b b x 1 / 2abbaabx1/2
whuber

1
Dzięki, ale nadal jest źle. Rozszerzając styczną do tego wykresu do tyłu z dowolnego punktu gdzie , przechwycisz oś y w . Ponieważ skok w dół przy pokazuje, że jest ujemny, to przecięcie również musi być ujemne. Ale na twojej figurze jest całkowicie jasne, że większość takich przechwyceń jest dodatnich, rozciągając się aż do . Jest zatem matematycznie niemożliwe, aby równanie takie jak mogło opisać twoją krzywą , nawet w przybliżeniu. Co najmniej musisz dopasować coś takiego jak .x > 0 ( 0 , 3 b / ( 2 x 1 / 2 ) ) 0 b 15,5 r = x + b x 1 / 2 T = x + b x 1 / 2 + c(x,ax+bx1/2)x>0(0,3b/(2x1/2))0b15.5y=ax+bx1/2y=ax+bx1/2+c
whuber

1
Zanim zacząłem nad tym pracować, chciałem się upewnić, że pytanie jest takie: ważne jest, aby funkcja była poprawna. Nie mam teraz czasu na udzielenie pełnej odpowiedzi, ale chciałbym zauważyć, że „inni ludzie” mogą się mylić - ale niestety zależy to od jeszcze więcej szczegółów. Jeśli twój błąd jest naprawdę addytywny , wydaje mi się, że nadal musi być silnie heteroscedastyczny, ponieważ w przeciwnym razie jego wariancja przy małych wartościach byłaby naprawdę niewielka. Co możesz nam powiedzieć - ilościowo - o tym błędzie? xxx
whuber

Odpowiedzi:


10

Metody, których użylibyśmy, aby dopasować to ręcznie (to znaczy eksploracyjną analizę danych), mogą zadziałać wyjątkowo dobrze z takimi danymi.

Chciałbym nieco sparametryzować model , aby jego parametry były dodatnie:

y=axb/x.

Dla danego , załóżmy, że istnieje unikalny rzeczywisty spełniający to równanie; nazwij to lub, dla zwięzłości, gdy zrozumiemy .x f ( y ; a , b ) f ( y ) ( a , b )yxf(y;a,b)f(y)(a,b)

Obserwujemy zbiór uporządkowanych par gdzie odbiegają od przez niezależne losowe zmienne ze średnimi zerowymi. W tej dyskusji założę, że wszystkie mają wspólną wariancję, ale rozszerzenie tych wyników (przy użyciu ważonych najmniejszych kwadratów) jest możliwe, oczywiste i łatwe do wdrożenia. Oto symulowany przykład takiej kolekcji wartości wartości , i wspólnej wariancji .x i f ( y i ; a , b ) 100 a = 0,0001 b = 0,1 σ 2 = 4(xi,yi)xif(yi;a,b)100a=0.0001b=0.1σ2=4

Wykres danych

Jest to (celowo) trudny przykład, co można docenić przez niefizyczne (ujemne) wartości i ich niezwykły rozkład (który zwykle wynosi jednostki poziome , ale może wynosić do lub na osi ). Jeśli uda nam się uzyskać rozsądne dopasowanie do tych danych, które są bliskie oszacowania zastosowanych wartości , i , naprawdę zrobimy to dobrze.± 2 5 6 x a b σ 2x±2 56xabσ2

Wyposażenie eksploracyjne jest iteracyjne. Każdy etap składa się z dwóch etapów: oszacowanie (w oparciu o dane i wcześniejszych oszacowań i z i , z których poprzednie wartości przewidywanych można uzyskać za ), a następnie oszacuj . Ponieważ błędy są w x , dopasowania szacują na podstawie , a nie na odwrót. Aby najpierw uporządkować błędy w , gdy jest wystarczająco duże,b a b x i x i b x I ( r i ) x xaa^b^abx^ixibxi(yi)xx

xi1a(yi+b^x^i).

W związku z tym, możemy aktualizować montując ten model z najmniejszych kwadratów (zawiadomienie to ma tylko jeden parametr - zboczu, --and nie przechwycenia) oraz biorąc odwrotność współczynnika jako zaktualizowanego oszacowania .a^aa

Następnie, gdy jest wystarczająco małe, dominuje odwrotny kwadratowy wyraz i stwierdzamy (ponownie w celu pierwszego uporządkowania błędów), żex

xib212a^b^x^3/2yi2.

Po ponownym użyciem metody najmniejszych kwadratów (z tylko zbocze termin ) otrzymujemy zaktualizowanej estymaty B przez pierwiastek kwadratowy z zamontowanym zbocza.bb^

Aby zrozumieć, dlaczego to działa, surowy rozpoznawcza przybliżenie tego ataku można uzyskać przez wykreślenie przed 1 / r 2 i dla mniejszych X í . Jeszcze lepiej, ponieważ x i mierzy z błędem, a Y i zmienia się monotonicznie z x i , powinniśmy skupić się na danych z większych wartości 1 / r 2 í . Oto przykład z naszego symulowanego zbiorze pokazując największą połowę y Ixi1/yi2xixiyixi1/yi2yi na czerwono, najmniejsza połowa na niebiesko, a linia przechodząca przez początek pasuje do czerwonych punktów.

Postać

Punkty w przybliżeniu się wyrównują, chociaż przy małych wartościach i y występuje trochę krzywizny . (Zwróć uwagę na wybór osi: ponieważ x jest pomiarem, zwykle wykreśla się go na osi pionowej .) Skupiając dopasowanie na czerwonych punktach, w których krzywizna powinna być minimalna, powinniśmy uzyskać rozsądne oszacowanie b . Podana w tytule wartość 0,096 jest pierwiastkiem kwadratowym nachylenia tej linii: to tylko 4 % mniej niż prawdziwa wartość!xyxb0.0964

W tym momencie prognozowane wartości można zaktualizować za pomocą

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

Iteruj, aż oszacowania ustabilizują się (co nie jest gwarantowane) lub przejdą przez małe przedziały wartości (których nadal nie można zagwarantować).

Okazuje się, że jest trudne do oszacowania, chyba że mamy dobry zestaw bardzo dużych wartości x , ale to b - co determinuje pionową asymptotę na oryginalnym wykresie (w pytaniu) i jest w centrum pytania - można przypiąć dość dokładnie, pod warunkiem, że w pionowej asymptocie znajdują się pewne dane. W naszym przykładzie systemem iteracje są zbieżne dla a = 0.000196 (który jest prawie dwukrotnie prawidłowa wartość 0,0001 ) oraz b = 0,1073 (który jest zbliżony do właściwej wartości 0,1axba^=0.0001960.0001b^=0.10730.1). Ten wykres pokazuje dane jeszcze raz, na które nakładają się (a) prawdziwa krzywa w kolorze szarym (przerywanym) i (b) oszacowana krzywa w kolorze czerwonym (ciągłym):

Pasuje

To dopasowanie jest tak dobre, że trudno jest odróżnić prawdziwą krzywą od dopasowanej krzywej: pokrywają się prawie wszędzie. Nawiasem mówiąc, szacowana wariancja błędu jest bardzo zbliżona do prawdziwej wartości 4 .3.734

Z tym podejściem wiążą się pewne problemy:

  • Szacunki są tendencyjne. Odchylenie staje się widoczne, gdy zestaw danych jest mały i stosunkowo niewiele wartości znajduje się w pobliżu osi x. Dopasowanie jest systematycznie trochę niskie.

  • Procedura szacowania wymaga metody powiedzieć „duże” z „małych” wartości . Mógłbym zaproponować eksploracyjne sposoby identyfikacji optymalnych definicji, ale w praktyce można je pozostawić jako stałe „dostrajające” i zmieniać je, aby sprawdzić czułość wyników. Ustawiłem je arbitralnie, dzieląc dane na trzy równe grupy zgodnie z wartością yi i używając dwóch zewnętrznych grup.yiyi

  • Procedura nie będzie działać dla wszystkich możliwych kombinacji i B lub wszystkich możliwych zakresów danych. Powinien on jednak działać dobrze, ilekroć w zestawie danych jest wystarczająca liczba krzywych, aby odzwierciedlić obie asymptoty: pionową na jednym końcu i ukośną na drugim końcu.ab


Kod

W Mathematica napisano poniżej .

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}
   ];

Zastosuj to do danych (podanych przez wektory równoległe xi yuformowanych w macierz dwukolumnową data = {x,y}) aż do zbieżności, zaczynając od oszacowań :a=b=0

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

3
To niesamowita odpowiedź; Jestem bardzo zobowiązany! Bawiłem się tym, a wyniki wyglądają bardzo obiecująco. Potrzebuję jednak trochę więcej czasu, aby w pełni zrozumieć uzasadnienie :) Również: czy mogę skontaktować się z tobą za pośrednictwem Twojej witryny w celu uzyskania jednego dodatkowego (prywatnego) pytania dotyczącego potwierdzeń?
onnodb

3

Zobacz ważne pytania opublikowane przez @probabilityislogic

y=yxyx=x3/21/x

b

x

-

Edytuj, aby uwzględnić dodatkowe informacje:

y=b+ax

Mamy teraz, że błędy są w x i addytywnie. Nadal nie wiemy, czy wariancja jest stała w tej skali.

x=y/ab/a=my+c

xo=x+ηx

oxo

xo=c+my+ϵϵ=ζxy

Nie jestem pewien, czy to poprawi rzeczy! Sądzę, że istnieją metody tego typu, ale tak naprawdę to nie jest mój obszar.

Wspomniałem w komentarzach, że możesz chcieć spojrzeć na regresję odwrotną, ale szczególna forma twojej funkcji może uniemożliwić daleko do tego.

Możesz nawet utknąć w próbach dość solidnych metod na błędy w x w tej liniowej formie.

-

y

x


x

2
nawet jeśli błędy są w x ” - tak, to trochę ważne. Możesz sprawdzić regresję odwrotną.
Glen_b

3
x=13(2ya+21/3y2(27a4b22a3y3+3327a8b44a7b2y3)1/3+(27a4b22a3y3+3327a8b44a7b2y3)1/321/3a2)

xoxox+ζx=(thatmonster)+ϵϵ=ζ

x(y)yb

0

Po kilku tygodniach eksperymentów w tym konkretnym przypadku najlepsza wydaje się inna technika: dopasowanie Total Least Squares . Jest to wariant zwykłego (nieliniowego) dopasowania najmniejszych kwadratów, ale zamiast mierzyć błędy dopasowania wzdłuż jednej z osi (co powoduje problemy w wysoce nieliniowych przypadkach, takich jak ta), bierze pod uwagę obie osie.

Istnieje mnóstwo artykułów, samouczków i książek na ten temat, chociaż nieliniowy przypadek jest bardziej nieuchwytny. Jest nawet dostępny kod MATLAB .


yy

@whuber Dziękujemy za wyrażenie swoich obaw! W tej chwili wciąż pracuję nad uruchomieniem symulacji, aby sprawdzić niezawodność dopasowania TLS do tego problemu. Do tej pory widziałem jednak, że uwzględnienie obu zmiennych przez TLS bardzo pomaga w przezwyciężeniu wysokiej nieliniowości modelu. Pasje symulowanych danych są niezawodne i bardzo dobrze zbiegają się. Trzeba jednak wykonać więcej pracy i na pewno będę musiał połączyć twoją metodę do tej, kiedy będziemy mieli więcej dostępnych danych - i przyjrzymy się szczegółowo twoim obawom.
onnodb

OK - nie zapomnij, że mam podobne obawy dotyczące zaproponowanej przeze mnie metody!
whuber
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.