library(readr)
library(tseries)
## Warning: package 'tseries' was built under R version 4.3.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(forecast)
## Warning: package 'forecast' was built under R version 4.3.3
library(markdown)

PRONOSTICO TIPO DE CAMBIO PESO/DOLAR

Parte1

Importancia del analisis del tipo de cambio

La relacion economica y social que existe entre Mexico y Estados Unidos es demasiada estrecha y dinamica, parte de esta gran conexion depende de los tipos de cambio de ambas monedas pero nosotros nos centraremos en el peso/dolar; el peso/dólar juega un papel fundamental en la dinámica de la relación económica entre Estados Unidos y México, de este tipo de cambio dependen grandes e importantes sectores como es:

  • El comercio extranjero (tanto importaciones y exportaciones)
  • Las inversiones extranjeras directas y los flujos de inversion
  • Competitividad comercial
  • Estabilidad economica
  • El flujo de remesas provenientes de los mexicanos que viven en EUA.

Si logramos crear una prediccion la mas apegada a la realidad podremos crear estrategias comerciales, politicas, decisiones financieras y sociales que beneficien a todo el sector involucrado y a la economia.

Para esto buscaremos un modelo ARIMA lo mas ajustado posible mediante una serie de tiempo de los valores de cierre del tipo de cambio peso/dolar.

Antecedentes en la Literatura

La predicción del tipo de cambio peso/dólar ha sido un tema de gran interés para investigadores, economistas y tomadores de decisiones en México y Estados Unidos, debido a su impacto significativo en el comercio bilateral, la inversión extranjera, las remesas y la estabilidad financiera. A lo largo de los años, se han desarrollado diversos métodos y modelos para predecir el tipo de cambio, cada uno con sus propias ventajas y desventajas.

Un ejemplo es el articulo “Un modelo de predicción del tipo de cambio spot para la economía mexicana” de María de la Paz Guzman de la Universidad Autónoma Metropolitana Unidad Azcapotzalco publicado en la red de Revistas Científicas de América Latina, el Caribe, España y Portugal. Donde se comparte la idea de predecir el comportamiento del tipo de cambio spot para la economía mexicana el cual se sustenta en la metodología econométrica de Engle y Granger. Para dar validez al modelo de este pronóstico del tipo de cambio, ella utiliza conceptos como integración, cointegración, causalidad de Granger, vectores autorregresivos, exogeneidad fuerte y se destacan los estadísticos Dickey Fuller, Akaike y Schwarz, Johansen y el coeficiente de desigualdad de Theil.

Dentro de los resultados del pronóstico destaca que el pronóstico tiene un buen desempeño tanto dentro de la muestra como fuera de ella; ademas que el valor del peso con respecto al dólar difiere en unos centavos del valor que resulta en el pronóstico del tipo de cambio.

Base de datos y Ventana de tiempo

Recabamos una base de datos de los valores de cierre del tipo de cambio peso/dolar, la cual la descargamos de la pagina oficial de Banxico. Nuestra variable es el valor del tipo de cambio semanal. Respecto a la ventana de tiempo,establecimos valores semanales tomando el lapso de la primera semana de 2021 a la semana actual. Las unidades de nuestro estudio estan determinadas en pesos mexicanos.

datos <- read.csv("C:/Users/52477/Desktop/ECONO. 2/Proyecto Final/Tipo_Cambio.csv")

datos.ts=ts(datos,start=1,frequency = 1)

datos1 <- datos.ts

Grafica de serie-tiempo: peso/dolar

plot(datos1,xlab="Numero de Semanas",ylab="Valor peso/dolar",col="orange",lwd=2)

Prueba Dickey-Fuller

adf_result <- adf.test(datos1, alternative="stationary")

print(adf_result)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  datos1
## Dickey-Fuller = -2.3637, Lag order = 5, p-value = 0.4243
## alternative hypothesis: stationary

Prueba de Dickey-Fuller: El p-value de la prueba de Dickey-Fuller es de 0.4243, lo cual nos indica que se cumple la hipotesis nula lo cual se interpreta que la serie de tiempo es no estacionaria.

Integracion

Realizamos una integracion con el comando diff()

#PRIMERA INTEGRADA
#diff(datos1)
Variable1<-diff(datos1)

