36 votos

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

¿Existe una buena forma 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 tengan la misma media y desviación estándar. Estaría bien que hubiera una función que me diera una puntuación suave sobre una serie temporal.

6 votos

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 la estadística, de la rugosidad de una superficie": goldensoftware.com/variogramaTutorial.pdf , p. 16.) La suavidad está relacionada con la extrapolación del variograma a la distancia cero. (La SD de las diferencias sucesivas y la autocorrelación del lag uno son versiones rápidas y sucias de esto). La información esencial está contenida en los coeficientes de la serie de Taylor en 0. Por ejemplo, una constante distinta de cero es realmente áspera; un cero de alto orden en 0 indica una serie muy suave.

1 votos

He oído hablar de hurst exponentes también.

0 votos

Qué curioso, yo también me he preguntado exactamente lo mismo. ¡Gracias por publicarlo!

32voto

Senseful Puntos 116

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 da una medida dependiente de la escala. Una medida similar independiente de la escala utilizarí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.

2 votos

Esa puntuación no es invariable en la escala, lo que puede tener sentido o no dependiendo de la aplicación. (Y mi propia sugerencia es invariante de la escala, por lo que la misma preocupación se aplica a ella). Además, vale la pena señalar que para la puntuación anterior, los valores más pequeños indican series temporales más suaves.

2 votos

Gracias @Cyan. Ahora he añadido una versión independiente de la escala también.

3 votos

¿Realmente tiene la intención de incluir diff en los denominadores? Los valores se reducirían algebraicamente a (x[n]-x[1])/(n-1) que es una medida (burda) de la tendencia y debería, en muchos casos, estar muy cerca de cero, lo que da lugar a una estadística inestable y no muy significativa. Esto me desconcierta, pero quizá esté pasando por alto algo obvio...

17voto

Cyan Puntos 1965

El lag-uno autocorrelación servirá como puntuación y también tiene una interpretación estadística razonablemente sencilla.

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

Interpretación de la puntuación:

  • Las puntuaciones cercanas a 1 implican una serie que varía suavemente
  • Las puntuaciones cercanas a 0 implican que no hay una relación lineal global entre un punto de datos y el siguiente (es decir, plot(x[-length(x)],x[-1]) no dará un gráfico de dispersión con ninguna linealidad aparente)
  • Las puntuaciones cercanas 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 la misma cantidad, y viceversa.

3voto

com Puntos 181

Para estimar la rugosidad de un conjunto, tome la diferencia al cuadrado de las diferencias normalizadas y divídala por 4. Esto le da independencia de la escala (debido a la normalización), e ignora las tendencias (debido al uso de la segunda diferencia).

firstD = diff(x)
normFirstD = (firstD - mean(firstD)) / sd(firstD)
roughness = (diff(normFirstD) ** 2) / 4

Cero será la suavidad perfecta, 1 es la rugosidad máxima.

A continuación, se utiliza la suma de esta medida o su media, dependiendo de si se desea que la medida de rugosidad sea independiente de la longitud.

Creo que esto puede ser lo mismo que una respuesta anterior en otro lugar:

Y cosas similares se discuten en fuentes académicas como este y este diciendo que debemos integrar la segunda derivada al cuadrado.

No leo álgebra, así que no estoy seguro de que lo que sugiero sea lo mismo que cualquiera de estos.

-1voto

Juriy Puntos 133

Podrías simplemente comprobar la correlación con el número de pasos de tiempo. Eso equivaldría a tomar el R² de una simple regresión lineal sobre las series temporales. Sin embargo, hay que tener en cuenta que se trata de dos series temporales muy diferentes, así que no sé qué tan bien funciona eso como comparación.

5 votos

Eso sería una medida de la linealidad con el tiempo, pero no de la suavidad.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X