Jak oszacować górną granicę dla regresji logistycznej tylko o 5 do 7 punktów danych?

11

Mam dane w postaci . Do oszacowania do używam wzorów tego artykułu: John Fox - Regresja nieliniowa i nieliniowe najmniejsze kwadraty W tym artykule szacuje się patrząc na dane. Jeśli to zrobię, działa dobrze, nawet jeśli mam tylko trzy punkty. Na tej podstawie mogę obliczyć dwa pozostałe. Testowałem moje parametry za pomocą nls () w R i LevenbergMarquardt w C #. Zwrócone przez nich modele są zadowalające. β1β3y=β11+exp(β2+β3x)β1β3β1

Problem polega na tym, że nie chcę patrzeć na dane, aby uzyskać dobry estymator dla , chcę, aby mój program go obliczył. Przez pewien czas używałem wartości, które były nieco wyższe niż maksimum moich wartości (coś pomiędzy a \ max * 1.5 . Działa to dobrze, o ile punkty pokrywają większość funkcji. Działa również dobrze, jeśli punkty danych znajdowały się gdzieś z „szczytu” krzywej, ale kiedy wszystkie pochodzą z obszaru „poniżej” punktu przegięcia, ten estymator był zdecydowanie niższy niż powinien i nie mogłem dopasować modelu. który jest zdecydowanie wyższy niż maksymalny punkt (pomnożenie go przez absurdalnie wysokie wartości) model nie pasuje w żaden użyteczny sposób. maks. 1,1β1max1.1max1.5

Pomiary mogą wyglądać następująco:

x = (40, 50, 60, 70), y = (1000, 950, 400, 200) -> łatwy do oszacowania

x = (40, 50, 60, 70), y = (1000, 950, 800, 100) -> łatwe do oszacowania

x = (40, 50, 60, 70), y = (500, 200, 100, 50) -> nie tak łatwo oszacować

Myślę, że mogłem dowiedzieć się, gdzie jestem w funkcji (na „dole”, na „górze”, na zboczu), obliczając delty w danych punktach i obliczając górną granicę w zależności od tego. Czy ktoś ma podpowiedź do lepszego rozwiązania? Informacje dodatkowe: Jeśli nie można tego zrobić, ważniejsze jest dla mnie, aby pomiary, które można dopasować, były tak dobre, jak to możliwe, i zgadzam się, że niektóre pomiary w ogóle nie mogą być dopasowane.

(chociaż chcę implementacji w C # opublikowałem ją tutaj, nie sądzę, że problem jest zależny od języka)

aktualizacja (zastosowanie tego):

x to wartości temperatury i odpowiednie pomiary. Z natury jest powiedziane, że powinna ona wyglądać jak krzywa logistyczna o wyższych wartościach y w niższych temperaturach i odwrotnie. Temperatura topnienia jest równa punktowi przegięcia krzywej, która bardzo się zmienia przy niewielkich zmianach parametrów modelu.

aktualizacja (niektóre skomponowane dane z 7 punktami danych i znanym punktem przegięcia przy 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!

Moje obecne podejście do oszacowania górnej granicy to y0 * y0 / y1. W ten sposób mam nadzieję wziąć pod uwagę, że nie zawsze mogę mieć wartość zbliżoną do maksymalnej.

aktualizacja: Wartości xiy nigdy nie będą ujemne. x zawsze będzie wynosić {40, 45, 50, 55, 60, 65, 70}, chyba że punkt danych zostanie utracony.

aktualizacja: Zrobiłem wiele, wiele testów z symulowanymi danymi, które powinny być łatwe do dopasowania (wybieram punkty danych, które były dokładnie na krzywej = bez hałasu) i widzę, że działa dobrze, chyba że pierwszy lub drugi punkt danych (gdzie brakuje x = 40 lub x = 45). Chyba będę musiał odrzucić takie pomiary, a użytkownik będzie musiał z tym żyć.

Verena Haunschmid
źródło
Przy tak małej liczbie punktów myślę, że twoim prawdziwym problemem jest niedokładność szacunków, a nie sposób ich obliczania.
Michael R. Chernick,
1
Problem z ostatnim przykładem polega na tym, że o wiele lepsze dopasowanie uzyskuje się za pomocą funkcji (zwróć uwagę na znak ujemny). Czy to akceptowalne rozwiązanie? Jeśli nie, nadal będziesz mieć problemy, ponieważ będziesz musiał zaakceptować rozwiązania na granicy między dwoma modelami (a te są okropne). y=β11exp(β2+β3x))
whuber
@MichaelChernick Chyba masz rację, problemem jest to, że nigdy nie dostanę więcej niż 7 punktów danych. Chyba muszę wyrzucić wyniki z mniejszą ilością. Dodałem przypadki testowe z wynikami, które powinny być takie same. Czy jest miejsce na ulepszenia, czy jest to najbliższe osiągnięcie?
Verena Haunschmid
@ whuber Próbowałem dopasować dane ze znakiem ujemnym, ale dla każdego zestawu parametrów wystąpił pojedynczy błąd macierzy gradientu (w R). Które estymatory wziąłeś? Dodałem informacje o obszarze, w którym go używam, aby podkreślić, dlaczego krzywa musi tak wyglądać. (Nie jestem jeszcze pewien, czy Twoja formuła spełnia te wymagania)
Verena Haunschmid
(1) W jakich jednostkach są wartości ? Jeśli mogą być ujemne, prawdopodobnie Twój model nie będzie działał. (2) Co możesz nam powiedzieć o naturze „szumu” lub błędów w wartościach ? Może to mieć kluczowe znaczenie dla dopasowania. yyy
whuber

Odpowiedzi:

1

Pracowałem nad podobnym problemem na początku tego roku. Rozwiązanie, którego użyłem, oparte było na tym dokumencie , który wykorzystuje algebrę liniową do wyeliminowania . W ten sposób wyniki dla pozostałych parametrów, po określeniu za pomocą jakiejś procedury (po prostu zminimalizowałem powierzchnię błędu, tak jak w pracy), można wykorzystać do wnioskowania na końcu .β 1β1β1

Intuicyjnie to rozwiązanie opiera się na założeniu, że wszystkie krzywe logistyczne z tymi samymi parametrami szybkości i lokalizacji są do siebie podobne, tak więc ustawienie górnej granicy oznacza po prostu „rozciągnięcie” krzywej sigmoidalnej do odpowiedniego maksimum.

Sycorax mówi Przywróć Monikę
źródło