Nueva prueba de Dickey-Fuller

#2da prueba de Dickey-Fuller

adf_result2 <- adf.test(diff(datos1), alternative="stationary")
## Warning in adf.test(diff(datos1), alternative = "stationary"): p-value smaller
## than printed p-value
print(adf_result2)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff(datos1)
## Dickey-Fuller = -7.2313, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
plot(diff(datos1))

#La serie ya es estacionaria

Con la nueva prueba de Dickey-Fuller nos arroja un p-value de 0.01, lo cual cumple con la hipotesis alternativa y podemos determinar que nuestra serie de tiempo es estacionario y solo implico una integracion.

Integrada de orden 1

Graficas ACF y PACF

#Prueba de ACF y PACF

acf(Variable1)

#Para la prueba acf

pacf(Variable1)

En los estimadores de ACF obtenemos que el P0=1, y los demas estan muy cerca del 0. Por parte de los estimadores de PACF obtenemos que el primer valor es -.1, el segundo -.16, el tercero -.11, etc.Todos los valores oscilan entre -0.15 y 0.15

PARTE 2

AJUSTAMOS UN MODELO

Realizamos varias pruebas aleatorias de modelos arima

modelo<-arima(Variable1,order=c(3,0,0))
modelo
## 
## Call:
## arima(x = Variable1, order = c(3, 0, 0))
## 
## Coefficients:
##           ar1      ar2      ar3  intercept
##       -0.1442  -0.1866  -0.1213    -0.0191
## s.e.   0.0750   0.0745   0.0759     0.0148
## 
## sigma^2 estimated as 0.07994:  log likelihood = -27.31,  aic = 64.62
modelo<-arima(Variable1,order=c(1,0,0))
modelo
## 
## Call:
## arima(x = Variable1, order = c(1, 0, 0))
## 
## Coefficients:
##           ar1  intercept
##       -0.1061    -0.0192
## s.e.   0.0751     0.0198
## 
## sigma^2 estimated as 0.08358:  log likelihood = -31.15,  aic = 68.31
Xt <- Variable1
#datos1 -> Nuestra serie estacionaria
#Xt

INFORMACION AIC

Calcula los coeficientes AIC y BIC para varios candidatos ARIMA(p; d; q). Utilizaremos el ciclo for. Usaremos un máximo de 3 para p, un máximo de 3 para q y un máximo de 3 para d

P <-3
D <- 3
Q <- 3
m <- (P+1)*(D+1)*(Q+1)

tabla <- data.frame()

