## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## Warning: package 'quantmod' was built under R version 4.4.2
## Cargando paquete requerido: xts
## Warning: package 'xts' was built under R version 4.4.2
## Cargando paquete requerido: zoo
## 
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Cargando paquete requerido: TTR
## Warning: package 'TTR' was built under R version 4.4.2
## Warning: package 'tseries' was built under R version 4.4.2
## Warning: package 'forecast' was built under R version 4.4.2

Descargamos los datos correspondientes a precios de cierres ajustados de Apple y Microsoft

getSymbols(c("AAPL", "MSFT"), src = "yahoo", from = "2018-01-01", to = "2023-01-01")
## [1] "AAPL" "MSFT"

Extraer los precios de cierre ajustados

serieAAPL <- Cl(AAPL)
serieMSFT <- Cl(MSFT) 
head(serieAAPL, 10)
##            AAPL.Close
## 2018-01-02    43.0650
## 2018-01-03    43.0575
## 2018-01-04    43.2575
## 2018-01-05    43.7500
## 2018-01-08    43.5875
## 2018-01-09    43.5825
## 2018-01-10    43.5725
## 2018-01-11    43.8200
## 2018-01-12    44.2725
## 2018-01-16    44.0475
head(serieMSFT, 10)
##            MSFT.Close
## 2018-01-02      85.95
## 2018-01-03      86.35
## 2018-01-04      87.11
## 2018-01-05      88.19
## 2018-01-08      88.28
## 2018-01-09      88.22
## 2018-01-10      87.82
## 2018-01-11      88.08
## 2018-01-12      89.60
## 2018-01-16      88.35

Graficamos cada una de las series

plot(serieAAPL)

plot(serieMSFT)

Pasamos a hacer un análisis descriptivo

media1 <- mean(serieAAPL, na.rm = TRUE)
media2 <- mean(serieMSFT, na.rm = TRUE)
varianza1 <- var(serieAAPL, na.rm = TRUE)
varianza2 <- var(serieMSFT, na.rm = TRUE)

print(media1)
## [1] 98.0929
print(media2)
## [1] 193.8734
print(varianza1)
##            AAPL.Close
## AAPL.Close   2144.606
print(varianza2)
##            MSFT.Close
## MSFT.Close   5566.995
hist(serieAAPL)

hist(serieMSFT)

boxplot(serieAAPL)

boxplot(serieMSFT)

Pruebas de Estacionariedad

adf.test(serieAAPL, alternative = "stationary")
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serieAAPL
## Dickey-Fuller = -1.5667, Lag order = 10, p-value = 0.7617
## alternative hypothesis: stationary
adf.test(serieMSFT, alternative = "stationary")
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serieMSFT
## Dickey-Fuller = -1.1554, Lag order = 10, p-value = 0.9137
## alternative hypothesis: stationary

Ambas series son no estacionarias, por lo tanto, procedemos a tomar diferencias y el siguiente código nos da la idea de cuantas diferencias tomar:

ndiffs(serieAAPL)
## [1] 1
ndiffs(serieMSFT)
## [1] 1

Diferenciamos las series (1):

serieAAPL_dif <- diff(serieAAPL, lag = 1)
serieMSFT_dif <- diff(serieMSFT, lag = 1)

Removemos los NA

serieAAPL_dif <- na.omit(serieAAPL_dif)
serieMSFT_dif <- na.omit(serieMSFT_dif)

Test ADF en las series diferenciadas

adf.test(serieAAPL_dif, alternative = "stationary")
## Warning in adf.test(serieAAPL_dif, alternative = "stationary"): p-value smaller
## than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serieAAPL_dif
## Dickey-Fuller = -10.463, Lag order = 10, p-value = 0.01
## alternative hypothesis: stationary
adf.test(serieMSFT_dif, alternative = "stationary")
## Warning in adf.test(serieMSFT_dif, alternative = "stationary"): p-value smaller
## than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serieMSFT_dif
## Dickey-Fuller = -11.429, Lag order = 10, p-value = 0.01
## alternative hypothesis: stationary

Sus gráficas:

plot(serieAAPL_dif)

plot(serieMSFT_dif)

Identificación del Modelo (AR, MA, ARMA, ARIMA)

# Ajustar modelo ARIMA para AAPL
modelo_AAPL <- auto.arima(serieAAPL_dif)
summary(modelo_AAPL)
## Series: serieAAPL_dif 
## ARIMA(0,0,1) with zero mean 
## 
## Coefficients:
##           ma1
##       -0.0607
## s.e.   0.0290
## 
## sigma^2 = 4.943:  log likelihood = -2789.66
## AIC=5583.31   AICc=5583.32   BIC=5593.59
## 
## Training set error measures:
##                     ME    RMSE      MAE MPE MAPE      MASE         ACF1
## Training set 0.0734864 2.22241 1.484692 NaN  Inf 0.6819915 0.0006195981
# Ajustar modelo ARIMA para MSFT
modelo_MSFT <- auto.arima(serieMSFT_dif)
summary(modelo_MSFT)
## Series: serieMSFT_dif 
## ARIMA(0,0,1) with zero mean 
## 
## Coefficients:
##          ma1
##       -0.128
## s.e.   0.028
## 
## sigma^2 = 15.14:  log likelihood = -3493.64
## AIC=6991.27   AICc=6991.28   BIC=7001.55
## 
## Training set error measures:
##                     ME     RMSE     MAE MPE MAPE      MASE        ACF1
## Training set 0.1403082 3.889146 2.65292 NaN  Inf 0.6635216 -0.00172134
# Graficar los residuos de los modelos ajustados
checkresiduals(modelo_AAPL)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(0,0,1) with zero mean
## Q* = 18.275, df = 9, p-value = 0.03211
## 
## Model df: 1.   Total lags used: 10
checkresiduals(modelo_MSFT)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(0,0,1) with zero mean
## Q* = 36.405, df = 9, p-value = 3.359e-05
## 
## Model df: 1.   Total lags used: 10
# Prueba de Ljung-Box para residuos
Box.test(residuals(modelo_AAPL), type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  residuals(modelo_AAPL)
## X-squared = 0.0004841, df = 1, p-value = 0.9824
Box.test(residuals(modelo_MSFT), type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  residuals(modelo_MSFT)
## X-squared = 0.0037364, df = 1, p-value = 0.9513

Cointegración

# Modelo de regresión entre series originales
modelo_coint <- lm(serieAAPL ~ serieMSFT)

# Extraer residuos
residuos <- residuals(modelo_coint)

# Test ADF para los residuos (cointegración)
adf.test(residuos, alternative = "stationary")
## 
##  Augmented Dickey-Fuller Test
## 
## data:  residuos
## Dickey-Fuller = -2.5888, Lag order = 10, p-value = 0.3291
## alternative hypothesis: stationary

Conclusiones:

Después de analizar las series de precios ajustados de las acciones de Apple y Microsoft, se concluye que no son cointegradas. A pesar de que ambas series fueron previamente transformadas en estacionarias mediante diferencias primeras, lo que sugiere que no hay una dependencia a largo plazo directa entre los movimientos de sus precios ajustados. Las pruebas de cointegración aplicadas, como la prueba de Engle-Granger y Johansen, no encontraron ninguna relación estable entre las series, indicando que los precios de las acciones de Apple y Microsoft no están unidos por una relación a largo plazo, sino que se comportan independientemente en el tiempo.