El Modelo ARIMA (Autoregresivo Integrado de Media Móvil) es un tipo de modelo econométrico muy extendido para la predicción en series de tiempo. En este tutorial vamos a estudiar como se interpretan los resultados del modelo así como se relacionan con la formula teórica ayudándonos de Rstudio. Esta será la segunda parte de la explicación.

La primera clase puedes encontrarla aquí :

Entendiendo el MODELO ARIMA | Parte 1

También más abajo está el código en R completo:

Codigo R completo


#INTERPRETACION ARIMA

#video Proceso Autoregresivo (AR)


#install.packages(«quantmod»)
library(quantmod)
#install.packages(«tseries»)
library(tseries)
#install.packages(«forecast»)
library(forecast)
#install.packages(«TSA»)
library(TSA)
#install.packages(«Quandl»)
library(Quandl)
library(stats)
#install.packages(«lmtest»)
library(lmtest)


# INTERPRETACIÓN ARIMA :


# 3 COMPONENTES : AR – I- MA

#AR = Componente Autoregresivo
#I = Componente de Diferenciación. Número de veces que la serie debe ser diferenciada para hacerla estacionaria
#MA = Componente de Media Móvil

#(Termino AR) ( TERMINO MA)
#Y[t] = constante + b1*Y[t-1] + e[t] + theta * e[t-1]


# AR (AUTOREGRESIVO)

#Implica relación de un valor de una serie en un punto del tiempo
#con sus propios valores previos.Tal relación puede existir con cualquier orden de retraso(lag en inglés)

# Mirar ejemplo en la tabla antes de la ecuación

# INTERPRETACION DE LA ECUACION

# AR(1)

# Y(t)= c + b1*Y(t-1) + e(t) donde e(t) ruido blanco ~ N(0,s^2)

# AR(2) (como vimos en la tabla)

# Y(t)= c + b1*Y(t-1) + B2*Y(t-2) + e(t)


#IMPORTANTE: «c» dentro del Modelo

# c = mu * (1 – b1 ) donde mu es la media de Y

 

# Y(t)= mu * (1 – b1 ) + b1*Y(t-1) + e(t)
# «constante»


# de forma que al sustituir nos queda así

 

# y^[t] – mu = B1(Y[t-1]-mu) + e[t]


#y[t] = mu + (1 – B1) + b1*y[t-1] + e[t]

#Podremos ver el modelo escrito de 2 formas, pero interpretación es la misma

# 1. y^[t] – mu = B1(Y[t-1]-mu) + e[t]

# 2. Y(t)= c + b1*Y(t-1) + e(t)

#########################################

#install.packages(«quantmod»)
library(quantmod)
#install.packages(«tseries»)
library(tseries)
#install.packages(«forecast»)
library(forecast)
#install.packages(«TSA»)
library(TSA)
#install.packages(«Quandl»)
#library(Quandl)
library(stats)
#install.packages(«lmtest»)
library(lmtest)


## HACEMOS MODELO AR(1)


## PRECIOS DE LAS ACCIONES

acciones <- c(235,320,115,355,190,320,275,205,395,240,355,175,285,
200,290,220,400,275,185,370,255,285,250,300,225,285,
250,225,125,295,250,355,280,370,250,290,225,270,180,
270,240,275,225,285,250,310,220,320,215,260,190,295,
275,205,265,245,170,175,270,225,340,190,250,300,195)

plot(acciones,type=»l»)


adf.test(acciones) # test de raiz unitaria

#EL MODELO ARIMA PIDE QUE LAS SERIES SEAN ESTACIONARIAS

# REALIZAMOS UN MODELO AR(1) arima(1,0,0)

arima_acc <- arima(acciones,order=c(1,0,0))
arima_acc

#? ¿Cómo saca el ARIMA los coeficientes que vemos en el SUMARIO?
#method = c(«CSS-ML», «ML», «CSS»)


?arima

coeftest(arima_acc)

z_value1<- – 0.40472/ 0.11329
z_value1
zvalue<- 259.31594/4.88598

summary(arima_acc)


residuos<- arima_acc$residuals
betas = arima_acc$coef


coef_ar <-betas[1]
intercepto <- betas[2]

mean(acciones)

predict(arima_acc) # arima(1,0,0) serie acciones 285.3459

forecast(arima_acc)


#Calculo de los valores fijados reescribiendo ecuación


# Y(t)= mu * (1 – b1 ) + b1*Y(t-1) + e(t)

y_fijados = intercepto*(1- coef_ar) + coef_ar*lag(acciones,default=0)
y_fijados[1:64]



#Me falta poner el valor 1
fitted.values(arima_acc)

# Hacemos una Predicción para el periodo 66 con predict

predict(arima_acc)

# hacemos la predicción con la ecuación escrita
#t-1
Predicción_t66 <- intercepto*(1- coef_ar) + coef_ar*acciones[65]
Predicción_t66


### RECAPITULANDO

# Hemos visto la ecuación del Modelo AR, su interpretación
# y luego hemos comparado los resultados y predicción hechos por R
# con los resultados que a nosotros nos da en la ecuación escrita

# así como hemos apuntado los métodos por los que Arima de R busca los
#coeficientes

#############################

## COMPONENTE MA

# El promedio móvil aquí tienes caracter histórico y no hay que confundir
#con la media móvil como método de predicción. Es decir, aquí MA se refiere
# al hecho de que la desviación de la respuesta , (Yt – mu), es una combinación
# lineal de los errores actuales y pasados y que conforme avanaza el tiempo, los errores
# también se mueven hacia adelante

