1 Introducción

En la actualidad, los mercados financieros se han convertido en un termómetro clave de la actividad económica y de la adopción de nuevas tecnologías. Entre ellos, el NASDAQ Composite (^IXIC) destaca por agrupar principalmente empresas del sector tecnológico, comunicaciones y otras organizaciones intensivas en innovación. Su comportamiento sintetiza las expectativas de los inversionistas frente al crecimiento futuro de la economía digital.

En este trabajo se analiza la evolución del NASDAQ en el periodo comprendido entre enero de 2018 y diciembre de 2024, utilizando sus precios de cierre diarios. Este intervalo incluye eventos de alta relevancia económica y tecnológica: la volatilidad asociada a la pandemia de COVID-19, la posterior corrección de mercado en 2022 y el auge reciente impulsado por la Inteligencia Artificial (IA) y otras innovaciones digitales. Estos hechos generan cambios estructurales y episodios de alta volatilidad que hacen especialmente interesante el estudio de la serie de tiempo.

Aunque la guía del taller sugiere emplear una serie proveniente del OECD Data Explorer, en este proyecto se opta por el índice NASDAQ Composite descargado desde Yahoo Finance, por tratarse de un indicador financiero global con datos de alta frecuencia y una fuerte conexión con la evolución tecnológica reciente. La elección cumple con el requisito de contar con al menos 60 observaciones y permite trabajar con una serie extensa y realista, lo que favorece el ejercicio de modelación y pronóstico.

Informe Series de tiempo

El objetivo general del análisis es aplicar la metodología ARIMA para modelar la dinámica de la serie y pronosticar de 5 a 10 observaciones futuras, evaluando la calidad de los pronósticos mediante una partición entrenamiento–prueba. De forma específica se busca:

  • Describir el comportamiento histórico de la serie en el periodo 2018–2024.

  • Verificar la estacionariedad de la serie y, de ser necesario, transformarla.

  • Estimar y comparar diferentes modelos ARIMA utilizando criterios de información (AIC, BIC, AICc).

  • Validar el modelo seleccionado mediante el análisis de residuos.

  • Generar pronósticos de corto plazo y discutir sus implicaciones en el contexto del mercado tecnológico.

2 Metodología

2.1 Concepto de serie de tiempo

Una serie de tiempo es una secuencia de observaciones ordenadas cronológicamente. En nuestro caso, cada observación corresponde al precio de cierre diario del NASDAQ Composite. El objetivo del análisis de series de tiempo es describir la dinámica de la variable en el tiempo, identificar patrones (tendencia, estacionalidad, ciclos) y, sobre todo, construir modelos que permitan pronosticar valores futuros con un nivel de incertidumbre cuantificable.

2.2 Modelo ARIMA

Los modelos ARIMA (AutoRegressive Integrated Moving Average) combinan tres componentes:

  • AR (p): parte autorregresiva, donde el valor actual depende de valores pasados de la serie.

  • I (d): número de diferenciaciones necesarias para lograr estacionariedad.

  • MA (q): parte de promedio móvil, que modela la dependencia respecto a errores aleatorios pasados.

Un modelo ARIMA\((p,d,q)\) se ajusta a la serie una vez aplicada la diferenciación de orden 𝑑 d. En el contexto financiero, estos modelos se utilizan con frecuencia para capturar la inercia y el comportamiento agregado de los precios, asumiendo que una combinación adecuada de memoria (AR) y choques (MA), más la diferenciación, puede representar razonablemente la dinámica de la serie.

Los modelos ARIMA se seleccionan típicamente mediante criterios de información como el AIC, BIC o AICc, que penalizan la complejidad del modelo. Además, es fundamental verificar que los residuos del modelo se comporten como ruido blanco, lo que se evalúa mediante la función checkresiduals() y pruebas como Ljung–Box.

2.3 Esquema general de análisis

La metodología implementada en R sigue los pasos:

  • Carga de librerías y descarga de datos del NASDAQ desde Yahoo Finance.

  • Definición de la ventana temporal (2018–2024) asegurando un mínimo de 60 observaciones.

Partición de la serie en:

  • Ventana de entrenamiento (para estimar el modelo).

  • Ventana de prueba (últimos 10 datos, para evaluar pronósticos).

