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β3
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
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ć.
źródło
Odpowiedzi:
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.
źródło