for(p in 0:P) for(d in 0:D) for(q in 0:Q){
  modelo <- arima(Xt, order=c(p,d,q))
  A <- AIC(modelo)
  sbic <- AIC(modelo, k=log(length(Xt)))
  
  tabla <- rbind(tabla, c(p,d,q, A, sbic))
}
tabla<-rename(tabla, 'p'=1, 'd'=2, 'q'=3, 'AIC'=4, 'sbic'=5)
tabla<-tabla[order(tabla$AIC),]
tabla<-tabla[order(tabla$sbic),]
tabla1 <- tabla[order(tabla$AIC),]
tabla1
##    p d q       AIC      sbic
## 52 3 0 3  60.81368  86.13197
## 18 1 0 1  62.18642  74.84557
## 3  0 0 2  62.40198  75.06113
## 4  0 0 3  63.03378  78.85771
## 34 2 0 1  63.05142  78.87535
## 19 1 0 2  63.08171  78.90564
## 51 3 0 2  63.54251  85.69601
## 49 3 0 0  64.61617  80.44010
## 20 1 0 3  65.01131  84.00002
## 50 3 0 1  65.05047  84.03918
## 35 2 0 2  65.05128  84.03999
## 33 2 0 0  65.14807  77.80721
## 36 2 0 3  67.06435  89.21785
## 2  0 0 1  67.19794  76.69229
## 1  0 0 0  68.29041  74.61998
## 17 1 0 0  68.30756  77.80192
## 8  0 1 3  69.16100  81.82014
## 56 3 1 3  70.44994  92.60344
## 24 1 1 3  71.00173  86.82566
## 54 3 1 1  71.19536  87.01929
## 38 2 1 1  71.48839  84.14753
## 55 3 1 2  71.95458  90.94330
## 39 2 1 2  72.82442  88.64835
## 40 2 1 3  73.03013  92.01885
## 7  0 1 2  73.36347  82.85783
## 6  0 1 1  74.08496  80.41453
## 22 1 1 1  74.30940  83.80376
## 23 1 1 2  75.19745  87.85659
## 43 2 2 2  86.31557 102.13950
## 59 3 2 2  86.50140 105.49012
## 44 2 2 3  87.22990 106.21861
## 12 0 2 3  87.91114 100.57028
## 60 3 2 3  88.10943 110.26294
## 11 0 2 2  88.14137  97.63573
## 27 1 2 2  88.64482 101.30396
## 28 1 2 3  89.16193 104.98586
## 16 0 3 3 110.58096 123.24010
## 48 2 3 3 111.46499 130.45371
## 64 3 3 3 112.56258 134.71609
## 53 3 1 0 122.00410 134.66325
## 58 3 2 1 131.44501 147.26894
## 32 1 3 3 137.54003 153.36396
## 37 2 1 0 138.02233 147.51669
## 63 3 3 2 146.44478 165.43350
## 42 2 2 1 146.82062 159.47977
## 47 2 3 2 160.93535 176.75928
## 21 1 1 0 162.20771 168.53728
## 26 1 2 1 170.22749 179.72185
## 31 1 3 2 183.26212 195.92127
## 5  0 1 0 204.76832 207.93311
## 10 0 2 1 211.75888 218.08845
## 15 0 3 2 223.40967 232.90403
## 57 3 2 0 224.90495 237.56409
## 62 3 3 1 234.29302 250.11695
## 41 2 2 0 255.73157 265.22593
## 46 2 3 1 264.23254 276.89168
## 25 1 2 0 301.76099 308.09056
## 30 1 3 1 309.16819 318.66255
## 61 3 3 0 353.91233 366.57147
## 9  0 2 0 391.43735 394.60214
## 45 2 3 0 393.66568 403.16003
## 14 0 3 1 397.33530 403.66488
## 29 1 3 0 462.31150 468.64107
## 13 0 3 0 594.77307 597.93786
mAIC <- min(tabla$AIC)
tabla[tabla$AIC==mAIC,]
##    p d q      AIC     sbic
## 52 3 0 3 60.81368 86.13197

Basandonos en los valores del AIC que nos arroja la tabla determinamos que nuestro mejor modelo al momento es el c(3,0,3) Para confirmar la viabilidad del modelo hacemos las pruebas de significancias de los coeficientes.

Prueba de significancia

Modelo a analizar -> c(3,0,3)

Modelo1 <- arima(Xt, order=c(3,0,3))
Modelo1
## 
## Call:
## arima(x = Xt, order = c(3, 0, 3))
## 
## Coefficients:
##           ar1      ar2     ar3     ma1     ma2      ma3  intercept
##       -0.2770  -0.4985  0.4976  0.1476  0.3109  -0.7596    -0.0196
## s.e.   0.1605   0.1342  0.1568  0.1261  0.1144   0.1259     0.0114
## 
## sigma^2 estimated as 0.07386:  log likelihood = -22.41,  aic = 60.81
confint(Modelo1)
##                 2.5 %       97.5 %
## ar1       -0.59149833  0.037490697
## ar2       -0.76150174 -0.235497303
## ar3        0.19040415  0.804856171
## ma1       -0.09958193  0.394773857
## ma2        0.08677590  0.535049767
## ma3       -1.00640642 -0.512745448
## intercept -0.04191618  0.002702872
  • AR1 Es NO SIGNIFICATIVO, ya que dentro de -0.5914983 y 0.037490697 esta el 0
  • AR2 Es SIGNIFICATIVA, ya que dentro de -0.76150174 y -0.235497303 No esta el 0
  • AR3 Es significativa, ya que dentro de 0.19040415 y 0.804856171 NO esta el 0
  • MA1 Es NO SIGNIFICATIVA, ya que dentro de -0.09958193 y 0.394773857 esta el 0
  • MA2 ES SIGNIFICATIVA, ya que dentro de 0.08677590 y 0.535049767 NO esta el 0
  • MA3 NO ES SIGNIFICATIVA, ya que dentro de -1.00640642 y -0.512745448 esta el 0
  • INTERCEPTO NO ES SIGNIFICATIVA, ya que dentro de -0.04191618 y 0.002702872 esta el 0 Resultado = despues de realizar las pruebas de significancia de cada uno de los coeficientes en la cual nos arrojo 3 significativos y 3 No significativos, calificamos este modelo no viable

