Tengo algunos datos que uso sin problemas loess
. Me gustaría encontrar los puntos de inflexión de la línea suavizada. es posible? Estoy seguro de que alguien ha hecho un método elegante para resolver esto ... Quiero decir ... después de todo, ¡es R!
Estoy bien con cambiar la función de suavizado que uso. Solo lo utilicé loess
porque eso era lo que yo había usado en el pasado. Pero cualquier función de suavizado está bien. Me doy cuenta de que los puntos de inflexión dependerán de la función de suavizado que use. Estoy de acuerdo con eso. Me gustaría comenzar simplemente teniendo cualquier función de suavizado que pueda ayudar a escupir los puntos de inflexión.
Aquí está el código que uso:
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)
Respuestas:
Desde la perspectiva de usar R para encontrar las inflexiones en la curva suavizada, solo necesita encontrar esos lugares en los valores y suavizados donde el cambio en y cambia de signo.
Luego puede agregar puntos al gráfico donde ocurren estas inflexiones.
Desde la perspectiva de encontrar puntos de inflexión estadísticamente significativos, estoy de acuerdo con @nico en que debe analizar el análisis de puntos de cambio, a veces también denominado regresión segmentada.
fuente
Hay problemas en varios niveles aquí.
En primer lugar, loess resulta ser más suave y hay muchos, muchos para elegir. Los optimistas argumentan que casi cualquier suavizador razonable encontrará un patrón real y que casi todos los suavizadores razonables están de acuerdo en patrones reales. Los pesimistas sostienen que este es el problema y que los "suavizadores razonables" y los "patrones reales" se definen aquí en términos mutuos. Hasta el punto, ¿por qué loess y por qué crees que es una buena opción aquí? La elección no es solo un único suavizador o una sola implementación de un suavizador (no todo lo que se conoce con el nombre de loess o lowess es idéntico en todo el software), sino también un único grado de suavizado (incluso si es elegido por el rutina para ti). Usted menciona este punto, pero eso no lo aborda.
Más específicamente, como muestra su ejemplo de juguete, las características básicas como los puntos de inflexión pueden no ser fácilmente preservadas por loess (tampoco para destacarlo). Su primer mínimo local desaparece y su segundo mínimo local es desplazado por la suavidad particular que muestra. Se puede esperar que las inflexiones definidas por ceros de la segunda derivada en lugar de la primera sean aún más volubles.
fuente
Hay un montón de excelentes enfoques para este problema. Algunos incluyen (1) - paquete de punto de cambio (2) - segmentado - paquete. Pero debe elegir el número de puntos de cambio. (3) MARS implementado en el paquete -earth-
Dependiendo de su compromiso de sesgo / variación, todo le dará información ligeramente diferente. -segmentado- bien vale la pena echarle un vistazo. Se pueden comparar diferentes números de modelos de puntos de cambio con AIC / BIC
fuente
Tal vez podría usar la biblioteca fda, y una vez que haya estimado una función continua apropiada, puede encontrar fácilmente los lugares donde la segunda derivada es cero.
GRÚA DE LA FDA
Introducción a la FDA
fuente
He recibido muchas visitas al blog sobre el paquete changepoint (> 650 a partir del 11 de noviembre de 2014), así que aquí hay una publicación actualizada con CausalImpact. http://r-datameister.blogspot.com/2014/11/causality-in-time-series-look-at-2-r.html
fuente