Modelos ARIMA - Ejemplo Amazon

INTRODUCCION

#El motivo de la introducción de los modelos ARIMA nace del hecho de que no se puede trabajar con una serie temporal no estacionaria. Se dice que una serie es estacionaria cuando su media, varianza y autocovarianza son invariantes en el tiempo. La mayoría de series temporales económicas no son estacionarias pero diferenciándolas un número determinado de veces la serie original se transforma en estacionaria, con lo cual ya se podría aplicar la metodología de los modelos ARIMA.

Concepto ARIMA

#En general, se dice que una serie temporal Yt admite una representación autoregresiva integrada y de medias móviles de órdenes p , d y q respectivamente, y se denota por ARIMA( p , d , q ). Yt=c+ϕ1ydt−1+ϕ2ydt−p+…+ϕpydt−p+θ1et−1+θ2et−2+…+θqet−q

#Donde p denota el número de términos autoregresivos, d el número de veces que la serie debe ser diferenciada para hacerla estacionaria y q el número de términos de la media móvil invertible.

#La construcción de los modelos se lleva de manera iterativa mediante un proceso en el que se puede distinguir cuatro etapas:

Identificación: Utilizando los datos ordenados #cronológicamente se intentara sugerir un modelo que merezca la pena ser investigada. El objetivo es determinar los valores que sean apropiados para reproducir la serie de tiempo. Comprende los pasos 1, 2 y 3 del ejemplo próximo.

Análisis y diferenciación de la serie temporal.

#Consiste en examinar la estacionariedad, los diagramas de autocorrelación, también conocidos como ACF y PACF, y elección del orden del modelo. Comprende los pasos 4 y 5.

Ajuste de un modelo ARIMA. Obtención de los coeficientes de determinación. Paso 6.

Predicción.

#Una vez seleccionado el mejor modelo candidato se pueden hacer pronósticos en términos probabilísticos de los valores futuros.

El objetivo del siguiente análisis es:

#Trazar, examinar y preparar series para modelar. Extrae el componente de estacionalidad de la serie temporal. Probar la estacionalidad y aplicar las transformaciones apropiadas. Elija el orden de un modelo ARIMA. Pronostica la serie. La base de datos con la que hemos realizado el análisis está extraída de Yahoo Finance (a través de la técnica scraping) y trata sobre el las cotizaciones de la emperesa Amazon

library(quantmod)
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: TTR
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(tseries)
library(timeSeries)
## Loading required package: timeDate
## 
## Attaching package: 'timeSeries'
## The following object is masked from 'package:zoo':
## 
##     time<-
library(forecast)
library(xts)
library(ggplot2)

PRIMERA ETAPA: Identificación

Lectura y preparación de los datos.

#Quantmod es un paquete de R que proporciona un conjunto de herramientas para el modelado y análisis financiero cuantitativo. Permite a los usuarios acceder y manipular datos financieros de varias fuentes, incluido Yahoo Finance.

AMZN <- getSymbols('AMZN', src='yahoo', auto.assign=FALSE)
AMZN <- getSymbols('AMZN', src='yahoo', from = as.Date("2021-07-12"),to=as.Date("2023-07-25"), auto.assign = FALSE)

#Graficando la serie

chartSeries(AMZN, name="AMZN", subset="last 6 months", theme=chartTheme("white"))

#Datos de yahoo finance:

data_AMZN <- data.frame(AMZN, tiempo = as.Date(rownames(data.frame(AMZN))))
head(data_AMZN)
##            AMZN.Open AMZN.High AMZN.Low AMZN.Close AMZN.Volume AMZN.Adjusted
## 2021-07-12  187.2000  187.8645 184.8395   185.9275    51432000      185.9275
## 2021-07-13  185.1050  188.6540 183.5660   183.8680    76918000      183.8680
## 2021-07-14  185.4425  185.8830 183.0415   184.0840    65932000      184.0840
## 2021-07-15  184.7100  184.7700 181.0460   181.5600    63706000      181.5600
## 2021-07-16  181.6655  182.3030 178.5230   178.6815    80874000      178.6815
## 2021-07-19  176.6290  177.5105 174.9580   177.4795    75692000      177.4795
##                tiempo
## 2021-07-12 2021-07-12
## 2021-07-13 2021-07-13
## 2021-07-14 2021-07-14
## 2021-07-15 2021-07-15
## 2021-07-16 2021-07-16
## 2021-07-19 2021-07-19
attach(data_AMZN)

#Separando la serie close:

base1 = data.frame(tiempo, AMZN.Close)
names (base1) = c("tiempo","AMZN")
base1 <- na.omit(base1) #eliminando datos ominitidos "NA"
#base1
head(base1, n = 10)
##        tiempo     AMZN
## 1  2021-07-12 185.9275
## 2  2021-07-13 183.8680
## 3  2021-07-14 184.0840
## 4  2021-07-15 181.5600
## 5  2021-07-16 178.6815
## 6  2021-07-19 177.4795
## 7  2021-07-20 178.6595
## 8  2021-07-21 179.2600
## 9  2021-07-22 181.9015
## 10 2021-07-23 182.8320

#Graficando la serie

ggplot(base1, aes(x = tiempo, y =  AMZN)) + geom_line() +  labs(title = "Cotizaciones de AMAZON", x = "Fecha", y = "Precios por accion")

#Con la función geom_smooth en ggplot2, puedes suavizar una serie temporal para analizar tendencias o patrones. Por defecto, geom_smooth también mostrará un intervalo de confianza alrededor de la suavización. Si deseas eliminar el intervalo de confianza, puedes utilizar el argumento *se = FALSE. Aquí tienes un ejemplo de cómo usarlo:

ggplot(base1, aes(x = tiempo, y =  AMZN)) + geom_line() + geom_smooth(se = FALSE)+ labs(title = "Cotizaciones de AMAZON", x = "Fecha", y = "precio por accion")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

SEGUNDA ETAPA: Análisis y diferenciación de la serie temporal

Análisis de estacionariedad

#La instalación de un modelo ARIMA requiere que la serie sea estacionaria . Se dice que una serie es estacionaria cuando su media, varianza y autocovarianza son invariantes en el tiempo. Esta suposición tiene un sentido intuitivo: dado que ARIMA usa retardos previos de series para modelar su comportamiento