SERIES DE TIEMPO
EJERCICIOS DE
PROCESOS
ESTACIONARIOS EN R,
PYTHON Y MATLAB
V EGA C ARHUAZ I TALO
Profesor: Rafael Caparó .
SOLUCION DE
EJERCICIOS
EN R
V EGA C ARHUAZ I TALO
Profesor: Rafael Caparó .
FACULTAD DE I NG . E CONÓMICA , E STADÍSTICA Y [Link] S ERIES DE TIEMPO
1. PROBLEMA 1
1.1. Simulemos un proceso AR(2), de la forma:
yt = 0,5yt−1 + 0,3yt−2 + εt , con 100 observaciones
# El procesos anterior es estacionario , para la demostracion utilizaremos la
funcion " arima . sim " y visualizaremos sus graficos de correlacion y de
estacionariedad .
ar . sim <- arima . sim ( model = list ( ar = c (.5 ,.3) ) ,n =100)
ar . sim
# Funcion de AR (2)
win . graph ( width = 4 , height = 3 , pointsize = 8)
plot ( ar . sim , ylab = expression ( Y [ t ]) , type = ’o ’)
# Funcion de autocorrelaci ó n
ar . acf <- acf ( ar . sim , type = " correlation " , plot = T )
ar . acf
FACULTAD DE I NG . E CONÓMICA , E STADÍSTICA Y [Link] S ERIES DE TIEMPO
Figura 1: Función autocorrelacion
2. PROBLEMA 2
2.1. Simulemos un MA(2) de la forma
yt = −0,7t−1 + 0,1εt−2 + εt con 100 observaciones
# Tenemos un modelo de media movil , con la ayuda del comando " arima . sim " y
las graficas verificaremos su estacionariedad .
ma . sim <- arima . sim ( model = list ( ma = c ( -.7 ,.1) ) ,n =100)
ma . sim
# La gr á fica del proceso anterior es :
win . graph ( width = 4.875 , height = 3 , pointsize = 8)
plot ( ma . sim , ylab = expression (( e [ t ]) ) , type = ’o ’)
2
FACULTAD DE I NG . E CONÓMICA , E STADÍSTICA Y [Link] S ERIES DE TIEMPO
Figura 2: Proceso MA(2)
# La funci ó n de autocorrelacion simple .
ma . acf <- acf ( ma . sim , type = " correlation " , plot = T )
ma . acf
Figura 3: Funcion de autocorrelacion simple
# La funci ó n de autocorrelacion parcial .
ma . pacf <- acf ( ma . sim , type = " partial " , plot = T )
ma . acf
3
FACULTAD DE I NG . E CONÓMICA , E STADÍSTICA Y [Link] S ERIES DE TIEMPO
Figura 4: Funcion de autocorrelacion parcial
3. PROBLEMA 3
3.1. Ahora simulemos un proceso ARMA(2,2) de la forma:
yt = 0,5yt−1 − 0,2yt−2 + εt − 0,4εt−1 + 0,3εt−2 , con 100 observaciones
# En el proceso anterior , mostraremos su estacionariedad a traves del comando
" arima . sim " y sus graficos .
arma . sim <- arima . sim ( model = list ( ar = c (.5 , -.2) , ma = c ( -.4 ,.3) ) ,n =100)
arma . sim
Obs.
Para realizar el siguiente proceso necesitaremos activar el paquete "tseries"
library ( " tseries " )
win . graph ( width = 4.875 , height = 3 , pointsize = 8)
ts . plot ( arma . sim )
4
FACULTAD DE I NG . E CONÓMICA , E STADÍSTICA Y [Link] S ERIES DE TIEMPO
Figura 5: Proceso ARMA(2,2)
# La funci ó n de autocorrelacion simple .
arma . acf <- acf ( arma . sim , type = " correlation " , plot = T )
arma . acf
Figura 6: Funcion de autocorrelacion simple
# La funci ó n de autocorrelacion parcial .
arma . pacf <- acf ( arma . sim , type = " partial " , plot = T )
arma . pacf
5
FACULTAD DE I NG . E CONÓMICA , E STADÍSTICA Y [Link] S ERIES DE TIEMPO
Figura 7: Funcion de autocorrelacion parcial
6
SOLUCION DE
EJERCICIOS
EN PYTHON
V EGA C ARHUAZ I TALO
Profesor: Rafael Caparó .
FACULTAD DE I NG . E CONÓMICA , E STADÍSTICA Y [Link] S ERIES DE TIEMPO
4. PROBLEMA 1
OBSERVACION:
Para el problema que presentaremos, necesitaremos ayuda de Yahoo Finance.
# Ejemplo de serie de tiempo con Panda
# Creando una serie de tiempo de las acciones de WFT desde yahoo finance
wft = web . DataReader ( " WFT " , ’ yahoo ’ , ’ 2016 -1 -1 ’ , ’ 2016 -9 -30 ’)
wft . head (5)
Figura 8: Precios importados desde Yahoo Finance
# Filtraremos s ó lo del periodo 2016 -02 -04 al 2016 -02 -18
wft [ ’ 2016 -02 -04 ’: ’ 2016 -02 -18 ’ ])
Figura 9: Precios filtrados
Nuestro ejercicio sera desplazar los valores hacia atrás y adelante en el tiempo, como por ejemplo para calcular
FACULTAD DE I NG . E CONÓMICA , E STADÍSTICA Y [Link] S ERIES DE TIEMPO
# Desplazaremos el 1 dia el valor de cierre
desplazado = wft [ ’ Adj Close ’ ]. shift (1)
desplazado [:5]
Figura 10: Valor de cierre
# Calculamos el porcentaje de variaci ó n del d í a
variacion _ diaria = wft [ ’ Adj Close ’] / wft [ ’ Adj Close ’ ]. shift (1) - 1
wft [ ’ var _ diaria ’] = variacion _ diaria
wft [ ’ var _ diaria ’ ][:5]
Figura 11: Valor de cierre
# Calculamos el rendimiento acumulado diario
rendi mientodiario = (1 + wft [ ’ Adj Close ’ ]. pct _ change () ) . cumprod ()
wft [ ’ rend _ diario ’] = rendimiento _ diario
wft [ ’ rend _ diario ’ ][:5]
2
FACULTAD DE I NG . E CONÓMICA , E STADÍSTICA Y [Link] S ERIES DE TIEMPO
Figura 12: Rendimiento diario
Una operación fundamental para entender el comportamiento de una serie de tiempo y poder determinar si se
trata de una serie estacionaria o no; es realizar gráficos de la misma. En Pandas esto lo podemos realizar en
forma muy sencilla con el método .plot().
# Graficamos el precio de cierre ajustado Adj Close
plot = wft [ ’ Adj Close ’ ]. plot ( figsize =(10 , 8) )
Figura 13: Precio Ajustado
# Aplicamos el filtro Hodrick - Prescott para separar en tendencia y
# componente ciclico .
wft _ ciclo , wft _ tend = sm . tsa . filters . hpfilter ( wft [ ’ Adj Close ’ ])
wft [ ’ tend ’] = wft _ tend
# Graficamos la variacion del precio real con la tendencia .
wft [[ ’ Adj Close ’ , ’ tend ’ ]]. plot ( figsize =(10 , 8) , fontsize =12) ;
legend = plt . legend ()
legend . prop . set _ size (14)
3
FACULTAD DE I NG . E CONÓMICA , E STADÍSTICA Y [Link] S ERIES DE TIEMPO
Figura 14: Serie descompuesta
# Graficamos el rendimiento diario
plot = wft [ ’ var _ diaria ’ ]. plot ( figsize =(10 , 8) )
Figura 15: Rendimientos
5. PROBLEMA 2
5.1. Promedios móviles y descomposición
Otra técnica interesante que podemos intentar también es la descomposición. Esta es una técnica que trata de
descomponer una serie de tiempo en su tendencia, su estacionalidad y sus factores residuales. Statsmodels
4
FACULTAD DE I NG . E CONÓMICA , E STADÍSTICA Y [Link] S ERIES DE TIEMPO
viene con una función de descomposición que nos facilita en sobremanera el trabajo, para el ejercicio anterior
tenemos lo siguiente :
# Calculando promedios m ó viles cada 5 d í as
wft _ ma = pd . rolling _ mean ( wft [ ’ Adj Close ’] , 5)
wft [ ’ prod _ mov ’] = wft _ ma
plot = wft [[ ’ Adj Close ’ , ’ prod _ mov ’ ]]. plot ( figsize =(10 , 8) , fontsize =12)
Figura 16: Promedios Moviles
# Ejemplo de descomposici ó n de serie de tiempo
descomposicion = sm . tsa . seasonal _ decompose ( wft [ ’ Adj Close ’] , model = ’ additive ’
, freq =30)
fig = descomposicion . plot ()
Figura 17: Promedios Moviles
5
FACULTAD DE I NG . E CONÓMICA , E STADÍSTICA Y [Link] S ERIES DE TIEMPO
6. PROBLEMA 3
6.1. Pronosticaremos la serie con ARIMA
Partiremos del ejercicio anterior y como podemos observar en los gráficos que realizamos, el comportamiento
de la serie de tiempo con la que estamos trabajando parece ser totalmente aleatorio y las medidas móviles que
calculamos tampoco parecen ser de mucha utilidad para acercar la serie a un comportamiento estacionario.
De todas formas podemos intentar aplicar un modelo ARIMA sobre la serie y ver que tan bien nos va con el
pronostico del modelo. El modelo ARIMA es similar a una regresión estadística pero aplicando los conceptos
de las series de tiempo; por tanto, los pronósticos del modelo vienen explicadas por los datos del pasado y no
por variables independientes.
# Modelo ARIMA sobre el valor de cierre de la acci ó n .
modelo = sm . tsa . ARIMA ( wft [ ’ Adj Close ’ ]. iloc [1:] , order =(1 , 0 , 0) )
resultados = modelo . fit ( disp = -1)
wft [ ’ pronostico ’] = resultados . fittedvalues
plot = wft [[ ’ Adj Close ’ , ’ pronostico ’ ]]. plot ( figsize =(10 , 8) )
Figura 18: Modelo ARIMA
Aquí el modelo parece ser bastante efectivo, las líneas en el gráfico son muy similares. Pero para armar el
modelo hemos utilizado el valor de cierre de la acción, lo que realmente nos interesa predecir es la variación
diaria del precio de la acción, por lo tanto deberíamos armar el modelo utilizando la columna de variación
diaria que calculamos previamente
# Modelo ARIMA sobre variaci ó n diaria
modelo = sm . tsa . ARIMA ( wft [ ’ var _ diaria ’ ]. iloc [1:] , order =(1 , 0 , 0) )
resultados = modelo . fit ( disp = -1)
wft [ ’ pronostico ’] = resultados . fittedvalues
plot = wft [[ ’ var _ diaria ’ , ’ pronostico ’ ]]. plot ( figsize =(10 , 8) )
6
FACULTAD DE I NG . E CONÓMICA , E STADÍSTICA Y [Link] S ERIES DE TIEMPO
Figura 19: Modelo ARIMA
7
SOLUCION DE
EJERCICIOS
EN MATLAB
V EGA C ARHUAZ I TALO
Profesor: Rafael Caparó .
FACULTAD DE I NG . E CONÓMICA , E STADÍSTICA Y [Link] S ERIES DE TIEMPO
7. PROBLEMA 1
7.1. Mostrar la grafica de la siguiente serie
yt = 0,4 + 0,25yt−1 + εt ,
phi0 =0.4
phi1 =0.25
%epsilon = randn (1 ,1)
y = zeros (100 ,1)
for t =2:100
y ( t ) = phi0 + phi1 * y (t -1) + randn (1 ,1)
end
plot ( y )
Figura 20: Modelo AR(1) en Matlab