Znajdowanie punktów przegięcia w R na podstawie wygładzonych danych

14

Mam pewne dane, których gładko używam loess. Chciałbym znaleźć punkty przegięcia wygładzonej linii. czy to możliwe? Jestem pewien, że ktoś wymyślił wymyślną metodę rozwiązania tego ... to znaczy ... w końcu to R!

Nie przeszkadza mi zmiana funkcji wygładzania, której używam. Po prostu użyłem, loessponieważ tego właśnie używałem w przeszłości. Ale każda funkcja wygładzania jest w porządku. Zdaję sobie sprawę, że punkty przegięcia będą zależeć od używanej funkcji wygładzania. Nic mi nie jest. Chciałbym zacząć od posiadania dowolnej funkcji wygładzania, która może pomóc wypluć punkty przegięcia.

Oto kod, którego używam:

x = seq(1,15)
y = c(4,5,6,5,5,6,7,8,7,7,6,6,7,8,9)
plot(x,y,type="l",ylim=c(3,10))
lo <- loess(y~x)
xl <- seq(min(x),max(x), (max(x) - min(x))/1000)
out = predict(lo,xl)
lines(xl, out, col='red', lwd=2)

wprowadź opis zdjęcia tutaj

użytkownik164846
źródło
3
Może chcesz przyjrzeć się analizie punktu zmiany .
nico,
Uważam, że ten wiersz kodu jest bardzo przydatny: infl <- c (FAŁSZ, diff (diff (wyjście)> 0)! = 0)! Ale ten kod znajduje wszystkie punkty zwrotne niezależnie od tego, czy są one zwiększane, czy zmniejszane. Jak mogę stwierdzić, które punkty wyginają się, a które wyginają w szeregu czasowym? Na przykład kreśl i koloruj punkt zwrotny w górę zielony, a w dół czerwony.
user3511894,

Odpowiedzi:

14

Z perspektywy używania R do znajdowania przegięć na wygładzonej krzywej, wystarczy znaleźć te miejsca na wygładzonych wartościach Y, w których znak zmiany przełączników y.

infl <- c(FALSE, diff(diff(out)>0)!=0)

Następnie możesz dodać punkty do wykresu, na których występują te zmiany.

points(xl[infl ], out[infl ], col="blue")

Z punktu widzenia znalezienia statystycznie znaczących punktów przegięcia zgadzam się z @nico, że powinieneś przyjrzeć się analizie zmiany punktu, czasami nazywanej również regresją segmentową.

Jean V. Adams
źródło
Wydaje się, że wykonuje to zadanie całkiem dobrze. Rozumiem, że nie jest idealny, a wynik, który daje, z pewnością nie jest idealny. Dzięki za wkład. Obejmuje większość przypadków z wyjątkiem rzeczy takich jak linia prosta.
user164846,
3
Nie jestem pewien, czy rozumiem @ user164846. Linia prosta nie ma punktów przegięcia.
Jean V. Adams
Możesz także rzucić okiem na wygładzacze, które natychmiast zapewniają pochodne, np. Filtry Savitzky-Golay. Jednak wybór wygładzacza powinien zawsze zależeć od danych i aplikacji, a nie na odwrót!
cbeleites niezadowoleni z SX
4

Na kilku poziomach występują problemy.

Po pierwsze, less jest po prostu płynniejszy i istnieje wiele, wiele do wyboru. Optymiści twierdzą, że prawie każdy rozsądny wygładzacz znajdzie prawdziwy wzór i że prawie wszyscy rozsądni wygładzacze zgadzają się co do prawdziwych wzorów. Pesymiści twierdzą, że to jest problem i że „rozsądne wygładzanie” i „prawdziwe wzorce” są tu definiowane wzajemnie. Do rzeczy, dlaczego less i dlaczego uważasz, że to dobry wybór tutaj? Wybór nie dotyczy tylko jednej wygładzającej lub pojedynczej implementacji wygładzającej (nie wszystko, co pod nazwą less lub lowess jest identyczne w oprogramowaniu), ale także jednego stopnia wygładzania (nawet jeśli jest to wybrane przez rutyna dla ciebie). Wspominasz o tym punkcie, ale to nie dotyczy.

Mówiąc dokładniej, jak pokazuje twój przykład zabawki, podstawowe funkcje, takie jak punkty zwrotne, mogą łatwo nie zostać zachowane przez lessa (nie można też wyróżnić lessa). Twoje pierwsze lokalne minimum znika, a drugie lokalne minimum jest zastępowane przez konkretną płynność, którą pokazujesz. Odmiany zdefiniowane przez zera drugiej pochodnej zamiast pierwszej mogą być jeszcze bardziej zmienne.

Nick Cox
źródło
Wybrałem lessa, ponieważ wyjąłem go z Internetu. Ogólnie mam duże doświadczenie w wygładzaniu, więc po prostu ściągnąłem kod online. Czy masz lepszą sugestię?
user164846,
Przepraszam, ale nie rozumiem twojego komentarza. Jeśli masz duże doświadczenie w wygładzaniu, powinieneś argumentować, za pomocą którego wygładzacze najlepiej zachowują przegięcia, jednocześnie tłumiąc hałas. Wydaje mi się to sprzecznym celem, ale chętnie usłyszę techniczne argumenty, dlaczego się mylę.
Nick Cox,
Przepraszam, nie mam na myśli „niedoświadczonego” haha
user164846,
1
Widzę. Życie jest krótkie i nie można wypróbować każdej możliwej metody. Nie widzimy twoich prawdziwych danych, ale twój przykład zabawki podkreśla, że ​​wygładzanie może usunąć możliwą do zidentyfikowania strukturę.
Nick Cox,
2

Istnieje wiele świetnych podejść do tego problemu. Niektóre obejmują. (1) - punkt wymiany - pakiet (2) - segmentowany - pakiet. Ale musisz wybrać liczbę punktów wymiany. (3) MARS zaimplementowany w pakiecie –arth

W zależności od kompromisu / wariancji wszystkie dają nieco inne informacje. -segmentowane- jest warte zobaczenia. Różną liczbę modeli punktów wymiany można porównać z AIC / BIC

Charles
źródło
1

Być może możesz użyć biblioteki fda, ​​a gdy oszacujesz odpowiednią funkcję ciągłą, możesz łatwo znaleźć miejsca, w których druga pochodna wynosi zero.

FDA CRAN

FDA Intro

DL Dahly
źródło
Zera pierwszej pochodnej określają minima i maksima. Myślę, że masz na myśli drugą. Czym w każdym razie jest „łatwo”? Istnieje więcej niż jeden sposób na rozróżnienie numeryczne.
Nick Cox,