La serie temporal analizada representa la concentración mensual de CO2 atmosférico medida en el Observatorio de Mauna Loa (Hawái, EE.UU.) desde marzo de 1958 hasta la actualidad. Este fenómeno es de gran interés debido a su relación con el cambio climático y la actividad humana.
Serie temporal real y regular (mensual) ademas de ser ideal para este análisis de tendencia y estacionalidad.
Larga duración (más de 60 años) que permite estudiar patrones a largo plazo.
Tema relevante y de actualidad científica = concentraciones de CO2.
Datos públicos y reconocidos de NOAA GML.
Frecuencia: mensual
Periodo: marzo 1958 – presente
co2_data <- read_csv(
"C:/Users/gomez/Downloads/co2_mm_mlo.csv",
comment = "#",
col_names = c("year","month","decimal_date","co2","interpolated","trend","days"),
col_types = cols(
year = col_double(),
month = col_double(),
decimal_date = col_double(),
co2 = col_double(),
interpolated = col_double(),
trend = col_double(),
days = col_double()
),
skip_empty_rows = TRUE
)
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
## dat <- vroom(...)
## problems(dat)
co2_data <- co2_data |>
filter(!is.na(co2))
co2_data <- co2_data |>
mutate(Date = yearmonth(paste(year, month, sep = "-"))) |>
select(Date, co2) |>
as_tsibble(index = Date)
interval(co2_data)
## <interval[1]>
## [1] 1M
has_gaps(co2_data)
## # A tibble: 1 × 1
## .gaps
## <lgl>
## 1 FALSE
Para verificar la frecuencia y consistencia temporal, se comprobó que las observaciones estuvieran equidistantes en el tiempo, el conjunto de datos presenta una frecuencia mensual (12 registros por año) sin huecos ni duplicados en las fechas, lo que garantiza una correcta estructura de serie temporal y permite aplicar los métodos de análisis y modelado con confianza.
autoplot(co2_data, co2)
Aca se muestra la concentración de CO2 a lo largo del tiempo, desde 1958 hasta ahora. Se observa una tendencia claramente ascendente, lo que significa que los niveles de CO2 en la atmosfera han aumentado de forma constante durante todo el periodo. Además, se notan pequeñas oscilaciones regulares dentro de cada año, esas subidas y bajadas son los ciclos estacionales del CO2
co2_data |>
gg_season(co2)
En este se presenta los valores de CO2 agrupados por meses y coloreados según el año. Aquí se puede ver con más claridad la forma del ciclo anual el CO2 tiende a subir entre mayo y junio y luego baja hacia septiembre y octubre. Además, se nota que las líneas más recientes están más arriba que las antiguas, lo que confirma que, aunque el patrón mensual se repite, los niveles generales de CO2 siguen aumentando con el tiempo.
gg_subseries(co2_data, co2)
Finalmente aca se divide los datos por cada mes del año, mostrando cómo cambia el CO2 a lo largo del tiempo dentro de cada mes. En todas las facetas o paneles se ve la línea negra inclinada hacia arriba, lo que indica que, sin importar el mes, los niveles de CO2 han ido creciendo de manera constante con los años, ahora la línea azul nos representa el promedio de CO2 por mes, y se nota que varía un poco, ya que algunos meses tienen valores más altos (como mayo o junio) y otros más bajos (como septiembre u octubre). Esto refuerza la idea de que existe una tendencia general creciente combinada con pequeñas variaciones mensuales regulares.
co2_data |>
ACF(co2) |>
autoplot()
En la gráfica ACF se ve que todas las barras están muy cerca del valor 1 y disminuyen muy lentamente conforme aumenta el rezago (lag). Esto significa que cada valor de la serie está fuertemente correlacionado con los anteriores, es decir, los valores pasados explican gran parte de los valores presentes.
co2_data |>
PACF(co2) |>
autoplot()
El comportamiento de la PACF sugiere que la serie podría volverse estacionaria si se le aplica una diferenciación (por ejemplo, restar cada valor con el anterior)
Al analizar las gráficas de ACF y PACF, se nota que la serie no es estacionaria, en la ACF las barras se mantienen muy altas y bajan lentamente, lo que muestra que los valores de la serie dependen mucho de los anteriores y que existe una tendencia a lo largo del tiempo y en la PACF, solo el primer rezago es importante y los demás ya no aportan mucho, lo que confirma que la serie tiene una fuerte relación con su pasado reciente, pero pierde correlación después.
lambda <- co2_data |>
features(co2, features = guerrero) |>
pull(lambda_guerrero)
co2_boxcox <- co2_data |>
mutate(co2_boxcox = box_cox(co2, lambda))
lambda
## [1] 0.05645287
co2_boxcox_plot <- co2_boxcox |>
filter(!is.na(co2_boxcox))
ggplot(co2_boxcox_plot, aes(x = Date, y = co2_boxcox)) +
geom_line(color = "blue")
Aunque la serie original mostraba una tendencia creciente y cierta estacionalidad, con la transformación Box-cox se redujo la amplitud de las oscilaciones y se logró que los cambios sean más proporcionales a los niveles de la serie, osea se suavizó la variabilidad sin alterar la forma general del patrón.
co2_diff <- co2_data |>
as_tsibble(index = Date) |>
mutate(diff12_co2 = difference(co2, lag = 12))
co2_diff_plot <- co2_diff |>
select(Date, diff12_co2) |>
filter(!is.na(diff12_co2))
ggplot(co2_diff_plot, aes(x = Date, y = diff12_co2)) +
geom_line(color = "red")
Luego se aplicó una diferenciación estacional (en este caso, de orden 12, ya que los datos son mensuales) para eliminar tanto la tendencia como la estacionalidad anual, y se puede notar que los valores ya no siguen una tendencia creciente, sino que oscilan alrededor de una media constante, esto indica que la serie ahora es más estacionaria, es decir, su media y varianza se mantienen relativamente estables en el tiempo.
co2_diff_long <- co2_diff |>
select(Date, co2, diff12_co2) |>
pivot_longer(
cols = c(co2, diff12_co2),
names_to = "tipo",
values_to = "valor"
) |>
filter(!is.na(valor))
ggplot(co2_diff_long, aes(x = Date, y = valor, color = tipo)) +
geom_line()
Comparación visual antes y después de la transformación/diferenciación
Antes de la diferenciación, la serie presenta una tendencia claramente ascendente y un patrón estacional repetitivo, pero después de aplicar la transformación, la serie ya no muestra tendencia, y las fluctuaciones parecen más aleatorias y estables en torno a un nivel constante.
co2_decomp <- co2_data |>
model(classical_decomposition(co2, type = "additive")) |>
components()
autoplot(co2_decomp)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## ℹ The deprecated feature was likely used in the ggtime package.
## Please report the issue to the authors.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: Removed 6 rows containing missing values or values outside the scale range
## (`geom_line()`).
Identificación y análisis de los componentes
En la gráfica de descomposición se observa que la tendencia del CO2 tiene un crecimiento constante y sostenido desde finales de los años 50, ademas la linea de tendencia sube de forma continua, lo que indica que los niveles de CO2 en la atmósfera han ido aumentando de manera progresiva con el paso de los años.
En cuanto a la estacionalidad, se nota un patrón que se repite todos los años. Son oscilaciones muy regulares y practicamente con la misma forma en cada ciclo, lo que significa que el comportamiento anual del CO2 es bastante estable y sigue un ritmo natural que no cambia demasiado con el tiempo.
Interpretación de los resultados
En general, la descomposición indica que la serie del CO2 está muy marcada por dos elementos principales, una tendencia creciente y una estacionalidad anual muy definida, la tendencia refleja que los niveles de CO2 han venido aumentando de manera constante durante décadas lo cual coincide con lo que se conoce sobre el incremento de emisiones a nivel global
co2_data <- co2_data |>
mutate(ma12 = slide_dbl(co2, mean, .before = 11, .complete = TRUE))
autoplot(co2_data, co2) +
autolayer(co2_data, ma12, color = "red")
## Warning: Removed 11 rows containing missing values or values outside the scale range
## (`geom_line()`).
Comparación entre la serie original y la suavizada
En la primera gráfica se observa la serie original de CO2 que es la linea negra junto con la versión suavizada mediante un método de suavizamiento exponencial el cual es la linea roja. La linea roja elimina gran parte del ruido y las oscilaciones mensuales, mostrando de forma mucho más clara la trayectoria general de la serie, aunque la serie original tiene variaciones marcadas todos los años, la curva suavizada sigue de manera muy cercana la tendencia ascendente, pero sin los picos abruptos.
fit_hw <- co2_data |>
model(ETS(co2 ~ error("A") + trend("A") + season("A")))
fc_hw <- fit_hw |>
forecast(h = "5 years")
fit_hw <- co2_data |>
model(ETS(co2 ~ error("A") + trend("A") + season("A")))
fc_hw <- fit_hw |>
forecast(h = "5 years")
autoplot(fc_hw, level = NULL) +
autolayer(co2_data, co2)
Discusión sobre la capacidad del modelo de suavizamiento para capturar la tendencia
El modelo de suavizamiento utilizado Holt-Winters muestra una buena capacidad para capturar la tendencia creciente de la serie, en la segunda grafica, donde aparece el pronóstico, se puede ver que el modelo continua la trayectoria ascendente de manera coherente con el comportamiento histórico.
Este tipo de modelos funciona bien porque el CO2 tiene una tendencia muy marcada y estable, por lo que el suavizamiento exponencial logra identificarla sin mayor dificultad.
Resumen del comportamiento de la serie
La serie temporal del CO2 presenta un comportamiento muy definido, en primer lugar, la tendencia muestra un crecimiento constante y sostenido desde finales de los años 50 hasta la actualidad, lo que indica un incremento continuo en los niveles atmosféricos de Co2 a lo largo del tiempo,ademas la serie posee una estacionalidad anual muy marcada, caracterizada por oscilaciones que se repiten prácticamente con la misma forma cada año. Estas variaciones suelen estar asociadas a procesos relacionados con la actividad de la vegetación y finalmente, el ruido o componente aleatorio es relativamente pequeño, lo que significa que la mayor parte de la variabilidad puede explicarse por la tendencia y la estacionalidad, sin cambios abruptos o patrones inesperados.
Reflexión sobre los hallazgos y proyecciones a futuro
Los resultados obtenidos muestran claramente que la concentración de CO2 en la atmosfera continua aumentando de forma consistente tanto la descomposición como los métodos de suavizamiento y pronóstico reflejan que esta tendencia ascendente es estable y probablemente seguirá así en los próximos años, a menos que ocurran cambios inesperados,k todo esto apunta a que los niveles de CO2 continuarán creciendo, manteniendo el mismo ritmo de aceleración observado históricamente.
Limitaciones del análisis y recomendaciones
una de las limitaciones que se pueden ver es que el análisis depende únicamente del comportamiento histórico de la serie esto significa que las proyecciones no consideran posibles eventos externos que podrían alterar la tendencia futura, como políticas ambientales, cambios drásticos en las emisiones o alteraciones climáticas inesperadas.
Como recomendación, sería útil incorporar información adicional, como datos sobre temperatura, actividad industrial o condiciones climáticas, lo cual podría ayudar a el análisis y permitir una interpretación más completa.
Fuente de los datos (con enlace o evidencia)
Link: https://gml.noaa.gov/ccgg/trends/data.html
Referencias bibliográficas relevantes
Ponce, Luis Mauricio. Método Holt-Winters para Predicciones en R usando ggplot2. RPubs, 2017. Disponible en: https://rpubs.com/Maugnetic/282626
Miguel. Box_CoX. RPubs, 2025. Disponible en: https://rpubs.com/mpachonh/1220343
Molina, Patricia. Funciones de Autocovarianzas y Autocorrelaciones. RPubs, 2018. Disponible en: https://rpubs.com/PatriciaMolina/378266
Hyndman, Rob J. & Athanasopoulos, George. Seasonal and Trend Decomposition using Loess (STL). Online text: OTexts — Forecasting: Principles and Practice. Disponible en: https://otexts.com/fppsp/stl.html