Análisis de series temporales con R (II): Estacionariedad y raíces unitarias

4.8
(33)

En esta entrada vamos a retomar el concepto de estacionariedad de una serie temporal.

¿Qué es la estacionariedad?

Como mencionamos en el post anterior sobre series temporales, una serie temporal es estacionaria cuando la media y la variabilidad se mantienen constantes a lo largo del tiempo, es decir, no es en función del tiempo; y además, no presenta tendencia.

Aquí nos centramos en la media, varianza y autocorrelación.

Para entenderlo mejor, veamos los siguiente gráficos, los cuales me parecieron muy ilustrativos y son tomados de la web Analytics Vidhya:

Serie temporal estacionaria en media

Como se puede apreciar, la serie temporal del lado izquierdo presenta una media constante, mientras que la de la derecha presenta tendencia, con una media que se incrementa con el paso del tiempo.

Serie temporal estacionaria en varianza

Como observamos, en la imagen anterior, la gráfica del lado izquierdo es estacionaria, mientras que la del lado derecho presenta una variabilidad que aumenta con el nivel de la serie, lo que se conoce como heterocedasticidad.

Serie temporal estacionaria-autocovarianza

En la imagen anterior, se observa una serie estacionaria en el lado izquierdo, y en el derecho una serie con autocovarianza que está en función del tiempo.

¿Por qué es importante que las series temporales sean estacionarias?

Porque, en la mayoría de modelos y análisis de series temporales, es indispensable que éstas sean estacionarias, parten bajo éste supuesto. Cuando no es el caso, el primer requisito suele ser estacionariedad, lo cual se suele conseguir aplicando logaritmos (para corregir heterocedasticidad), diferencia regular (eliminar tendencia), diferencia estacional (eliminar componente estacional), etc. Entonces a partir de aquí, intentar construir modelos estocásticos para poder predecir la serie.

Hay que tener en cuenta que regresiones con MCO y variables no estacionarias pueden generar regresiones espurias, esto es, regresiones con estimadores sesgados y donde se obtiene un R² alto y altos t-estadísticos; pero en estos casos, el criterio convencional para juzgar si hay una relación causal entre las variables no es confiable y aunque dichos estadísticos y R² sean estadísticamente significativos realmente no existe una relación.

Para ejemplificar; modelos estacionarios, suelen referirse a los modelos de medias móviles y modelos ARMA; en cuanto a modelos no estacionarios, encontramos los modelos ARIMA, ARCH y GARCH.

Ahora, vamos a realizar algunos test estadísticos para comprobar si la serie es estacionaria o no, y para ello, vamos a seguir trabajando con la serie del post anterior, el dataset que trae por defecto R sobre pasajeros mensuales de las aerolíneas internacionales en el período comprendido entre 1949 y 1960, el dataset se llama “AirPassengers”.

Al comprobar con “class”, observamos que nos arroja un objeto de la clase “ts”, equivalente a “time series”.

data(AirPassengers)

Pasajeros <- AirPassengers
class(Pasajeros)
## [1] "ts"

Si queremos saber los estadísticos principales:

summary(Pasajeros)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   104.0   180.0   265.5   280.3   360.5   622.0

Graficamos la serie:

plot(Pasajeros)

plot of chunk unnamed-chunk-39

Tal como habíamos analizado en el post anterior, en el gráfico podemos observar que la serie tiene tendencia, heterocedasticidad y un componente estacional, los cuales tratamos aplicando logaritmos y diferenciando la serie.

Ahora, para entender mejor lo anterior, graficamos descomponiendo la serie:

plot(decompose(Pasajeros))

plot of chunk unnamed-chunk-40

En el último gráfico, claramente se puede observar la tendencia y el componente estacional.

¿Raíces unitarias?

Así que ahora, vamos a realizar tests de raíces unitarias, para analizar las propiedades de la estacionariedad, teniendo presente que cuando una serie o proceso tiene raíz unitaria, la serie no es estacionaria y los estimadores MCO no tienen distribución normal.

Una raíz unitaria, es una tendencia estocástica en la serie temporal. Algunas veces se le llama “paseo aleatorio con deriva”. Por tanto, si la serie tiene una raíz unitaria, ésta presenta un patrón sistemático que es impredecible.

Entonces, una serie temporal es estacionaria si un cambio en el tiempo no cambia la forma de la distribución; y las raíces unitarias son una causa de no estacionariedad.

Existen dos procedimientos comunes para remover la tendencia de una serie temporal (1) primeras diferencias (2) regresión tendencial. Las primeras diferencias suelen ser apropiadas para series temporales integradas de orden uno -I(1)-; mientras que la regresión tendencial es apropiada para series con estacionariedad tendencial I(0). Los tests de raíces unitarias pueden ser usados para determinar si una serie con tendencia primero deber ser diferenciada o hacer una regresión tendencial, esto es, si hay estacionariedad tendencial o diferencial.

  • El test de Dickey-Fuller Aumentado (Augmented Dickey-Fuller Test (ADF), en inglés), elimina la autocorrelación e indica si una serie es estacionaria o no.
  • El test de Phillips–Perron (PP), es una modificación de test de Dickey-Fuller. Este test corrige la autocorrelación y heterocedasticidad en los errores.

