Tema: Aplicación de modelos preliminares.

Instrucciones: Prepare un reporte breve que contenga:

I. Las posibles técnicas estadísticas de clase que aplicará en su proyecto.

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.

II. Resultados preliminares y sus interpretaciones (Incluir códigos de R usados).

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
)

Comportamiento

# 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.

Descomposición

data.ts_clean <- na.approx(data.ts) # NA

descomp <- decompose(data.ts_clean)
plot(descomp)

Interpretación

Autocorrelación

#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.

Estacionariedad

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.

Ajuste del modelo ARIMA

# 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.

Diagnóstico del modelo seleccionado (AR(3))

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.

Pronóstico con el modelo AR(3)

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.

III. Reflexión sobre posibles limitaciones.

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.