Análisis de estacionariedad:

  • Inspección visual de la serie.

  • Prueba de Dickey–Fuller aumentada (adf.test).

  • Diferenciación si es necesario.

Identificación y estimación del modelo ARIMA:

  • Uso de auto.arima() (modelo automático).

  • Propuesta de un modelo manual ARIMA(1,1,1).

  • Comparación de AIC, BIC y AICc para seleccionar el modelo final.

  • Diagnóstico de residuos con checkresiduals.

  • Pronóstico de los últimos 10 periodos y evaluación de precisión frente a la ventana de prueba (accuracy).

  • Discusión e interpretación de los resultados en términos económicos.

A continuación se presenta el código correspondiente.

library(quantmod)
library(fpp2)
library(tseries)
library(gridExtra)
library(xts)
library(ggplot2)

# 1. Carga de datos: NASDAQ 2018–2024

fecha_inicio <- "2018-01-01"
fecha_fin    <- "2024-12-31"

datos_raw <- getSymbols("^IXIC",
src = "yahoo",
from = fecha_inicio,
to   = fecha_fin,
auto.assign = FALSE)

accion <- Cl(datos_raw)
names(accion) <- "NASDAQ"

# Validación de número de observaciones

length(accion)
## [1] 1760
autoplot(accion) +
ggtitle("Precio de cierre NASDAQ Composite (^IXIC)") +
ylab("Puntos del índice") +
xlab("Fecha")

3 Descripción de la serie temporal

3.1 Contexto histórico

La serie analizada cubre casi siete años de información financiera (2018–2024). Durante este periodo se observan varios hitos relevantes:

  • 2018–2019: crecimiento asociado al ciclo expansivo previo a la pandemia, con un comportamiento alcista moderado.

  • 2020–2021: fuerte volatilidad originada por la pandemia de COVID-19. Inicialmente se presenta una caída abrupta, seguida por una recuperación rápida impulsada por políticas monetarias expansivas y el auge de servicios digitales.

  • 2022: fase de corrección, marcada por el aumento de tasas de interés y temores de recesión. El índice registra descensos importantes.

  • 2023–2024: recuperación y nuevos máximos históricos, impulsados en gran medida por la expectativa de ganancias de productividad asociadas a la Inteligencia Artificial y a la inversión en infraestructura tecnológica (semiconductores, centros de datos, software de IA, etc.).

Estos episodios se reflejan en el gráfico anterior, donde se aprecia una tendencia global creciente, interrumpida por caídas temporales pero con una clara trayectoria de largo plazo al alza.

3.2 Estadísticos descriptivos

A continuación se presentan algunos estadísticos descriptivos básicos de la serie de entrenamiento (todos los datos excepto los últimos 10, que se reservan para prueba):

n_total       <- length(accion)
n_pronostico  <- 10

ventana_train <- accion[1:(n_total - n_pronostico)]
ventana_test  <- accion[(n_total - n_pronostico + 1):n_total]

summary(ventana_train)
##      Index                NASDAQ     
##  Min.   :2018-01-02   Min.   : 6193  
##  1st Qu.:2019-09-27   1st Qu.: 8111  
##  Median :2021-06-23   Median :11747  
##  Mean   :2021-06-23   Mean   :11720  
##  3rd Qu.:2023-03-20   3rd Qu.:14160  
##  Max.   :2024-12-13   Max.   :20035
sd(ventana_train)
## [1] 3389.246

Los resultados muestran el nivel promedio del índice en el periodo de entrenamiento, así como su dispersión (desviación estándar), los valores mínimo y máximo. La elevada desviación estándar refleja la volatilidad típica de un índice bursátil tecnológico. El rango entre mínimo y máximo, junto con la clara tendencia alcista observada en el gráfico, sugiere que la serie no es estacionaria en niveles, lo que justifica la aplicación de técnicas de diferenciación en la etapa de modelado.

4 Resultados del modelo ARIMA

4.1 Análisis de estacionariedad

Primero, se analiza la estacionariedad de la serie en niveles y se aplica la prueba de Dickey–Fuller aumentada (ADF):

autoplot(ventana_train) + ggtitle("Serie de entrenamiento NASDAQ") +
ylab("Puntos del índice") + xlab("Fecha")

