¿Cómo medir la suavidad de una serie temporal en R?

25

¿Hay una buena manera de medir la suavidad de una serie temporal en R? Por ejemplo,

-1, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1.0

es mucho más suave que

-1, 0.8, -0.6, 0.4, -0.2, 0, 0.2, -0.4, 0.6, -0.8, 1.0

aunque tienen la misma media y desviación estándar. Sería genial si hay una función para darme un puntaje suave en una serie de tiempo.

agmao
fuente
44
La suavidad tiene un significado bien definido en la teoría de los procesos estocásticos. ("Un variograma es una descripción cuantitativa, basada en estadísticas, de la rugosidad de una superficie": goldensoftware.com/variogramTutorial.pdf , p. 16.) La suavidad está relacionada con la extrapolación de la distancia del variograma a cero. (La SD de las diferencias sucesivas y la autocorrelación lag-one son versiones rápidas y sucias de esto). La información esencial está contenida en los coeficientes de la serie Taylor en 0. Por ejemplo, una constante distinta de cero es aproximada; un cero de alto orden en 0 indica una serie muy suave.
whuber
También he oído hablar de exponentes de hurst .
Taylor
Qué gracioso, me he estado preguntando exactamente lo mismo. ¡Gracias por publicar!
Chris Beeley
@whuber: esa es una respuesta, no un comentario.
naught101
@ naught101 Humildemente ruego diferir: mi comentario es a propósito de una situación relacionada y se refiere solo al proceso teórico utilizado para modelar datos espaciales, no a cómo uno realmente estimaría esa suavidad. Hay un arte en esa estimación con el que estoy familiarizado en múltiples dimensiones, pero no en una, que es especial (debido a la dirección de la flecha del tiempo), por lo que dudo en afirmar que aplicar los procedimientos multidimensionales a las series de tiempo es en absoluto convencional o incluso un buen enfoque.
whuber

Respuestas:

22

La desviación estándar de las diferencias le dará una estimación aproximada de la suavidad:

x <- c(-1, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1.0)
y <- c(-1, 0.8, -0.6, 0.4, -0.2, 0, 0.2, -0.4, 0.6, -0.8, 1.0)
sd(diff(x))
sd(diff(y))

Actualización: como señala Cyan, eso te da una medida dependiente de la escala. Una medida independiente de escala similar usaría el coeficiente de variación en lugar de la desviación estándar:

sd(diff(x))/abs(mean(diff(x)))
sd(diff(y))/abs(mean(diff(y)))

En ambos casos, los valores pequeños corresponden a series más suaves.

Rob Hyndman
fuente
1
Esa puntuación no es invariante de escala, lo que puede tener sentido o no según la aplicación. (Y mi propia sugerencia es invariante de escala, por lo que se aplica la misma preocupación). Además, vale la pena señalar que para el puntaje anterior, los valores más pequeños indican series de tiempo más suaves.
Cyan
1
Gracias @Cyan. Ahora también he agregado una versión independiente de la escala.
Rob Hyndman
2
¿Realmente tiene la intención de incluir diffen los denominadores? Los valores se reducirían algebraicamente a lo (x[n]-x[1])/(n-1)que es una medida (cruda) de tendencia y, en muchos casos, debería ser extremadamente cercana a cero, lo que da como resultado una estadística inestable y no terriblemente significativa. Estoy desconcertado por eso, pero tal vez estoy pasando por alto algo obvio ...
whuber
1
Solía diffevitar una suposición de estacionariedad. Si se definiera con el denominador abs(mean(x)), la escala solo funcionaría cuando xfuera estacionaria. Tomar diffs significa que también funcionará para procesos estacionarios de diferencia. Por supuesto, las diferencias pueden no ser xestacionarias y aún existen problemas. Escalar series temporales es complicado por este motivo. Pero entiendo tu punto sobre la estabilidad. Creo que hacer algo mejor requeriría algo sustancialmente más sofisticado: usar un suavizador no paramétrico, por ejemplo.
Rob Hyndman
1
Pensé que una tendencia constante debería ser perfectamente suave, por lo que la respuesta debería ser 0.
Rob Hyndman
13

La autocorrelación de retraso uno servirá como una puntuación y también tiene una interpretación estadística razonablemente sencilla.

cor(x[-length(x)],x[-1])

Interpretación de puntaje:

  • las puntuaciones cercanas a 1 implican una serie que varía suavemente
  • las puntuaciones cercanas a 0 implican que no existe una relación lineal general entre un punto de datos y el siguiente (es decir, plot (x [-length (x)], x [-1]) no dará un diagrama de dispersión con ninguna linealidad aparente)
  • los puntajes cercanos a -1 sugieren que la serie es irregular de una manera particular: si un punto está por encima de la media, es probable que el siguiente esté por debajo de la media en aproximadamente la misma cantidad, y viceversa.
Cian
fuente
0

Simplemente puede verificar la correlación con el número de paso de tiempo. Eso sería equivalente a tomar el R² de una regresión lineal simple en la serie de tiempo. Sin embargo, tenga en cuenta que esas son dos series temporales muy diferentes, por lo que no sé qué tan bien funciona en comparación.

nada101
fuente
44
Eso sería una medida de la linealidad con el tiempo, pero no de la suavidad.
Rob Hyndman