TALLER N°1

Empezamoss agregando la base de datos

library(readxl)
taller<- read_excel("C:\\Users\\bpena\\OneDrive\\Documentos\\cartera_datos.xlsx")
taller

Convertimos la base de datos en series de tiempo

taller_1 <- taller$`Cartera hipotecaria en moneda legal, mensual(Dato fin de mes) Miles de millones COP`
datos1.ts <- ts(taller_1, start = c(2015, 1), frequency = 12)
datos1.ts
##          Jan     Feb     Mar     Apr     May     Jun     Jul     Aug     Sep
## 2015  36.848  37.310  37.615  38.377  38.954  39.139  39.730  40.153  41.005
## 2016  43.061  43.527  44.223  44.826  45.360  46.154  46.677  47.322  47.500
## 2017  49.202  49.840  50.230  50.678  51.244  51.353  51.707  52.417  53.053
## 2018  54.857  55.152  55.864  56.345  57.123  57.775  57.669  58.546  59.182
## 2019  61.711  62.206  62.408  62.700  63.147  63.722  64.379  64.890  65.469
## 2020  67.758  68.326  68.506  68.619  68.846  69.135  69.485  69.661  70.110
## 2021  72.305  73.163  73.890  74.697  75.292  76.094  77.049  77.763  79.225
## 2022  82.837  83.852  85.097  85.930  86.880  88.144  89.193  90.292  91.358
## 2023  94.667  95.180  95.743  96.068  96.771  97.286  97.641  98.537  99.443
## 2024 102.950 103.463 103.498 103.862 104.647 105.156 105.615 106.353 107.052
## 2025 111.225                                                                
##          Oct     Nov     Dec
## 2015  41.234  41.821  42.717
## 2016  47.884  48.379  49.113
## 2017  53.517  53.864  54.692
## 2018  59.878  60.584  61.336
## 2019  66.042  66.639  67.347
## 2020  70.707  71.121  72.132
## 2021  80.108  80.953  82.424
## 2022  92.207  93.514  94.547
## 2023 100.135 101.388 102.398
## 2024 107.976 109.094 110.440
## 2025

utilizamos este codigo dado que nuestra base de datos termina en enero de 2025 y no se rellene con datos falsos

Punto 5 (comprobar)

Graficos

Comenzamos mirando los graficos

plot(datos1.ts , main="serie de tiempo", ylab= "CARTERA", col="red")#podemos ver que es una caminata aleatoria

con esto podemos afirmar que se va notando que tenemos una caminata aleatoria(“mal llamado caminata de borracho”)

Prueba dickey-fuller

library(tseries)
adf.test(datos1.ts, k = 0)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  datos1.ts
## Dickey-Fuller = -0.093823, Lag order = 0, p-value = 0.99
## alternative hypothesis: stationary

como verificamos afirmamos que como es valor p es mayor a 0.05 se confirma que la serie no es estacionaria

Punto 6 (modelo ARMA)

para poder seguir, necesitamos mirar los graficos PACF Y ACF con los datos originales

Grafico PACF

pacf(ts(datos1.ts, frequency = 1))

como verificamos que hay un resago dado que entra en el segundo. Entonces seria “1”

Grafico ACF

acf(ts(datos1.ts, frequency = 1))

aqui podemos observar que no entran en ningun resago entonces es “0”

Modelo “ARMA”

le agregamos a este codigo el method ML por lo que funcion arima de una vez reconoce si la serie es estacionaria o no por lo tanto no permite hacer la funcion si la serie no es estacionaria

modelo1 <- arima(datos1.ts, order = c(1, 0, 0), method = "ML")
modelo1
## 
## Call:
## arima(x = datos1.ts, order = c(1, 0, 0), method = "ML")
## 
## Coefficients:
##          ar1  intercept
##       0.9998    73.9874
## s.e.  0.0002    36.8469
## 
## sigma^2 estimated as 0.4811:  log likelihood = -131.41,  aic = 268.81

Punto 7

volvemos a realizar lo del 5 punto pero esta vez comenzando haciendo las diferencias para que la serie sea estacionaria

diferencia-1

library(forecast)
ndiffs(datos1.ts)
## [1] 2

comenzamos mirando que nos toca hacer 2 diferencias pero ha medida que vamos haciendo cada diferencia verificamos si es estacionaria o no

seriediff <- diff(datos1.ts)
seriediff
##         Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct
## 2015         0.462  0.305  0.762  0.577  0.185  0.591  0.423  0.852  0.229
## 2016  0.344  0.466  0.696  0.603  0.534  0.794  0.523  0.645  0.178  0.384
## 2017  0.089  0.638  0.390  0.448  0.566  0.109  0.354  0.710  0.636  0.464
## 2018  0.165  0.295  0.712  0.481  0.778  0.652 -0.106  0.877  0.636  0.696
## 2019  0.375  0.495  0.202  0.292  0.447  0.575  0.657  0.511  0.579  0.573
## 2020  0.411  0.568  0.180  0.113  0.227  0.289  0.350  0.176  0.449  0.597
## 2021  0.173  0.858  0.727  0.807  0.595  0.802  0.955  0.714  1.462  0.883
## 2022  0.413  1.015  1.245  0.833  0.950  1.264  1.049  1.099  1.066  0.849
## 2023  0.120  0.513  0.563  0.325  0.703  0.515  0.355  0.896  0.906  0.692
## 2024  0.552  0.513  0.035  0.364  0.785  0.509  0.459  0.738  0.699  0.924
## 2025  0.785                                                               
##         Nov    Dec
## 2015  0.587  0.896
## 2016  0.495  0.734
## 2017  0.347  0.828
## 2018  0.706  0.752
## 2019  0.597  0.708
## 2020  0.414  1.011
## 2021  0.845  1.471
## 2022  1.307  1.033
## 2023  1.253  1.010
## 2024  1.118  1.346
## 2025

