Zur Analyse von Daten aus einem biophysikalischen Experiment versuche ich derzeit, eine Kurvenanpassung mit einem stark nichtlinearen Modell durchzuführen. Die Modellfunktion sieht grundsätzlich so aus:
Hier ist insbesondere der Wert von von großem Interesse.
Ein Plot für diese Funktion:
(Beachten Sie, dass die Modellfunktion auf einer gründlichen mathematischen Beschreibung des Systems basiert und sehr gut zu funktionieren scheint. Es ist nur so, dass automatisierte Anpassungen schwierig sind.)
Natürlich ist die Modellfunktion problematisch: Anpassungsstrategien, die ich bisher ausprobiert habe, scheitern an der scharfen Asymptote bei , insbesondere bei verrauschten Daten.
Mein Verständnis des Problems hier ist, dass die einfache Anpassung der kleinsten Quadrate (ich habe in MATLAB sowohl mit linearer als auch mit nichtlinearer Regression gespielt; meistens Levenberg-Marquardt) für die vertikale Asymptote sehr empfindlich ist, da kleine Fehler in x enorm verstärkt werden .
Könnte mich jemand auf eine passende Strategie hinweisen, die das umgehen könnte?
Ich habe einige Grundkenntnisse in Statistik, aber das ist immer noch ziemlich begrenzt. Ich würde gerne lernen, wenn ich nur wüsste, wo ich anfangen soll :)
Vielen Dank für Ihren Rat!
Bearbeiten Bitte um Verzeihung, dass Sie vergessen haben, die Fehler zu erwähnen. Das einzige signifikante Rauschen ist in und es ist additiv.
Bearbeiten 2 Einige zusätzliche Informationen zum Hintergrund dieser Frage. Die obige Grafik modelliert das Streckverhalten eines Polymers. Wie @whuber in den Kommentaren ausführte, benötigen Sie , um ein Diagramm wie oben zu erhalten.
Wie die Leute diese Kurve bis zu diesem Punkt angepasst haben: Es scheint, dass die Leute im Allgemeinen die vertikale Asymptote abschneiden, bis sie eine gute Passform finden. Die Auswahl der Abschaltung ist jedoch immer noch willkürlich, wodurch das Anpassungsverfahren unzuverlässig und nicht reproduzierbar wird.
3 & 4 Fixed Graph bearbeiten .
quelle
Antworten:
Die Methoden, die wir verwenden würden, um dies manuell anzupassen (d. H. Von Exploratory Data Analysis), können mit solchen Daten bemerkenswert gut funktionieren.
Ich möchte das Modell leicht umparametrieren , um die Parameter positiv zu machen:
wir für ein gegebenes y an , dass es ein eindeutiges reales x gibt , das diese Gleichung erfüllt. nenne dies f ( y ; a , b ) oder der Kürze halber f ( y ), wenn ( ay x f(y;a,b) f(y) verstanden wird.(a,b)
Wir beobachten eine Ansammlung geordneter Paare denen x i von f ( y i ; a abweicht(xi,yi) xi durch unabhängige Zufallsvariablen mit dem Mittelwert Null , b ) abweichen. In dieser Diskussion gehe ich davon aus, dass sie alle eine gemeinsame Varianz haben, aber eine Erweiterung dieser Ergebnisse (unter Verwendung gewichteter kleinster Quadrate) ist möglich, offensichtlich und einfach zu implementieren. Hier ist ein simuliertes Beispiel einer solchen Sammlung von 100 Werten mit a = 0,0001 , b = 0,1 und einer gemeinsamen Varianz von σf(yi;a,b) 100 a=0.0001 b=0.1 .σ2=4
Dies ist ein (absichtlich) schwieriges Beispiel, wie die nichtphysikalischen (negativen) Werte und ihre außergewöhnliche Streuung (die normalerweise ± 2 horizontale Einheiten beträgt , aber bis zu 5 betragen kann) erkennen lassenx ±2 5 oder auf der x- Achse ) erkennen lassen. Wenn wir eine vernünftige Übereinstimmung mit diesen Daten erzielen können, die der Schätzung von a , b und σ 2 nahekommt , dann sind wir in der Tat erfolgreich.6 x a b σ2
Eine explorative Anpassung ist iterativ. Jede Stufe besteht aus zwei Schritten: Schätzung (basierend auf den Daten und früheren Schätzungen a und b von a und b , von der vorherigen vorhergesagten Werten x i kann für die erhalten wird , x i ) , und dann schätzen b . Da die Fehler in x sind , schätzen die Anpassungen x i aus ( y i ) und nicht umgekehrt. Um zuerst die Fehler in x einzugeben , wenn xa a^ b^ a b x^i xi b xi (yi) x x ausreichend groß ist,
Daher können wir aktualisieren , ein durch den Einbau dieses Modell mit der kleinsten Quadrate (Anmerkung es nur einen Parameter aufweist - eine Steigung, ein --Und kein intercept) und der Kehrwert des Koeffizienten als die aktualisierte Schätzung des Nehmens ein .a^ a a
Als nächstes dominiert , wenn ausreichend klein ist, der umgekehrte quadratische Term und wir finden (wieder in erster Ordnung in den Fehlern), dassx
Erneut unter Verwendung der kleinsten Quadrate (mit nur einer Steigung Begriff ) haben wir eine aktualisierte Schätzung erhalten b über die Quadratwurzel der angepassten Steigung.b b^
Um zu sehen, warum dies funktioniert, kann eine grobe explorative Annäherung an diese Anpassung erhalten werden, indem gegen 1 / y 2 i für das kleinere x i aufgetragen wird . Noch besser wäre es, weil die x i mit Fehler gemessen werden , und die y i monoton ändern sich mit der x i , sollten wir uns auf die Daten konzentrieren mit den größeren Werten von 1 / y 2 i . Hier ist ein Beispiel aus unserem simulierten Datensatz, der die größte Hälfte vonxi 1/y2i xi xi yi xi 1/y2i yi in rot, die kleinste hälfte in blau und eine linie durch den ursprung passen zu den roten punkten.
Die Punkte richten sich ungefähr aus, obwohl es bei den kleinen Werten von und y eine leichte Krümmung gibt . (Beachten Sie die Auswahl der Achsen: weil xx y x das Maß ist, ist es üblich, es auf der vertikalen Achse zu zeichnen .) Durch Fokussieren der Anpassung auf die roten Punkte, bei denen die Krümmung minimal sein sollte, sollten wir eine vernünftige Schätzung von . Der im Titel angezeigte Wert von 0,096 ist die Quadratwurzel der Steigung dieser Linie: Es sind nur 4 % weniger als der wahre Wert!b 0.096 4
Zu diesem Zeitpunkt können die vorhergesagten Werte über aktualisiert werden
Iterieren Sie, bis sich die Schätzungen entweder stabilisieren (was nicht garantiert ist) oder durch kleine Wertebereiche laufen (was immer noch nicht garantiert werden kann).
Es stellt sich heraus, dass nur schwer abzuschätzen ist, wenn wir eine gute Menge sehr großer Werte von x haben , aber dass b - das die vertikale Asymptote in der ursprünglichen Darstellung (in der Frage) bestimmt und im Mittelpunkt der Frage steht - kann ziemlich genau festgehalten werden, vorausgesetzt, es gibt einige Daten innerhalb der vertikalen Asymptote. In unserem laufenden Beispiel tun die Iterationen konvergieren zu einem = 0.000196 (die fast zweimal der richtige Wert von ist 0,0001 ) unda x b a^=0.000196 0.0001 (was nahe dem korrekten Wert von ist0,1b^=0.1073 0.1 ). Dieses Diagramm zeigt noch einmal die Daten, die überlagert sind (a) die wahre Kurve in grau (gestrichelt) und (b) die geschätzte Kurve in rot (durchgehend):
Diese Anpassung ist so gut, dass es schwierig ist, die wahre Kurve von der angepassten Kurve zu unterscheiden: Sie überlappen sich fast überall. Im Übrigen liegt die geschätzte Fehlervarianz von sehr nahe am wahren Wert von 4 .3.73 4
Bei diesem Ansatz gibt es einige Probleme:
Die Schätzungen sind voreingenommen. Die Abweichung wird deutlich, wenn der Datensatz klein ist und relativ wenige Werte nahe an der x-Achse liegen. Die Passform ist systematisch etwas niedrig.
Das Schätzverfahren erfordert ein Verfahren, um "große" von "kleinen" Werten von . Ich könnte explorative Wege vorschlagen, um optimale Definitionen zu identifizieren, aber aus praktischen Gründen können Sie diese als "Tuning" -Konstanten belassen und sie ändern, um die Empfindlichkeit der Ergebnisse zu überprüfen. Ich habe sie willkürlich festgelegt, indem ich die Daten gemäß dem Wert von y i in drei gleiche Gruppen aufteilteyi yi und die beiden äußeren Gruppen verwendete.
Die Prozedur funktioniert nicht für alle möglichen Kombinationen von und b oder alle möglichen Datenbereiche. Es sollte jedoch immer dann gut funktionieren, wenn im Datensatz genügend Kurvenmaterial vorhanden ist, um beide Asymptoten wiederzugeben: die vertikale an einem Ende und die geneigte am anderen Ende.a b
Code
Das Folgende ist in Mathematica geschrieben .
Wenden Sie dies auf Daten an (gegeben durch parallele Vektorena=b=0
x
undy
gebildet in eine zweispaltige Matrixdata = {x,y}
) bis zur Konvergenz, beginnend mit Schätzungen von :quelle
Lesen Sie die wichtigen Fragen unter @probabilityislogic
Wenn Sie nur Fehler in y haben und diese additiv sind und Sie eine konstante Varianz haben (dh Ihre Annahmen stimmen mit dem überein, wie Sie sich angehört haben), dann lassen Siey∗=yx−−√ y∗ x∗=x3/2 1/x
-
Bearbeiten Sie, um die zusätzlichen Informationen zu berücksichtigen:
Wir haben jetzt, dass die Fehler in x und additiv sind. Wir wissen immer noch nicht, ob die Varianz auf dieser Skala konstant ist.
Letx∗o=x∗+η , where this error term may be heteroskedastic (if the original x has constant spread, it will be heteroskedastic, but of known form)
(where theo in x∗o stands for 'observed')
Thenx∗o=c+my∗+ϵ where ϵ=−ζ looks nice but now has correlated errors in the x and y variables; so it's a linear errors-in-variables model, with heteroskedasticity and known form of dependence in the errors.
I am not sure that improves things! I believe there are methods for that kind of thing, but it's not really my area at all.
I mentioned in the comments that you might like to look at inverse regression, but the particular form of your function may preclude getting far with that.
You might even be stuck with trying fairly robust-to-errors-in-x methods in that linear form.
--
Now a huge question: if the errors are in x, how the heck were you fitting the nonlinear model? Were you just blindly minimizing the sum of squared errors iny ? That might well be your problem.
I suppose one could try to rewrite the original thing as a model with errors in thex and try to optimize the fit but I am not sure I see how to set that up right.
quelle
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.
quelle