0% encontró este documento útil (0 votos)
3 vistas18 páginas

Ejercicios en R Python y Matlab

El documento presenta ejercicios sobre procesos estacionarios en series de tiempo utilizando R, Python y MATLAB. Se simulan modelos AR(2), MA(2) y ARMA(2,2) en R, y se realizan análisis de autocorrelación y gráficos de estacionariedad. También se abordan técnicas en Python para manipulación de datos de series de tiempo y pronósticos con ARIMA, así como un ejercicio en MATLAB para visualizar un modelo AR(1).

Cargado por

Federico Meyer
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas18 páginas

Ejercicios en R Python y Matlab

El documento presenta ejercicios sobre procesos estacionarios en series de tiempo utilizando R, Python y MATLAB. Se simulan modelos AR(2), MA(2) y ARMA(2,2) en R, y se realizan análisis de autocorrelación y gráficos de estacionariedad. También se abordan técnicas en Python para manipulación de datos de series de tiempo y pronósticos con ARIMA, así como un ejercicio en MATLAB para visualizar un modelo AR(1).

Cargado por

Federico Meyer
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

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

También podría gustarte