Modelo a analizar -> c(1,0,1)

Modelo2 <- arima(Xt, order=c(1,0,1))
Modelo2
## 
## Call:
## arima(x = Xt, order = c(1, 0, 1))
## 
## Coefficients:
##          ar1      ma1  intercept
##       0.5938  -0.7905    -0.0198
## s.e.  0.1450   0.1085     0.0112
## 
## sigma^2 estimated as 0.07973:  log likelihood = -27.09,  aic = 62.19
confint(Modelo2)
##                 2.5 %       97.5 %
## ar1        0.30968809  0.877960400
## ma1       -1.00325543 -0.577799126
## intercept -0.04167841  0.002112224
# AR1 Es significativo, ya que 0.30968809 y 0.877960400 NO incluyen el 0
# MA1 Es significativo, -1.00325543 y -0.577799126 NO incluyen el 0
# Intercepto es No significativo, 0.04167841 y 0.002112224 ya que incluyen el 0
  • AR1 Es significativo, ya que 0.30968809 y 0.877960400 NO incluyen el 0
  • MA1 Es significativo, -1.00325543 y -0.577799126 NO incluyen el 0
  • Intercepto es No significativo, 0.04167841 y 0.002112224 ya que incluyen el 0 Resultado = despues de realizar las pruebas de significancia de cada uno de los coeficientes y el intercepto en la cual nos arrojo que los dos coeficientes son significativos, elegimos este como nuestro modelo mas viable

Modelo c(1,0,1)

Intervalos de confianza

confint(Modelo2)
##                 2.5 %       97.5 %
## ar1        0.30968809  0.877960400
## ma1       -1.00325543 -0.577799126
## intercept -0.04167841  0.002112224

ECUACION DE NUESTRO MODELO

X[t] = -0.0198 + 0.5938X[t-1] - 0.7905W[t-1]

MODELO DE AJUSTE

# Xt <-
ModeloR <- auto.arima(Xt)
print(ModeloR)
## Series: Xt 
## ARIMA(3,0,0) with zero mean 
## 
## Coefficients:
##           ar1      ar2      ar3
##       -0.1365  -0.1792  -0.1126
## s.e.   0.0751   0.0747   0.0760
## 
## sigma^2 = 0.0821:  log likelihood = -28.12
## AIC=64.25   AICc=64.48   BIC=76.91
confint(ModeloR)
##          2.5 %      97.5 %
## ar1 -0.2837432  0.01066499
## ar2 -0.3255555 -0.03286237
## ar3 -0.2615039  0.03630455
  • AR1 es No significativo, ya que el 0 esta entre -0.2837432 y 0.01066499
  • AR2 Es significativo, ya que el 0 no esta entre -0.3255555 y -0.03286237
  • AR3 es NO significativo, ya que el 0 esta entre -0.2615039 y 0.03630455

Ecuacion del modelo ajustado por R

X[t]= -0.0191 - 0.1365X[t-1] - 0.1792X[t-2] - 0.1126*X[t-2]

confint(ModeloR)
##          2.5 %      97.5 %
## ar1 -0.2837432  0.01066499
## ar2 -0.3255555 -0.03286237
## ar3 -0.2615039  0.03630455

PARTE 3

1) Grafica los residuos de tu modelo. Grafica la acf de los residuos de tu modelo. Interpreta ambas graficas.*

2) Prueba Ljung-Box*

Modelo2 <- arima(Xt, order=c(1,0,1))
Modelo2
## 
## Call:
## arima(x = Xt, order = c(1, 0, 1))
## 
## Coefficients:
##          ar1      ma1  intercept
##       0.5938  -0.7905    -0.0198
## s.e.  0.1450   0.1085     0.0112
## 
## sigma^2 estimated as 0.07973:  log likelihood = -27.09,  aic = 62.19
plot(resid(Modelo2))