Para aplicar los tests anteriores, vamos a usar el paquete “tseries”.

En estos tests, la hipótesis nula es que la serie tiene raíces unitarias, por tanto, no es estacionaria. Por ende, la hipótesis alternativa es que la serie es estacionaria (alternative=“stationary”) y k, corresponde al orden de lags o retrasos.

Con un p-valor inferior a 0.05, la hipótesis nula se suele rechazar.

Veamos el test de Dickey-Fuller Aumentado “adf.test”:

library(tseries)
adf.test(diff(log(Pasajeros)), alternative="stationary", k=0)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff(log(Pasajeros))
## Dickey-Fuller = -9.6003, Lag order = 0, p-value = 0.01
## alternative hypothesis: stationary

Como se puede observar, después de aplicar logaritmos y diferenciar la serie, ahora sí es estacionaria; un p-valor de 0.01, indica que rechazamos la hipótesis nula de no estacionariedad.

Ahora, aplicamos el test de PP:

pp.test(diff(log(Pasajeros), alternative="stationary"))
## 
##  Phillips-Perron Unit Root Test
## 
## data:  diff(log(Pasajeros), alternative = "stationary")
## Dickey-Fuller Z(alpha) = -93.215, Truncation lag parameter = 4,
## p-value = 0.01
## alternative hypothesis: stationary

Con este test, también se obtuvo un p-valor de 0.01, por tanto, rechazamos la hipótesis nula y aceptamos la alternativa, y podemos decir que la serie es estacionaria.

Por último, vamos a realizar nuevamente el gráfico donde descomponemos la serie, pero esta vez la serie transformada:

plot(decompose(diff(log(Pasajeros))))

plot of chunk unnamed-chunk-43

Después de analizar los anteriores tests y observar la última gráfica, se puede decir que no se observa tendencia en la serie transformada.

Por otro lado, para tratar la estacionalidad, se puede tomar una diferencia estacional, es decir, calcular la diferencia entre el valor de la serie en un mes con respecto al dato de ese mismo mes, pero del año anterior o aplicar un ajuste estacional, procedimiento que se se puede ver en mi entrada sobre desestacionalizar series temporales con R.

Por último, si quieres conocer más casos prácticos de R para finanzas, ve a la página de finanzas cuantitativas.

¿Te ha parecido útil? ¡Puntúa esta entrada!

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 4.8 / 5. Recuento de votos: 33

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

8 comentarios en “Análisis de series temporales con R (II): Estacionariedad y raíces unitarias”

  1. Gracias por el material, muy bueno.
    Para hacer una regresión múltiple, primero
    los datos deben ser estacionarias? O los test sin independientes?
    Gracias

  2. Muchas gracias por sus artículos, me han servido demasiado para comprender mi tarea sobre Series de Tiempo utilizando RStudio e interesarme aún más sobre el tema. Saludos.

    1. Conney Marulanda López

      Beatriz, gracias a ti por el comentario.
      Me alegro que el contenido de estos posts te sean útil. Si tienes alguna duda no dudes en escribirme y ánimo con R, es increíble todo lo que se puede hacer con este lenguaje de programación.
      Un saludo,

      Conney

  3. Hola Conney, lo primero enhorabuena por estos post son muy interesantes. En la última frase donde indicas » que no se observa una tendencia ni estacionalidad»» se refiere a la parte observada de la descomposición de la serie??, lo pregunto por que en la aplicación del test se ha rechazado la hipótesis nula y se ha aceptado la estacionaria y en la componente seasonal se observa estacionalidad.

    Gracias

    1. Conney Marulanda López

      Anais, gracias por tu comentario.
      Me alegro que te sean interesantes los posts.
      Disculpa por no poder responderte antes, en cuanto a esa última frase, ” que no se observa una tendencia ni estacionalidad” fue un error de redacción y gracias a tu comentario lo he corregido.
      Me refería que tal como se observaba en el gráfico de la descomposición no se observa tendencia en la serie transformada y en concordancia con los tests realizados, la serie es estacionaria, pero claro, no es estacional, pues en ese mismo gráfico se observa claramente que la serie sigue teniendo estacionalidad.
      Para el tratamiento de la estacionalidad existen algunos procedimientos, incluyendo ajuste estacional, sobre lo cual he escrito en un post anterior «Desestacionalizar series temporales con R»
      Gracias.
      Un saludo,

      Conney

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Facebook
Twitter
LinkedIn
Scroll al inicio