ggAcf(ventana_train) + ggtitle("ACF de la serie en niveles")

adf_original <- adf.test(ventana_train)
adf_original
## 
##  Augmented Dickey-Fuller Test
## 
## data:  ventana_train
## Dickey-Fuller = -1.5729, Lag order = 12, p-value = 0.7591
## alternative hypothesis: stationary

Visualmente la serie presenta una tendencia positiva marcada y la función de autocorrelación (ACF) decae lentamente, lo que es consistente con no estacionariedad. La prueba ADF no rechaza la hipótesis nula de raíz unitaria (p-value alto), indicando que la serie en niveles no es estacionaria.

Para corregir este problema se aplica una diferenciación de primer orden, obteniendo la serie de rendimientos aproximados:

miserie <- diff(ventana_train) %>% na.omit()

autoplot(miserie) + ggtitle("Serie diferenciada (d = 1)") +
ylab("Diferencia del precio de cierre") + xlab("Fecha")

grid.arrange(
ggAcf(miserie)  + ggtitle("ACF de la serie diferenciada"),
ggPacf(miserie) + ggtitle("PACF de la serie diferenciada"),
nrow = 1
)

adf_diff <- adf.test(miserie)
adf_diff
## 
##  Augmented Dickey-Fuller Test
## 
## data:  miserie
## Dickey-Fuller = -11.668, Lag order = 12, p-value = 0.01
## alternative hypothesis: stationary

Después de diferenciar, la serie presenta un comportamiento más estable alrededor de una media aproximadamente constante, sin tendencia clara. La ACF y la PACF muestran cortes más rápidos y la prueba ADF rechaza la hipótesis de raíz unitaria (p-value bajo), por lo que se concluye que la serie es estacionaria en primera diferencia. Esto sugiere utilizar modelos ARIMA con d=1.

4.2 Selección del modelo ARIMA

Se estiman dos tipos de modelos sobre la serie de entrenamiento:

  • Un modelo automático, seleccionado por la función auto.arima() sin componente estacional.

  • Un modelo manual ARIMA(1,1,1), elegido como alternativa razonable al observar las funciones ACF y PACF de la serie diferenciada.

# Modelo automático

modelo_auto <- auto.arima(ventana_train,
seasonal      = FALSE,
stepwise      = FALSE,
approximation = FALSE)

# Modelo manual ARIMA(1,1,1)

modelo_manual <- Arima(ventana_train, order = c(1, 1, 1))

modelo_auto
## Series: ventana_train 
## ARIMA(1,1,0) with drift 
## 
## Coefficients:
##           ar1   drift
##       -0.0682  7.3820
## s.e.   0.0239  3.7341
## 
## sigma^2 = 27856:  log likelihood = -11431.06
## AIC=22868.13   AICc=22868.14   BIC=22884.53
modelo_manual
## Series: ventana_train 
## ARIMA(1,1,1) 
## 
## Coefficients:
##           ar1     ma1
##       -0.4398  0.3746
## s.e.   0.1873  0.1931
## 
## sigma^2 = 27894:  log likelihood = -11432.26
## AIC=22870.52   AICc=22870.53   BIC=22886.92
# Comparación de criterios de información

data.frame(
Modelo = c("Auto ARIMA", "ARIMA(1,1,1)"),
AIC    = c(AIC(modelo_auto),  AIC(modelo_manual)),
BIC    = c(BIC(modelo_auto),  BIC(modelo_manual)),
AICc   = c(modelo_auto$aicc,  modelo_manual$aicc)
)
##         Modelo      AIC      BIC     AICc
## 1   Auto ARIMA 22868.13 22884.53 22868.14
## 2 ARIMA(1,1,1) 22870.52 22886.92 22870.53

En la tabla de criterios de información se observa qué modelo logra los valores más bajos de AIC, BIC y AICc. De acuerdo con la guía metodológica, se selecciona como mejor modelo aquel con el menor AICc, que en nuestro caso corresponde al modelo identificado por auto.arima() (típicamente un ARIMA(0,1,0) con deriva positiva, es decir, una caminata aleatoria con tendencia).

Informe Series de tiempo