acf(resid(Modelo2))

Box.test(resid(Modelo2), lag=20, type='Ljung-Box')
## 
##  Box-Ljung test
## 
## data:  resid(Modelo2)
## X-squared = 19.55, df = 20, p-value = 0.4863

Se cumple la hipotesis nula de Ljung-Box, esto nos indica que los residuos son ruido blanco p-value = 0.4863 > 0.05

3)Histograma de residuos

hist(resid(Modelo2),freq=FALSE)

Podemos ver que nuestro histograma de residuos tiene una forma simétrica y de campana, esto porque los residuos están distribuidos normalmente; este en un buen indicador de que nuestro modelo puede ser confiable.

4)Distribucion normal de residuos

x <- resid(Modelo2)
intervalo <- seq(min(x), max(x), length = 300)
distnormal <- dnorm(intervalo, mean=mean(x),sd=sd(x))
hist(x,freq=FALSE)
lines(intervalo,distnormal, col="red",lwd=3)

Modelo <- datos1

Aqui podemos rectificar lo anterior, vemos como la linea roja que es la distribucion normal, va mas o menos simetrica a la figura de nuestro histograma; esto confirmando la presicion del modelo.

5) Pronostico

pronostico <- forecast(Modelo, h = 12) #nuestro periodo son semanas
plot(pronostico)

#La grafica signifca que existe un 80% de probabilidad de que los valores futuros del modelo esten dentro del area oscura sombreada y un 95% de probabilidad de que esten en el area clara sombreada.

Usando esta grafica y estableciendo nuestro rango de prediccion de 12 semanas, visualizamos como el valor del dolar dentro de 3 meses oscilara en un rango variacion de .5 a 2 pesos; considerando que el valor del dolar al momento de realizar este proyecto es de 16.8 podemos establecer que en el primer mes hay una probabilidad de 95% que el valor del dolar este entre 16 pesos y 17.2 aproximadamente, mientras que en el segundo mes manteniendo la misma probabilidad el tipo de cambio oscilara entre 15.5 y 17.5, dentro del tercer mes se pronostica que el valor del peso/dolar estara dentro de 15 pesos a 18 pesos aproximadamente.

Estos valores serian muy utiles para los objetivos planteados en el inicio de este trabajo.

6) Circulo Unitario

#Nuestro modelo
autoplot(Modelo2)

Analizando la grafica del circulo unitario nos podemos percatar los puntos rojos estan dentro y no muy cerca del circulo antes mencionado, esto nos determina que nuestro modelo es estable

Interpretacion de cada uno de los coeficientes numericos

X[t] = -0.0198 + 0.5938X[t-1] - 0.7905W[t-1]

  • X[t] representa el valor de la variable X en el tiempo t.
  • X[t-1] representa el valor de la variable X en el tiempo t-1.
  • W[t-1] representa el valor de la variable W en el tiempo t-1.
  • -0.0198 es el término constante, que representa el valor de X[t] cuando tanto X[t-1] como W[t-1] son cero.Seria negativa.
  • 0.5938 es el coeficiente de X[t-1], que representa el impacto de un cambio de una unidad en X[t-1] sobre el valor de X[t].
  • -0.7905 es el coeficiente de W[t-1], que representa el impacto de un cambio de una unidad en W[t-1] sobre el valor de X[t].

Conclusiones (inciso 8)

Encontramos que nuestro modelo se puede ajustar a la realidad, los valores que nos arrojo, aunque no son muy precisos, si dan un amplio panorama del futuro de este tipo de cambio y pueden ser cruciales en las decisiones de distintos ambitos. Ademas que nuestro modelo sigue una tendencia estacionaria. Le veemos varias areas de oportunidad a este trabajo, podria ser una herramienta extremadamente util en todo el sector financiero (principalmente en el mercado de divisas), tambien en el sector comercial (exportaciones e importaciones) y en el de inversion. Por otro lado, algunas sugerencias que proponemos para futuros trabajos como este es la implementacion de mas pruebas, mas conceptos, mas estadisticos; esto para darle una certeza y confiabilidad mayor al resultado del modelo.

Bibliografia

ENES UNAM LEON

ENCONOMETRIA 2

PROFESOR: MIGUEL ZEPEDA