Знаходження точок перегину в R за згладженими даними


14

У мене є деякі дані, які я легко використовую loess. Я хотів би знайти точки перегину згладженої лінії. Чи можливо це? Я впевнений, що хтось створив фантазійний метод, щоб вирішити це ... Я маю на увазі ... зрештою, це R!

Я добре змінюю функцію згладжування, яку використовую. Я просто використовував, loessтому що саме цим я користувався в минулому. Але будь-яка функція згладжування - це добре. Я розумію, що точки перегину будуть залежати від функції згладжування, яку я використовую. Я з цим все гаразд. Я хотів би почати, просто виконуючи будь-яку функцію згладжування, яка може допомогти виплюнути точки перегину.

Ось код, який я використовую:

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)

введіть тут опис зображення


3
Можливо, ви хочете переглянути аналіз змін .
nico

Я вважаю цей рядок коду дуже корисним: infl <- c (FALSE, diff (diff (out)> 0)! = 0)! Але цей код знаходить усі точки повороту, незалежно від того, повертає його вгору чи вниз. Як я можу визначити, які точки зігнути вгору, а які зігнути вниз за часом? Наприклад, сюжет та колір повороту вгору зелений, а низ - червоний.
користувач3511894

Відповіді:


14

З точки зору використання R, щоб знайти перегини в згладженій кривій, вам просто потрібно знайти ті місця в згладжених значеннях y, де зміна знаків y перемикається.

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

Потім ви можете додати точки до графіка, де відбуваються ці перегини.

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

З точки зору пошуку статистично значущих точок перегину, я погоджуюся з @nico, що ви повинні вивчити аналіз змінних точок, який іноді також називають сегментованою регресією.


Це, здається, робить роботу дещо добре. Я розумію, що це не ідеально, і результат, який він дає, звичайно, не ідеальний. Дякуємо за внесок. Він охоплює більшість випадків, крім речей, таких як пряма лінія.
user164846

3
Я не впевнений, що розумію, @ user164846. Пряма лінія не має точок перегину.
Жан В. Адамс

Крім того, ви можете поглянути на плавніші засоби, які негайно дають похідні, наприклад, Savitzky-Golay-фільтри. Однак вибір гладшого завжди повинен визначатися вашими даними та додатком, а не навпаки!
cbeleites незадоволений SX

4

Тут є проблеми на кількох рівнях.

По-перше, лесс просто буває один плавніший, і є багато, багато з чого вибрати. Оптимісти стверджують, що практично будь-який розумний плавніший знайде справжній зразок і майже всі розумні згладжувачі погоджуються щодо реальних моделей. Песимісти стверджують, що це проблема, і що "розумні згладжування" та "реальні зразки" тут визначаються один з одним. До речі, чому лессе і чому ви вважаєте, що тут хороший вибір? Вибір полягає не лише в одному плавному чи одноманітному здійсненні більш плавного (не все, що йде під назвою leess або lowess, є ідентичним для програмного забезпечення), але також і в одному ступені вирівнювання (навіть якщо це обрано рутина для вас). Ви згадуєте цей пункт, але це не стосується його.

Більш конкретно, як показує приклад вашої іграшки, основні риси, такі як поворотні точки, легко не зберігаються льосом (не виокремлюючи і лес). Ваш перший локальний мінімум зникає, а ваш другий локальний мінімум витісняється певним рівним ви показуєте. Сподівання, що визначаються нулями другої похідної, а не першої, можна очікувати, що вони будуть ще більш непостійними.


Я вибрав льос, бо схопив його з Інтернету. Я взагалі дуже досвідчений в згладжуванні, тому просто схопив код в Інтернеті. У вас є краща пропозиція?
user164846

Вибачте, але я не розумію ваш коментар. Якщо ви дуже досвідчені в згладжуванні, у вас повинні бути аргументи, щодо яких плавніші найкраще зберігають нахили, пригнічуючи шум. Це здається мені суперечливою метою, але я би радий почути технічні аргументи, чому я помиляюся.
Нік Кокс

Вибачте, я маю на увазі не "недосвідчений" ха-ха
user164846

1
Я бачу. Життя коротке, і ви не можете спробувати всі можливі методи. Ми не можемо побачити ваші реальні дані, але ваш приклад іграшки підкреслює, що згладжування може видалити структуру, яку можна ідентифікувати.
Нік Кокс

2

Існує маса чудових підходів до цього питання. Деякі включають. (1) - changepoint- пакет (2) - сегментований - пакет. Але вам потрібно вибрати кількість точок змін. (3) MARS, як реалізовано в пакеті -thearth

Залежно від вашої упередженості / відхилення від змін, все дасть вам трохи іншу інформацію. -сегментовано - варто переглянути. Різну кількість моделей змінних точок можна порівняти з AIC / BIC


1

Можливо, ви можете використовувати бібліотеку fda, ​​і як тільки ви оціните відповідну безперервну функцію, ви зможете легко знайти місця, де друга похідна дорівнює нулю.

FDA CRAN

FDA Intro


Нулі першої похідної визначають мінімуми та максимуми. Я думаю, ти маєш на увазі друге. Що "легко", будь-який спосіб? Існує більше ніж один спосіб чисельної диференціації.
Нік Кокс

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.