Este resultado es coherente con la naturaleza de los precios bursátiles: gran parte de la dinámica se comporta como una caminata aleatoria, mientras que la deriva positiva captura la tendencia alcista de largo plazo impulsada por la innovación tecnológica.

Para trabajar con un único modelo en el resto del análisis se define:

mejor_modelo <- if (modelo_auto$aicc < modelo_manual$aicc) modelo_auto else modelo_manual
mejor_modelo
## Series: ventana_train 
## ARIMA(1,1,0) with drift 
## 
## Coefficients:
##           ar1   drift
##       -0.0682  7.3820
## s.e.   0.0239  3.7341
## 
## sigma^2 = 27856:  log likelihood = -11431.06
## AIC=22868.13   AICc=22868.14   BIC=22884.53

4.3 Diagnóstico de residuos

Una vez seleccionado el modelo, se verifica que los residuos se comporten como ruido blanco (sin autocorrelación significativa ni patrones sistemáticos). Para ello se utiliza la función checkresiduals():

checkresiduals(mejor_modelo)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(1,1,0) with drift
## Q* = 36.52, df = 9, p-value = 3.204e-05
## 
## Model df: 1.   Total lags used: 10

En los gráficos de diagnóstico se espera observar:

  • Residuos centrados en cero y con varianza aproximadamente constante.

  • ACF de residuos sin autocorrelaciones significativas (la mayoría de barras dentro de las bandas de confianza).

  • Un p-value alto en la prueba de Ljung–Box, indicando que no queda autocorrelación remanente.

  • Bajo estas condiciones se concluye que el modelo seleccionado captura adecuadamente la estructura temporal de la serie, y que los errores restantes pueden considerarse ruido aleatorio.

4.4 Pronósticos y evaluación

Con el modelo validado, se generan pronósticos para los últimos 10 periodos y se comparan con los datos reales de la ventana de prueba.

pronostico <- forecast(mejor_modelo, h = n_pronostico, level = 0.95)

# Fechas reales

fechas_train      <- index(ventana_train)
fechas_test       <- index(ventana_test)
fechas_pronostico <- fechas_test  # alineamos pronóstico con ventana de prueba

# Serie completa

df_grafico <- data.frame(
Fecha = index(accion),
Valor = as.numeric(accion)
)

df_pronostico <- data.frame(
Fecha      = fechas_pronostico,
Pronostico = as.numeric(pronostico$mean),
Lower      = as.numeric(pronostico$lower),
Upper      = as.numeric(pronostico$upper)
)

ggplot() +
geom_line(data = df_grafico,
aes(x = Fecha, y = Valor),
size = 0.7) +
geom_line(data = df_pronostico,
aes(x = Fecha, y = Pronostico),
size = 1) +
geom_ribbon(data = df_pronostico,
aes(x = Fecha, ymin = Lower, ymax = Upper),
alpha = 0.3) +
geom_line(data = data.frame(Fecha = fechas_test,
Valor = as.numeric(ventana_test)),
aes(x = Fecha, y = Valor),
size = 1) +
ggtitle("Pronóstico NASDAQ vs valores observados") +
xlab("Fecha") +
ylab("Puntos NASDAQ") +
theme_minimal()

En el gráfico se distingue:

  • La serie histórica completa (línea negra).

  • El pronóstico para los últimos 10 puntos (línea azul).

  • La banda de confianza del 95% (área sombreada).

  • Los valores observados en la ventana de prueba (línea roja), que permiten visualizar la calidad del pronóstico.

A continuación se muestran los valores reales y pronosticados, así como las métricas de precisión:

# Valores reales y pronosticados

ventana_test
##              NASDAQ
## 2024-12-16 20173.89
## 2024-12-17 20109.06
## 2024-12-18 19392.69
## 2024-12-19 19372.77
## 2024-12-20 19572.60
## 2024-12-23 19764.88
## 2024-12-24 20031.13
## 2024-12-26 20020.36
## 2024-12-27 19722.03
## 2024-12-30 19486.79
pronostico$mean
## Time Series:
## Start = 1751 
## End = 1760 
## Frequency = 1 
##  [1] 19932.98 19940.44 19947.81 19955.20 19962.58 19969.96 19977.34 19984.72
##  [9] 19992.11 19999.49
# Evaluación de precisión (RMSE, MAE, MAPE, etc.)

