Hola a todos: quiero consultarles para estar seguro de que estoy entendiendo bien el funcionamiento de la función smoothSpline() del paquete 'timeSeries'. Tengo una serie temporal con datos mensuales a la cual quiero suavizar usando splines para, por ejemplo, comparar con otras series temporales. Por lo que estuve viendo, me conviene usar la función smoothSpline() que se basa en smooth.spline() del paquete 'stats'. Pero me quedan algunas dudas respecto de los argumentos que se utilizan en ambas funciones. Principalmente, el que más me interesa es 'nknots' y no logro estar seguro de su funcionamiento. Digamos que tengo una serie mensual con 30 años de datos, es decir 360 registros, uno por cada mes. Yo quisiera hacer y comparar distintos suavizados, por ejemplo, "agrupando" de a 6, 12, 24 y 60 meses (perdón pero no sé cuál sería el término exacto en lugar de agrupar). Las dudas que me surgen son: 1- ¿el número que le asigno a 'nknots' divide a la serie en partes iguales?...yo creo que sí, pero no estoy seguro 2- ¿nknots es el número de puntos internos? ¿sin considerar los extremos? 3- si es así, y considerando que tengo 360 datos, si defino nknots=59 ¿estoy dividiendo a la serie en 60 partes, es decir agrupando cada 6 meses (360/60)? y si, por ejemplo, defino nknots=29 ¿la divido en 30 partes, es decir agrupando cada 12 meses (360/30)?...y así sucesivamente. Por ejemplo, el código sería # sri1 es una serie temporal con 360 registros mensuales . . # calculo la curva suavizada con knots=29 sri1.smooth29 <- smoothSpline(sri1, all.knots=FALSE, nknots=29) # dibujo la serie original con la suavizada sobre ella plot(sri1.smooth29, plot.type="single", main="Knots=29 -- 12 meses") . . # lo mismo podría hacer para los otros casos y luego compararlos Espero que se entienda lo que quiero hacer y me puedan ayudar a responder si ¿está bien lo que estoy haciendo? ¿hay alguna otra forma mejor de hacerlo? Muchísimas gracias, Saludos, Lucas. [[alternative HTML version deleted]]
Javier Marcuzzi
2015-Apr-07 20:49 UTC
[R-es] Consulta sobre el correcto uso de smoothSpline()
Estimado Lucas Bianchi Para algunas cosas se usar spline, no justo smoothSpline(), tendía que leerlo y ahora no alcanzo, pero como la idea es sobre los knot, básicamente estos son puntos donde se coloca algo, y ese algo no es obligatorio, puede no ser utilizado. Ese algo que es un punto es utilizado para intentar por decirlo de alguna forma, hacer pasar la curva del ajuste, por ejemplo el knot es 5,50, el algoritmo intentaría hacer pasar por ese punto el ajuste de curva. Sobre los ajustes de curvas y spline y los knot leí varias publicaciones científicas donde cambiaban el lugar y cantidad de estos, y decían este modelo es mejor para...., este otro para ... Pienso que el problema no va a ser de R, le sugiero leer algunas publicaciones sobre el área de la ciencia que necesita e inspirarse en estos para comenzar, creo que podría colocar tantos knot como desde 0 a la cantidad de días que tiene (no seguro), claro, esto último sería medio feo, pero ... Javier Marcuzzi El 7 de abril de 2015, 17:24, lbianchi <lbianchi en zoho.com> escribió:> Hola a todos: > quiero consultarles para estar seguro de que estoy entendiendo bien el > funcionamiento de la función smoothSpline() del paquete 'timeSeries'. > > Tengo una serie temporal con datos mensuales a la cual quiero suavizar > usando splines para, por ejemplo, comparar con otras series temporales. > Por lo que estuve viendo, me conviene usar la función smoothSpline() que > se basa en smooth.spline() del paquete 'stats'. > Pero me quedan algunas dudas respecto de los argumentos que se utilizan en > ambas funciones. Principalmente, el que más me interesa es 'nknots' y no > logro estar seguro de su funcionamiento. > > Digamos que tengo una serie mensual con 30 años de datos, es decir 360 > registros, uno por cada mes. > Yo quisiera hacer y comparar distintos suavizados, por ejemplo, > "agrupando" de a 6, 12, 24 y 60 meses (perdón pero no sé cuál sería el > término exacto en lugar de agrupar). > Las dudas que me surgen son: > 1- ¿el número que le asigno a 'nknots' divide a la serie en partes > iguales?...yo creo que sí, pero no estoy seguro > 2- ¿nknots es el número de puntos internos? ¿sin considerar los extremos? > 3- si es así, y considerando que tengo 360 datos, si defino nknots=59 > ¿estoy dividiendo a la serie en 60 partes, es decir agrupando cada 6 meses > (360/60)? y si, por ejemplo, defino nknots=29 ¿la divido en 30 partes, es > decir agrupando cada 12 meses (360/30)?...y así sucesivamente. > > Por ejemplo, el código sería > > # sri1 es una serie temporal con 360 registros mensuales > . > . > # calculo la curva suavizada con knots=29 > sri1.smooth29 <- smoothSpline(sri1, all.knots=FALSE, nknots=29) > # dibujo la serie original con la suavizada sobre ella > plot(sri1.smooth29, plot.type="single", main="Knots=29 -- 12 meses") > . > . > # lo mismo podría hacer para los otros casos y luego compararlos > > > Espero que se entienda lo que quiero hacer y me puedan ayudar a responder > si ¿está bien lo que estoy haciendo? ¿hay alguna otra forma mejor de > hacerlo? > > Muchísimas gracias, > Saludos, > > Lucas. > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]
Olivier Nuñez
2015-Apr-08 07:42 UTC
[R-es] Consulta sobre el correcto uso de smoothSpline()
Lucas, en tu lugar, optaría por una media móvil que es un suavizado básico y fácil de controlar. El paquete "zoo" es muy útil para el manejo de series temporales. La función rollmean() de este paquete debería darte buenos resultados. Un saludo. Olivier ----- Mensaje original ----- De: "Javier Marcuzzi" <javier.ruben.marcuzzi en gmail.com> Para: "lbianchi" <lbianchi en zoho.com> CC: "r-help-es" <r-help-es en r-project.org> Enviados: Martes, 7 de Abril 2015 22:49:31 Asunto: Re: [R-es] Consulta sobre el correcto uso de smoothSpline() Estimado Lucas Bianchi Para algunas cosas se usar spline, no justo smoothSpline(), tendía que leerlo y ahora no alcanzo, pero como la idea es sobre los knot, básicamente estos son puntos donde se coloca algo, y ese algo no es obligatorio, puede no ser utilizado. Ese algo que es un punto es utilizado para intentar por decirlo de alguna forma, hacer pasar la curva del ajuste, por ejemplo el knot es 5,50, el algoritmo intentaría hacer pasar por ese punto el ajuste de curva. Sobre los ajustes de curvas y spline y los knot leí varias publicaciones científicas donde cambiaban el lugar y cantidad de estos, y decían este modelo es mejor para...., este otro para ... Pienso que el problema no va a ser de R, le sugiero leer algunas publicaciones sobre el área de la ciencia que necesita e inspirarse en estos para comenzar, creo que podría colocar tantos knot como desde 0 a la cantidad de días que tiene (no seguro), claro, esto último sería medio feo, pero ... Javier Marcuzzi El 7 de abril de 2015, 17:24, lbianchi <lbianchi en zoho.com> escribió:> Hola a todos: > quiero consultarles para estar seguro de que estoy entendiendo bien el > funcionamiento de la función smoothSpline() del paquete 'timeSeries'. > > Tengo una serie temporal con datos mensuales a la cual quiero suavizar > usando splines para, por ejemplo, comparar con otras series temporales. > Por lo que estuve viendo, me conviene usar la función smoothSpline() que > se basa en smooth.spline() del paquete 'stats'. > Pero me quedan algunas dudas respecto de los argumentos que se utilizan en > ambas funciones. Principalmente, el que más me interesa es 'nknots' y no > logro estar seguro de su funcionamiento. > > Digamos que tengo una serie mensual con 30 años de datos, es decir 360 > registros, uno por cada mes. > Yo quisiera hacer y comparar distintos suavizados, por ejemplo, > "agrupando" de a 6, 12, 24 y 60 meses (perdón pero no sé cuál sería el > término exacto en lugar de agrupar). > Las dudas que me surgen son: > 1- ¿el número que le asigno a 'nknots' divide a la serie en partes > iguales?...yo creo que sí, pero no estoy seguro > 2- ¿nknots es el número de puntos internos? ¿sin considerar los extremos? > 3- si es así, y considerando que tengo 360 datos, si defino nknots=59 > ¿estoy dividiendo a la serie en 60 partes, es decir agrupando cada 6 meses > (360/60)? y si, por ejemplo, defino nknots=29 ¿la divido en 30 partes, es > decir agrupando cada 12 meses (360/30)?...y así sucesivamente. > > Por ejemplo, el código sería > > # sri1 es una serie temporal con 360 registros mensuales > . > . > # calculo la curva suavizada con knots=29 > sri1.smooth29 <- smoothSpline(sri1, all.knots=FALSE, nknots=29) > # dibujo la serie original con la suavizada sobre ella > plot(sri1.smooth29, plot.type="single", main="Knots=29 -- 12 meses") > . > . > # lo mismo podría hacer para los otros casos y luego compararlos > > > Espero que se entienda lo que quiero hacer y me puedan ayudar a responder > si ¿está bien lo que estoy haciendo? ¿hay alguna otra forma mejor de > hacerlo? > > Muchísimas gracias, > Saludos, > > Lucas. > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es