#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.
#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:
#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.
#Una vez seleccionado el mejor modelo candidato se pueden hacer pronósticos en términos probabilísticos de los valores futuros.
#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)
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'
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