accuracy(pronostico, ventana_test)
##                         ME     RMSE      MAE         MPE     MAPE      MASE
## Training set  8.582869e-03 166.7585 119.0474 -0.02134259 1.042124 0.9944975
## Test set     -2.016421e+02 356.0843 301.4344 -1.04201898 1.537870 2.5181197
##                    ACF1
## Training set 0.00154488
## Test set             NA

En general, un RMSE y MAE relativamente bajos, junto con un MAPE moderado, indican que el modelo reproduce adecuadamente el comportamiento de corto plazo del índice. Es esperable cierto grado de discrepancia debido a la alta volatilidad de los mercados financieros; sin embargo, mientras los valores observados se mantengan dentro o cerca de las bandas de confianza, el modelo se considera razonable para fines de pronóstico agregado.

5 Conclusiones

5.1 Síntesis de hallazgos

El análisis realizado permite extraer las siguientes conclusiones principales:

  • La serie de precios de cierre del NASDAQ Composite entre 2018 y 2024 presenta una tendencia alcista de largo plazo, interrumpida por episodios de alta volatilidad asociados a eventos macroeconómicos (COVID-19, correcciones de mercado) y a la posterior recuperación ligada al auge de la Inteligencia Artificial.

  • La serie no es estacionaria en niveles, pero se vuelve estacionaria tras aplicar una diferenciación de primer orden, lo que justifica el uso de modelos ARIMA con d=1.

  • La comparación de criterios de información (AIC, BIC, AICc) sugiere que el modelo seleccionado automáticamente por auto.arima() (típicamente un ARIMA(0,1,0) con deriva) ofrece un buen compromiso entre ajuste y parsimonia, siendo capaz de capturar la tendencia general del índice con un número reducido de parámetros.

  • El diagnóstico de residuos indica que no queda autocorrelación significativa y que estos se comportan como ruido blanco, lo cual respalda la validez del modelo.

  • Los pronósticos para los últimos 10 periodos muestran que el modelo reproduce razonablemente la trayectoria observada, manteniendo la mayor parte de los valores reales dentro o cerca de los intervalos de confianza del 95%.

5.2 Implicaciones de los pronósticos

Desde el punto de vista de la toma de decisiones financieras, los resultados sugieren que el comportamiento del NASDAQ puede describirse como una caminata aleatoria con deriva positiva: los precios incorporan rápidamente la información disponible, pero existe una tendencia estructural al alza asociada al progreso tecnológico. Esto respalda la idea de que, a pesar de la volatilidad de corto plazo, mantener posiciones a largo plazo en el sector tecnológico puede ser una estrategia consistente con la dinámica histórica del índice.

No obstante, las bandas de confianza crecientes recuerdan que todo pronóstico está sujeto a incertidumbre y que eventos inesperados (cambios regulatorios, shocks macroeconómicos o fallos tecnológicos) pueden alterar significativamente la trayectoria futura.

5.3 Limitaciones y posibles mejoras

El trabajo presenta algunas limitaciones importantes:

  • Se modela la serie en términos de precios en niveles (con diferenciación), pero no se incorporan transformaciones como log-precios o rendimientos porcentuales, que podrían ser más apropiadas para ciertos análisis financieros.

  • El modelo ARIMA utilizado es univariado: no incluye información de otras variables macroeconómicas (tasas de interés, inflación, indicadores de actividad económica) ni medidas de sentimiento del mercado.

  • No se modela explícitamente la volatilidad (por ejemplo, mediante modelos ARCH/GARCH), a pesar de que los mercados financieros suelen presentar heterocedasticidad.

Como líneas de trabajo futuro se propone:

  • Explorar modelos en log-rendimientos y comparar su desempeño.

  • Incorporar variables exógenas relevantes en un esquema ARIMAX.

  • Complementar el análisis con modelos de volatilidad y técnicas de aprendizaje automático que puedan capturar relaciones no lineales.

En conjunto, el estudio cumple el objetivo del taller: aplicar la metodología ARIMA a una serie financiera real, realizar un análisis cuidadoso de su estacionariedad, seleccionar y validar un modelo apropiado, y utilizarlo para pronosticar el comportamiento de corto plazo del NASDAQ, conectando los resultados con el contexto económico y tecnológico actual.