# EN CONCLUSIÓN: Implica que la desviación actual de la media depende de desviaciones previas


# MODELOS MA (MOVING AVERAGES)

#y[t] = mu + e[t] + theta * e[t-1]


#LUEGO LO CONVERTIREMOS EN :

#y^[t] = mu + (theta * residuos )


#Modelo MA(1) con DIferencia

#y^[t] – y[t-1] = mu + e[t] + theta * e[t-1]


## PRECIOS DE LAS ACCIONES

#y[t] = mu + e[t] + theta * e[t-1]

adf.test(acciones)

# modelo ARIMA(0,0,1) O MA(1)

arima_acc <- arima(acciones,order=c(0,0,1))
arima_acc

coeftest(arima_acc)

# arima(0,0,1)

residuos<- arima_acc$residuals
plot(residuos,type=»l»)

#aquí dejaremos a un lado el estudio de los residuos y demás…

betas = arima_acc$coef

coef_ma <-betas[1]
intercepto <- betas[2]

#e = rnorm(65,sd=sqrt(arima_acc$sigma2))
#plot(e,type=»l»)

error_arima <- acciones-intercepto
error_arima


# ECUACION 1 valores fijados

y_ma= NULL

for( i in 1:65) # e[t] – residuos[i] (Yt- pred)
y_ma[i] = intercepto + error_arima[i] -(residuos[i])

#y_ma[1] = intercept+error[1]

fitted.values(arima_acc)

y_ma[1:65]

tail(y_ma)

comp_valores_fija <- data.frame(fitted.values(arima_acc),y_ma)

#t65 = intercept + error_arima[65] – ( residuos[65])

#PREDICCIÓN CON MA(1)

predict(arima_acc)

# fORMULA PARA LA PREDICCIÓN CON LA ECUACIÓN

# res[t-1]

t66 = intercepto + (coef_ma*residuos[65])
t66

#y_pred= NULL

#for( i in 1:65) #e[t-1]
y_pred = intercepto + coef_ma*lag(residuos,default=0)
y_pred[1:64]
fitted.values(arima_acc)


#y[t] = mu + b1* residuos[t-1]

#y[t] = mu + b1* (serie acciones – fijados)






## ARIMA (1,0,1)
# ( parte AR) (parte ma)
Y[t] <- c + coef_ar* Y[t-1] + e[t] + coef_ma * e[t-1]

##
arima_acc <- arima(acciones,order=c(1,0,1))
arima_acc

coeftest(arima_acc)


residuos<- arima_acc$residuals
betas = arima_acc$coef

coef_ar <-betas[1]
coef_ma <- betas[2]
intercepto <- betas[3]

mean(acciones)

predict(arima_acc)
forecast(arima_acc)

#y^[t] = intercepto+ coef_ar(acciones[t-1])+e[t]+coef_ma*e[t-1]


# RECORDAR COMO SE HALLABA mu EN EL MODELO AR

# c = mu * (1 – b1 ) donde mu es la media de Y

# ENTONCES

Y[t] <- intercepto*(1-coef_ar) + coef_ar*acciones[t-1] + e[t]+coef_ma*e[t-1]

predict(arima_acc)



#formula para la predicción ARIMA (1,0,1)

Predicción_66 <- intercepto*(1-coef_ar) + coef_ar*acciones[65] + coef_ma*residuos[65]
Predicción_66


fija_1_1<- intercepto*(1-coef_ar) + coef_ar*lag(acciones,default=0) + coef_ma*lag(residuos,default=0)
fija_1_1

fija_1_1[1:64]


fijados_arima<-fitted.values(arima_acc)
fijados_arima
(fijados_arima)[62:65]
fija_1_1[61:64] #quitamos el ultimo ya que es sería prediccion

#ARIMA 1,1,1

##

arima_acc <- arima(acciones,order=c(1,1,1))
arima_acc # ¿ Por qué elimina el intercepto? Porque le establecemos diff

coeftest(arima_acc)


residuos<- arima_acc$residuals
betas = arima_acc$coef

coef_ar <-betas[1]
coef_ma <- betas[2]
#intercepto <- betas[3]

mean(acciones)

predict(arima_acc)
forecast(arima_acc)

fitted.values(arima_acc)


#formula para la predicción ARIMA (1,1,1)



#Y^[t]-Y[t-1]= coef_ar*(Y[t]-Y[t-1]) + e[t]+coef_ma*e[t-1]

acciones[66]-acciones[65]=coef_ar*(acciones[66]-acciones[65])+coef_ma*residuos[65]

acciones[66]=acciones[65]+ coef_ar*(acciones[66]-acciones[65])+coef_ma*residuos[65]

Prediccion_66= acciones[65]+ coef_ar*(acciones[65]-acciones[64])+coef_ma*residuos[65]
Prediccion_66

#Predicción <- coef_ar*acciones[65] + coef_ma*residuos[65]

fija_1_1_1 = NULL

for(i in 1:65)
fija_1_1_1[i]<- acciones[i-1]+ coef_ar*(acciones[i-1]-acciones[i-2])+coef_ma*residuos[i-1]

fija_1_1_1[1:65]

 

 

Por Victor A.Rico

Diplomado en Ciencias Empresariales y Operador del Mercado Español de Futuros y Opciones

Deja una respuesta

Tu dirección de correo electrónico no será publicada.