grafico-1

plot(seriediff)

comenzamos aver a diferencia con los datos originales ahi un cambio notorio pero no podemos afirmar con solo mirar el grafico

Prueba dickey fuller-1

adf.test(seriediff)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  seriediff
## Dickey-Fuller = -3.3603, Lag order = 4, p-value = 0.06453
## alternative hypothesis: stationary

con el p valor ya podriamos decir que aun no es estacionaria dado que es mayor del 0.05

diferencia-2

seriediff2 <- diff(seriediff)
seriediff2
##         Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct
## 2015               -0.157  0.457 -0.185 -0.392  0.406 -0.168  0.429 -0.623
## 2016 -0.552  0.122  0.230 -0.093 -0.069  0.260 -0.271  0.122 -0.467  0.206
## 2017 -0.645  0.549 -0.248  0.058  0.118 -0.457  0.245  0.356 -0.074 -0.172
## 2018 -0.663  0.130  0.417 -0.231  0.297 -0.126 -0.758  0.983 -0.241  0.060
## 2019 -0.377  0.120 -0.293  0.090  0.155  0.128  0.082 -0.146  0.068 -0.006
## 2020 -0.297  0.157 -0.388 -0.067  0.114  0.062  0.061 -0.174  0.273  0.148
## 2021 -0.838  0.685 -0.131  0.080 -0.212  0.207  0.153 -0.241  0.748 -0.579
## 2022 -1.058  0.602  0.230 -0.412  0.117  0.314 -0.215  0.050 -0.033 -0.217
## 2023 -0.913  0.393  0.050 -0.238  0.378 -0.188 -0.160  0.541  0.010 -0.214
## 2024 -0.458 -0.039 -0.478  0.329  0.421 -0.276 -0.050  0.279 -0.039  0.225
## 2025 -0.561                                                               
##         Nov    Dec
## 2015  0.358  0.309
## 2016  0.111  0.239
## 2017 -0.117  0.481
## 2018  0.010  0.046
## 2019  0.024  0.111
## 2020 -0.183  0.597
## 2021 -0.038  0.626
## 2022  0.458 -0.274
## 2023  0.561 -0.243
## 2024  0.194  0.228
## 2025

graficos-2

plot(seriediff2)

Ahora este grafico comparandolo con el primero con los datos originales podemos ver un gran cambio

Prueba dickey-fuller-2

adf.test(seriediff2)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  seriediff2
## Dickey-Fuller = -6.6152, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary

dado que nos da menos de 0.05 con la prueba dickey fuller podemos afirmar que ahora la serie si es estacionaria

Punto 8 (modelo ARIMA)

Grafico PACF

pacf(ts(seriediff2, frequency = 1))

el resago entra en el numero 3 asi que seria “2”

Grafico ACF

acf(ts(seriediff2, frequency = 1))

aqui podemos observar como el resago entra en el 1 entonces seria “0”

Modelo ARIMA

modelo2<- arima(datos1.ts, order = c(2,2,0))
modelo2
## 
## Call:
## arima(x = datos1.ts, order = c(2, 2, 0))
## 
## Coefficients:
##           ar1      ar2
##       -0.7405  -0.4405
## s.e.   0.0827   0.0828
## 
## sigma^2 estimated as 0.07696:  log likelihood = -16.64,  aic = 39.27

Punto 9 (Mejor modelo)

RMSE

modelo1

library(Metrics)
rmse1 <- rmse(datos1.ts, fitted(modelo1))

modelo 2

rmse2 <- rmse(datos1.ts, fitted(modelo2))

tabla de resumen

resumen <- data.frame(
  Modelo = c("ARIMA(1,0,0)", "ARIMA(2,2,0)"),
  RMSE = c(rmse1, rmse2)
)

resumen[order(resumen$RMSE), ]

viendo que tenemos menor RMSE con el modelo 2 trabajaremos con ese modelo para comparar los pronosticos

verificacion por summary

de igual manera verificamos los resultados anteriores con el summary

modelo 1
summary(modelo1)
## 
## Call:
## arima(x = datos1.ts, order = c(1, 0, 0), method = "ML")
## 
## Coefficients:
##          ar1  intercept
##       0.9998    73.9874
## s.e.  0.0002    36.8469
## 
## sigma^2 estimated as 0.4811:  log likelihood = -131.41,  aic = 268.81
## 
## Training set error measures:
##                    ME      RMSE       MAE       MPE      MAPE      MASE
## Training set 0.608219 0.6936365 0.6215138 0.8894043 0.9237217 0.9999015
##                   ACF1
## Training set 0.3126962
modelo 2
summary(modelo2)
## 
## Call:
## arima(x = datos1.ts, order = c(2, 2, 0))
## 
## Coefficients:
##           ar1      ar2
##       -0.7405  -0.4405
## s.e.   0.0827   0.0828
## 
## sigma^2 estimated as 0.07696:  log likelihood = -16.64,  aic = 39.27
## 
## Training set error measures:
##                      ME      RMSE       MAE        MPE      MAPE      MASE
## Training set 0.01047725 0.2751548 0.2121115 0.01340932 0.3209767 0.3412485
##                      ACF1
## Training set 1.274951e-05

punto 10

valor pronosticado

pronostico del modelo 2

mejor_modelo <- modelo2  

forecast_1 <- predict(mejor_modelo, n.ahead = 1)

forecast_1$pred   
##          Feb
## 2025 112.325
forecast_1$se     
##            Feb
## 2025 0.2774178

valor real del periodo

tail(datos1.ts, 1)
##          Jan
## 2025 111.225

.