Wie kann man eine Obergrenze für die logistische Regression um nur 5 bis 7 Datenpunkte schätzen?

11

Ich habe Daten in der Form . Für die Schätzung von bis ich die Formeln dieses Papiers: John Fox - Nichtlineare Regression und nichtlineare kleinste Quadrate In diesem Papier wird \ beta_1 anhand der Daten geschätzt. Wenn ich das mache, funktioniert es gut, auch wenn ich nur drei Punkte habe. Daraus kann ich die beiden anderen berechnen. Ich habe meine Parameter mit nls () in R und LevenbergMarquardt in C # getestet. Die von ihnen zurückgegebenen Modelle sind zufriedenstellend.y=β11+exp(β2+β3x)β1β3β1

Das Problem ist, dass ich nicht auf die Daten schauen möchte, um einen guten Schätzer für β1 . Ich möchte, dass mein Programm sie berechnet. Für einige Zeit habe ich Werte verwendet, die etwas höher waren als das Maximum meiner Werte (etwas zwischen max1.1 und max1.5 . Dies funktionierte gut, solange die Punkte den größten Teil der Funktion abdeckten. Es funktionierte auch gut, wenn die Datenpunkte befanden sich irgendwo von der "Spitze" der Kurve, aber als sie alle aus dem Bereich "unterhalb" des Wendepunkts stammten, war dieser Schätzer definitiv niedriger als er sein sollte und ich konnte das Modell nicht anpassen. Wenn ich etwas verwende Das ist definitiv höher als der Maximalpunkt (durch Multiplikation mit lächerlich hohen Werten). Das Modell passt in keiner nützlichen Weise.

Messungen könnten so aussehen:

x = (40, 50, 60, 70), y = (1000, 950, 400, 200) -> leicht abzuschätzen

x = (40, 50, 60, 70), y = (1000, 950, 800, 100) -> leicht abzuschätzen

x = (40, 50, 60, 70), y = (500, 200, 100, 50) -> nicht so einfach abzuschätzen

Ich denke, ich könnte herausfinden, wo ich mich in der Funktion befinde (am "unteren", am "oberen", am Hang), indem ich die Deltas in den gegebenen Punkten berechne und abhängig davon eine Obergrenze berechne. Hat jemand einen Hinweis auf eine bessere Lösung? Zusätzliche Informationen: Wenn dies nicht möglich ist, ist es für mich wichtiger, dass Messungen, die angepasst werden können, so gut wie möglich sind, und ich akzeptiere, dass einige Messungen überhaupt nicht angepasst werden können.

(Obwohl ich eine Implementierung in C # möchte, habe ich sie hier gepostet, glaube ich nicht, dass das Problem sprachabhängig ist.)

Update (Anwendung davon):

x sind Temperaturwerte und y die entsprechenden Messungen. Von Natur aus ist es gegeben, dass es wie eine logistische Kurve mit höheren y-Werten bei niedrigeren Temperaturen aussehen sollte und umgekehrt. Der Schmelzpunkt ist gleich dem Wendepunkt der Kurve, der sich bei kleinen Änderungen der Modellparameter stark ändert.

Update (einige zusammengesetzte Daten mit 7 Datenpunkten und bekanntem Wendepunkt bei 60):

//first I made up some data without any noise and enough (13) points
double[] x17 = { 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90 };
double[] y17 = { 2000, 1920, 1820, 1700, 1500, 1280, 1000, 720, 500, 300, 180, 80, 0 };
//calculated inflection point: 59.642....

//Then I took three different parts of that data 
(to simulate how much data I will have in the real world)
double[] x18 = { 30, 35, 40, 45, 50, 55, 60 };
double[] y18 = { 2000, 1920, 1820, 1700, 1500, 1280, 1000 };
//calculated inflection point: 59.263.... is ok!

double[] x19 = { 60, 65, 70, 75, 80, 85, 90 };
double[] y19 = { 1000, 720, 500, 300, 180, 80, 0 };
//calculated inflection point: 53.447.... to small!

double[] x20 = { 45, 50, 55, 60, 65, 70, 75 };
double[] y20 = { 1700, 1500, 1280, 1000, 720, 500, 300 };
//calculated inflection point: 59.868... almost perfect!

Mein aktueller Ansatz für eine Schätzung der Obergrenze ist y0 * y0 / y1. Auf diese Weise hoffe ich zu berücksichtigen, dass ich möglicherweise nicht immer einen Wert nahe dem Maximum habe.

Update: Die x- und y-Werte werden niemals negativ sein. x ist immer {40, 45, 50, 55, 60, 65, 70}, es sei denn, ein Datenpunkt geht verloren.

Update: Ich habe viele, viele Tests mit simulierten Daten durchgeführt, die einfach anzupassen sein sollten (ich wähle Datenpunkte aus, die genau auf der Kurve liegen = ohne Rauschen), und ich sehe, dass es gut funktioniert, es sei denn, der erste oder zweite Datenpunkt (wo x = 40 oder x = 45) fehlt. Ich denke, ich muss solche Messungen verwerfen und der Benutzer muss damit leben.

Verena Haunschmid
quelle
Bei so wenigen Punkten denke ich, dass Ihr eigentliches Problem die Ungenauigkeit der Schätzungen ist und nicht, wie Sie sie berechnen.
Michael R. Chernick
1
y=β11exp(β2+β3x))
@ MichaelChernick Ich denke du hast recht, das Problem ist, ich werde nie mehr als 7 Datenpunkte bekommen. Ich denke, ich muss die Ergebnisse mit weniger als dem rausschmeißen. Ich habe Testfälle mit Ergebnissen hinzugefügt, die gleich sein sollten. Gibt es Raum für Verbesserungen oder ist dies der nächste, den ich bekommen kann?
Verena Haunschmid
@whuber Ich habe versucht, die Daten mit dem negativen Vorzeichen zu versehen, aber für jeden Parametersatz habe ich einen singulären Gradientenmatrixfehler (in R) erhalten. Welche Schätzer haben Sie genommen? Ich habe Informationen zu dem Bereich hinzugefügt, in dem ich sie verwende, um zu unterstreichen, warum die Kurve so aussehen muss. (Ich bin mir noch nicht sicher, ob Ihre Formel diese Anforderungen erfüllt)
Verena Haunschmid
yy

Antworten:

1

β1β1

Intuitiv beruht diese Lösung auf der Prämisse, dass alle logistischen Kurven mit denselben Raten- und Standortparametern selbstähnlich sind, sodass das Setzen der Obergrenze nur das "Strecken" der Sigmoidkurve auf das entsprechende Maximum bedeutet.

Sycorax sagt Reinstate Monica
quelle