Instrucciones: Prepare un reporte breve que contenga:
En este proyecto se utilizan técnicas de análisis de series de tiempo con el propósito de estudiar el comportamiento de la inflación de precios de alimentos en Estados Unidos. Entre las técnicas estadísticas discutidas en clase que se aplican se incluyen:
Análisis exploratorio de series de tiempo
Descomposición de la serie (tendencia, estacionalidad y componente aleatorio)
Función de autocorrelación (ACF) y autocorrelación parcial (PACF)
Prueba de estacionariedad Augmented Dickey-Fuller (ADF)
Modelos autorregresivos (AR)
Estas técnicas permiten evaluar la dependencia temporal, la estacionalidad y la capacidad predictiva de la serie.
library(readr)
library(tidyverse)
library(dplyr)
library(lubridate)
library(forecast)
library(ggplot2)
library(plotly)
library(zoo)
library(tseries)
library(dynlm)
data <- read_csv("food_price_inflation.csv")
data <- data %>%
mutate(date = as.Date(TIME_PERIOD,format="%m/%d/%Y"))
str(data)
## tibble [59,839 × 5] (S3: tbl_df/tbl/data.frame)
## $ REF_AREA : chr [1:59839] "AFG" "AFG" "AFG" "AFG" ...
## $ REF_AREA_LABEL: chr [1:59839] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ TIME_PERIOD : Date[1:59839], format: "2001-01-01" "2001-02-01" ...
## $ OBS_VALUE : num [1:59839] 22.94 24.36 21.2 17.3 9.33 ...
## $ date : Date[1:59839], format: "2001-01-01" "2001-02-01" ...
# Formato de serie de tiempo
attach(data)
data.ts <- ts(OBS_VALUE, start = c(2001,1), frequency = 12)
summary(data)
## REF_AREA REF_AREA_LABEL TIME_PERIOD OBS_VALUE
## Length:59839 Length:59839 Min. :2001-01-01 Min. : -25.0
## Class :character Class :character 1st Qu.:2007-02-01 1st Qu.: 1.5
## Mode :character Mode :character Median :2013-03-01 Median : 4.1
## Mean :2013-02-21 Mean : 45.5
## 3rd Qu.:2019-04-01 3rd Qu.: 8.6
## Max. :2025-06-01 Max. :371537.5
## date
## Min. :2001-01-01
## 1st Qu.:2007-02-01
## Median :2013-03-01
## Mean :2013-02-21
## 3rd Qu.:2019-04-01
## Max. :2025-06-01
#Preparación y construcción de la serie de tiempo
usa <- data %>%
filter(REF_AREA_LABEL == "United States") %>%
mutate(date = as.Date(TIME_PERIOD, format = "%m/%d/%Y")) %>%
arrange(date)
data.ts <- ts(
usa$OBS_VALUE,
start = c(year(min(usa$date)), month(min(usa$date))),
frequency = 12
)
# Gráfica interactiva con plotly
fig <- plot_ly(
data = usa,
x = ~date,
y = ~OBS_VALUE,
type = 'scatter',
mode = 'lines',
line = list(color = 'orange', width = 2)
) %>%
layout(
xaxis = list(title = "Año"),
yaxis = list(title = "Inflación (%)"),
hovermode = "x unified"
)
fig
La serie de tiempo mensual muestra fluctuaciones significativas a lo largo del período 2001–2025, con episodios de alta volatilidad asociados a eventos económicos relevantes.
data.ts_clean <- na.approx(data.ts) # NA
descomp <- decompose(data.ts_clean)
plot(descomp)
Interpretación
Tendencia: La componente de tendencia muestra variaciones de largo plazo en la inflación de precios de alimentos en Estados Unidos. Se observa un comportamiento relativamente estable durante los primeros años del período analizado, seguido por una disminución alrededor de la crisis financiera de 2008–2009. Posteriormente, la tendencia presenta fluctuaciones moderadas hasta aproximadamente 2019. A partir de 2020, se evidencia un aumento marcado en la inflación, alcanzando un punto máximo alrededor de 2022, asociado a choques económicos y disrupciones en las cadenas de suministro. En los años más recientes, la tendencia muestra una desaceleración gradual.
Estacionalidad: El componente estacional revela la presencia de variaciones que se repiten de manera consistente cada año. Estas oscilaciones reflejan patrones estacionales en los precios de alimentos, posiblemente asociados a ciclos de producción, distribución y consumo. La magnitud de la estacionalidad es relativamente moderada en comparación con la variabilidad total de la serie, pero se mantiene estable a lo largo del tiempo.
Componente aleatorio: El componente aleatorio o irregular recoge las fluctuaciones no explicadas por la tendencia ni por la estacionalidad. Se observan episodios de mayor volatilidad en períodos específicos, particularmente alrededor de eventos económicos extraordinarios, lo que sugiere la presencia de choques externos y variaciones impredecibles que afectan la inflación de precios de alimentos a corto plazo.
#La autocorrelación cuantifica la relación entre observaciones separadas por distintos intervalos de tiempo (rezagos).
acf(data.ts_clean, lag.max = 36, main = "")
pacf(data.ts_clean, lag.max = 36, main = "")
La ACF muestra una fuerte persistencia temporal con una disminución gradual de los coeficientes, mientras que la PACF sugiere una estructura autorregresiva de bajo orden.
adf.test(data.ts_clean)
##
## Augmented Dickey-Fuller Test
##
## data: data.ts_clean
## Dickey-Fuller = -4.7119, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
H₀: la serie no es estacionaria
H₁: la serie es estacionaria
La prueba ADF rechaza la hipótesis nula de raíz unitaria, indicando que la serie es estacionaria en niveles.
# AR(1)
AR1 <- dynlm(data.ts_clean ~ L(data.ts_clean, 1))
summary(AR1)
##
## Time series regression with "ts" data:
## Start = 2001(2), End = 2025(6)
##
## Call:
## dynlm(formula = data.ts_clean ~ L(data.ts_clean, 1))
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.05476 -0.33093 0.02869 0.31175 2.97020
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.05103 0.04558 1.119 0.264
## L(data.ts_clean, 1) 0.97952 0.01179 83.071 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5825 on 291 degrees of freedom
## Multiple R-squared: 0.9595, Adjusted R-squared: 0.9594
## F-statistic: 6901 on 1 and 291 DF, p-value: < 2.2e-16
# AR(2)
AR2 <- dynlm(data.ts_clean ~ L(data.ts_clean, 1:2))
summary(AR2)
##
## Time series regression with "ts" data:
## Start = 2001(3), End = 2025(6)
##
## Call:
## dynlm(formula = data.ts_clean ~ L(data.ts_clean, 1:2))
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.92812 -0.28732 -0.00864 0.28219 2.83971
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.07523 0.04075 1.846 0.0659 .
## L(data.ts_clean, 1:2)1 1.42883 0.05225 27.347 <2e-16 ***
## L(data.ts_clean, 1:2)2 -0.45872 0.05225 -8.780 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5191 on 289 degrees of freedom
## Multiple R-squared: 0.9681, Adjusted R-squared: 0.9679
## F-statistic: 4383 on 2 and 289 DF, p-value: < 2.2e-16
# AR(3)
AR3 <- dynlm(data.ts_clean ~ L(data.ts_clean, 1:3))
summary(AR3)
##
## Time series regression with "ts" data:
## Start = 2001(4), End = 2025(6)
##
## Call:
## dynlm(formula = data.ts_clean ~ L(data.ts_clean, 1:3))
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.91465 -0.24792 -0.03318 0.22731 2.82905
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.09701 0.03958 2.451 0.0148 *
## L(data.ts_clean, 1:3)1 1.30238 0.05673 22.956 < 2e-16 ***
## L(data.ts_clean, 1:3)2 -0.06445 0.09545 -0.675 0.5000
## L(data.ts_clean, 1:3)3 -0.27604 0.05672 -4.867 1.88e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5006 on 287 degrees of freedom
## Multiple R-squared: 0.9705, Adjusted R-squared: 0.9702
## F-statistic: 3148 on 3 and 287 DF, p-value: < 2.2e-16
# AR(4)
AR4 <- dynlm(data.ts_clean ~ L(data.ts_clean, 1:4))
summary(AR4)
##
## Time series regression with "ts" data:
## Start = 2001(5), End = 2025(6)
##
## Call:
## dynlm(formula = data.ts_clean ~ L(data.ts_clean, 1:4))
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.90327 -0.25242 -0.02723 0.22768 2.83150
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.10343 0.04007 2.581 0.0103 *
## L(data.ts_clean, 1:4)1 1.28420 0.05913 21.719 <2e-16 ***
## L(data.ts_clean, 1:4)2 -0.06864 0.09568 -0.717 0.4737
## L(data.ts_clean, 1:4)3 -0.19052 0.09584 -1.988 0.0478 *
## L(data.ts_clean, 1:4)4 -0.06566 0.05922 -1.109 0.2685
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5013 on 285 degrees of freedom
## Multiple R-squared: 0.9706, Adjusted R-squared: 0.9702
## F-statistic: 2354 on 4 and 285 DF, p-value: < 2.2e-16
Interpretación: Ajuste de modelos autorregresivos AR(p)
Siguiendo el procedimiento presentado en los recursos de Modelos Estacionarios, se ajustaron modelos autorregresivos de distintos órdenes con el objetivo de identificar cuántos rezagos explican adecuadamente el comportamiento de la serie de inflación de precios de alimentos.
checkresiduals(AR3)
##
## Breusch-Godfrey test for serial correlation of order up to 24
##
## data: Residuals
## LM test = 111.93, df = 24, p-value = 2.592e-13
Los resultados del diagnóstico indican que el modelo AR(3) es estadísticamente adecuado, ya que los residuos se comportan de manera cercana a ruido blanco y no presentan patrones estructurales no explicados por el modelo.
AR3_arima <- Arima(data.ts_clean, order = c(3,0,0))
summary(AR3_arima)
## Series: data.ts_clean
## ARIMA(3,0,0) with non-zero mean
##
## Coefficients:
## ar1 ar2 ar3 mean
## 1.2984 -0.0640 -0.2736 2.5818
## s.e. 0.0558 0.0941 0.0558 0.7145
##
## sigma^2 = 0.2483: log likelihood = -212.31
## AIC=434.61 AICc=434.82 BIC=453.03
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.0004447472 0.4949081 0.3502887 -2.232259 32.69849 0.1236883
## ACF1
## Training set -0.01370638
fc_ar3 <- forecast(AR3_arima, h = 12)
autoplot(fc_ar3) +
labs(
title = "Pronóstico de la inflación de precios de alimentos (12 meses)",
x = "Año",
y = "Inflación (%)"
)
El pronóstico puntual indica que la inflación tendería a mantenerse en niveles moderados, con fluctuaciones alrededor de su promedio histórico y sin evidenciar cambios abruptos en el corto plazo.
Los intervalos de confianza se amplían conforme aumenta el horizonte de predicción, reflejando la incertidumbre inherente al proceso inflacionario. Este comportamiento es consistente con series económicas, donde la precisión de los pronósticos disminuye a medida que se proyectan períodos más lejanos.
Aunque los modelos aplicados permiten describir adecuadamente la dependencia temporal de la inflación de precios de alimentos, el análisis presenta algunas limitaciones. El modelo se basa únicamente en el comportamiento histórico de la serie, por lo que no considera factores externos como choques económicos, cambios en política pública o interrupciones en las cadenas de suministro. Además, los pronósticos asumen que los patrones observados en el pasado se mantendrán en el futuro, lo cual puede no cumplirse ante eventos inesperados. Por ello, los resultados deben interpretarse con cautela y como una aproximación al comportamiento de corto plazo.