Para el siguiente estudio de causalidad se toman los datos mensuales del tipo de cambio dólar/euro y los datos de volumen de exportaciones desde los países de la Zona Euro hacia Estados Unidos expresados en números índice y como año base el 2015. Ambas series mensuales abarcan del año 2002 al año 2022. Los datos para el tipo de cambio dólar/euro fueron tomados de la base de datos de la Reserva Federal de los Estados Unidos (FED) y los datos de exportaciones fueron tomados de la base de datos de la Oficina Europea de Estadística (EUROSTAT).

Se eligió el tipo de cambio Dólar/Euro para establecer la relación o no entre el tipo de cambio y las dinámicas de creciemiento de las exportaciones entre Estados Unidos y la Zona Euro, este último bloque se identifica como aquellos países de la Unión Europea que tienen como moneda al Euro (para cuando se redacta este documento, 20 países). Se eligió el volumen de las exportaciones para no tener en cuenta el efecto inflación en los precios que pudiese distorcionar el modelo y el estudio de causalidad. Productos según la clasificación estándar para el comercio internacional (CUCI).

Para el estudio se causalidad se utilizará la función de correlaciones cruzadas, antes de ello se deberá identifiicar el modelo y extraer sus residuos (preblanquear) para debatir la causalidad entre series.

Primero se hace la elección del modelo y preblanqueo de las series. Las librerías que se usarán en el presente informe son las siguientes:

library(readxl)
library(MASS)
library(forecast)
library(tseries)
library(lmtest)
library(astsa)
library(TSA)
library(sarima)

Se descargan los datos y se representan las series. El tipo de cambio se expresa según la relación Dólar/Euro, mientras que el volumen de exportaciones se expresa en número índice base 2015 (Enero). Ambas series ofrecen datos mensuales.

DEXUSEU <- read_excel("~/R/Proyectos/Relacion tipo de cambio exp/DEXUSEU.xlsx")
rDEXUSEU <- ts(DEXUSEU$`DEXUSEU`,start=2002,frequency=12)
plot(rDEXUSEU, main="Tipo de cambio. Dólar/Euro", xlab="Años",ylab="En Dólares")

EXPUZ <- read_excel("~/R/Proyectos/Relacion tipo de cambio exp/Exportaciones USA.xlsx", 
    sheet = "EXPUSA")
rEXPUZ <- ts(EXPUZ$Indice ,start=2002,frequency=12)
plot(rEXPUZ,main="Exportaciones de la Zona Euro A EEUU",
xlab="Años",ylab="Índice, en base 2015")

Se toman ambas series y se descomponen en componente estacional, tendencia-ciclo, componente irregular y serie ajustada por estacionalidad.

rDEXUSEU_decomp<- decompose(rDEXUSEU)
rEXPUZ_decomp <- decompose(rEXPUZ)

par(mfrow = c(2, 2))
plot(rDEXUSEU_decomp$x, main = "Tipo de cambio. Dólar/Euro", col = "black", ylab = "Serie")
plot(rDEXUSEU_decomp$trend, main = "Tendencia", col = "blue", ylab = "Valores")
plot(rDEXUSEU_decomp$seasonal, main = "Estacionalidad", col = "red", ylab = "Valores")
plot(rDEXUSEU_decomp$random, main = "Aleatorio", col = "green", ylab = "Valores")

par(mfrow = c(2, 2))
plot(rEXPUZ_decomp$x, main = "Exportaciones de la Zona Euro A EEUU", col = "black", ylab = "Serie")
plot(rEXPUZ_decomp$trend, main = "Tendencia", col = "blue", ylab = "Valores")
plot(rEXPUZ_decomp$seasonal, main = "Estacionalidad", col = "red", ylab = "Valores")
plot(rEXPUZ_decomp$random, main = "Aleatorio", col = "green", ylab = "Valores")

Se busca si las series necesitan ser transformadas. Para el tipo de cambio se tiene dos métodos: por un lado, gráficamente, por otro, el cálculo directo.

par(mfrow = c(1, 2))
boxcox(lm(rDEXUSEU~1))
BoxCox.lambda(rDEXUSEU,method = "loglik",lower=-2,upper=2)
## [1] 0.6
BoxCox.lambda(rDEXUSEU,method = "guerrero", lower=-2,upper=2)
## [1] -0.3449247
boxcox(lm(rEXPUZ~1))

BoxCox.lambda(rEXPUZ,method = "loglik",lower=-2,upper=2)
## [1] 1.1
BoxCox.lambda(rEXPUZ,method = "guerrero", lower=-2,upper=2)
## [1] 0.005320864

Atendiendo a las gráficas y a los cálculos, ambas series deben ser transformadas.

DEXUSEU <- BoxCox(rDEXUSEU,0)
EXPUZ <- BoxCox(rEXPUZ,1)
plot(rDEXUSEU, main="Tipo de cambio. Dólar/Euro (transformada)", 
     xlab="Años",ylab="En Dólares")

plot(rEXPUZ,main="Exportaciones de la Zona Euro A EEUU (transformada)", 
     xlab="Años",ylab="Índice, en base 2015")

Se presentan como series no estacionarias al no observarse un comportamiento parecido en media y varianza al ver las tendencias de ambas series. Respecto a la estacionalidad, no se logra observar un patron que se repita cada año. Se dibujan las funciones de autocorrelación y autocorrelación parcial. El retardo máximo estará entre el retardo máximo T/3 =88 y el retardo mínimo T/4=66. Se elige el retardo 84 porque abarca más periodos estacionales, abarcará 7 años.

Para el tipo de cambio:

par(mfrow=c(1,2))
acf(DEXUSEU,lag.max=84,ci.type="ma")
pacf(DEXUSEU,lag.max=84)

Para exportaciones:

par(mfrow=c(1,2))
acf(EXPUZ,lag.max=84,ci.type="ma")
pacf(EXPUZ,lag.max=84)

El decrecimiento de la función de autocorrelación en ambas demuestra la no estacionariedad. No hace falta fijarse en el gráfico de autocorrelación parcial. Se utiliza la prueba de Dickey - Fuller para contrastar las siguientes hipótesis y confirmar o no la no estacionariedad.

\(H_0\): La serie es no estacionaria: Tiene raíz unitaria.

\(H_1\): La serie es estacionaria: No tiene raíz unitaria.

adf.test(DEXUSEU)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  DEXUSEU
## Dickey-Fuller = -3.3036, Lag order = 6, p-value = 0.07097
## alternative hypothesis: stationary
adf.test(EXPUZ)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  EXPUZ
## Dickey-Fuller = -2.6367, Lag order = 6, p-value = 0.3078
## alternative hypothesis: stationary

Ambos P-value son mayores a 0.05, la hipótesis nula no se rechaza, ambas series no son estacionarias. Se debe diferenciar ambas series.

dDEXUSEU <- diff(DEXUSEU)
dEXPUZ <- diff(EXPUZ)
plot(dDEXUSEU,
main="Gráfico de la serie tipo de cambio Dólar/Euro diferenciada (1-B)",cex.main=0.8,
xlab="Años",ylab="")

plot(dEXPUZ,
main="Gráfico de la serie Exportaciones de la Zona Euro A EEUU
diferenciada (1-B)", cex.main=0.8, xlab="Años",ylab="")

Se representa la función de autocorrelación y autocorrelación parcial de ambas series diferenciadas. Para la estacionalidad se debe observar solo la función de autocorrelación.

El modelo para el tipo de cambio:

acf(dDEXUSEU,lag.max=84,ci.type="ma")

pacf(dDEXUSEU,lag.max=84)

aDEXUSEU<-auto.arima(DEXUSEU)
summary(aDEXUSEU)
## Series: DEXUSEU 
## ARIMA(1,1,2)(2,0,0)[12] 
## 
## Coefficients:
##           ar1     ma1     ma2     sar1     sar2
##       -0.9545  1.3062  0.3745  -0.0887  -0.0398
## s.e.   0.0407  0.0671  0.0581   0.0622   0.0640
## 
## sigma^2 = 0.0004043:  log likelihood = 686.45
## AIC=-1360.9   AICc=-1360.59   BIC=-1339.2
## 
## Training set error measures:
##                        ME       RMSE        MAE      MPE     MAPE      MASE
## Training set 0.0005126051 0.01988813 0.01524787 4.228213 19.12434 0.2010856
##                     ACF1
## Training set -0.01311218

No se observa estacionalidad, además, con la ayuda de autoarima se observan dos coeficientes que pueden ser ignorados al no ser significativamente distintos de cero. No hay un patrón que se repita cada 12 meses. Se vuelve a aplicar la prueba de Dickey - Fuller, esta ves para la serie diferenciada.

adf.test(dDEXUSEU)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  dDEXUSEU
## Dickey-Fuller = -6.5682, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary

P-value es menor a 0.05, la hipótesis nula se rechaza, la serie es estacionaria.

Se propone como modelo para el tipo de cambio el Arima, según los valores arrojados por los gráficos de las funciones de autocorrelación y autocorrelación parcial, el modelo (1, 1, 2)

m1 <- Arima(DEXUSEU, order=c(1,1,2), method="ML")
m1
## Series: DEXUSEU 
## ARIMA(1,1,2) 
## 
## Coefficients:
##           ar1     ma1     ma2
##       -0.9386  1.2919  0.3693
## s.e.   0.0673  0.0810  0.0575
## 
## sigma^2 = 0.0004048:  log likelihood = 685.34
## AIC=-1362.68   AICc=-1362.53   BIC=-1348.21

El coeficiente es significativamente distinto de cero, pues su valor no está entre ± 1.72*se. Se dibujan las funciones de autocorrelación y autocorrelación parcial.

acf(m1$residuals, lag.max = 84, ci.type="ma")

pacf(m1$residuals, lag.max = 84)

No hay indicios que deba cambiarse el modelo, puesto que los valores que sobrepasan la unidad no son ni los cinco primero ni múltiplos de 12 (meses por año). Se realiza el test de Ljung.

\(H_0\): No hay correlación entre los residuos. \(H_1\): Hay correlación entre los residuos.

tsdiag.Sarima(m1, plot = 3, gof.lag=84, layout = list(matrix(1:1, nrow = 1)))

No se rechaza la hipótesis nula, no hay correlación entre los residuos. El modelo no debe ser cambiado.En los gráficos se confirma que todos los p value de los residuos están por encima de 0.05. Se estudia la normalidad de los residuos del modelo con el gráfico qq y el test de Kolmogorov-Smirnov puesto que se tienen más de 50 datos.

ks.test(m1$residuals, "pnorm", mean = mean(m1$residuals), sd = sd(m1$residuals))
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  m1$residuals
## D = 0.046753, p-value = 0.5824
## alternative hypothesis: two-sided
qqnorm(m1$residuals)
qqline(m1$residuals)

Se comprueba la nomalidad, pues el p-value es mayor que 0.05 y, según el gráfico,los residuos siguen se sigue una distribución normal. Se hace pronpostico para los próximos 12 meses. Se elije el parametro c(95) para que sea a un nivel de confianza del 95%.

PredDEXUSEU <- forecast(m1,level= c(95), h=12)
PredDEXUSEU
##          Point Forecast        Lo 95      Hi 95
## Jan 2025     0.04571887  0.006285986 0.08515176
## Feb 2025     0.04440365 -0.021947207 0.11075450
## Mar 2025     0.04563815 -0.040448533 0.13172483
## Apr 2025     0.04447942 -0.056852484 0.14581132
## May 2025     0.04556703 -0.069616475 0.16075053
## Jun 2025     0.04454617 -0.082469908 0.17156225
## Jul 2025     0.04550437 -0.092784834 0.18379358
## Aug 2025     0.04460498 -0.103710032 0.19291999
## Sep 2025     0.04544917 -0.112604273 0.20350262
## Oct 2025     0.04465679 -0.122259437 0.21157302
## Nov 2025     0.04540054 -0.130207483 0.22100856
## Dec 2025     0.04470244 -0.138939115 0.22834400
plot(PredDEXUSEU,main="Predicción del tipo de cambio Dólar/Euro")

El modelo para las exportaciones:

acf(dEXPUZ,lag.max=84,ci.type="ma")

pacf(dEXPUZ,lag.max=84)

aEXPUZ<-auto.arima(EXPUZ)
summary(aEXPUZ)
## Series: EXPUZ 
## ARIMA(2,1,3)(2,0,0)[12] 
## 
## Coefficients:
##           ar1      ar2     ma1     ma2      ma3    sar1    sar2
##       -1.2126  -0.9086  0.6862  0.1667  -0.5091  0.1487  0.0917
## s.e.   0.1189   0.0769  0.1305  0.0911   0.0980  0.0641  0.0651
## 
## sigma^2 = 95.07:  log likelihood = -1013.53
## AIC=2043.05   AICc=2043.59   BIC=2071.99
## 
## Training set error measures:
##                     ME     RMSE      MAE        MPE     MAPE      MASE
## Training set 0.1169299 9.608029 7.429743 -0.5275477 7.303174 0.6185926
##                   ACF1
## Training set 0.0240358

Se observa estacionalidad, además, con la ayuda de autoarima se observa que podría haber un coeficiente ma4, por ello este modelo será descartado aun hasta evaluar el modelo con ese coeficiente extra. Se vuelve a aplicar la prueba de Dickey - Fuller, esta ves para la serie diferenciada.

adf.test(dEXPUZ)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  dEXPUZ
## Dickey-Fuller = -8.2065, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary

P-value es menor a 0.05, la hipótesis nula se rechaza, la serie es estacionaria.

Se propone como modelo para el tipo de cambio el Arima, según los valores arrojados por los gráficos de las funciones de autocorrelación y autocorrelación parcial, el modelo (2,1,1)(0,1)[12]

m2 <- Arima(EXPUZ, order=c(2,1,4),seasonal = c(2,0,0), method="ML")
m2
## Series: EXPUZ 
## ARIMA(2,1,4)(2,0,0)[12] 
## 
## Coefficients:
##          ar1    ar2      ma1     ma2     ma3      ma4    sar1    sar2
##       0.6815  0.061  -1.2102  0.1519  0.2533  -0.1404  0.1949  0.0423
## s.e.  0.0197    NaN   0.0282  0.0353  0.0289   0.0437  0.0082  0.0156
## 
## sigma^2 = 94.24:  log likelihood = -1011.74
## AIC=2041.47   AICc=2042.15   BIC=2074.03

El coeficiente es significativamente distinto de cero, pues su valor no está entre ± 1.72*se. Se dibujan las funciones de autocorrelación y autocorrelación parcial.

acf(m2$residuals, lag.max = 84, ci.type="ma")

pacf(m2$residuals, lag.max = 84)

No hay indicios que deba cambiarse el modelo, puesto que los valores que sobrepasan la unidad no son ni los cinco primero ni múltiplos de 12 (meses por año). Se realiza el test de Ljung.

\(H_0\): No hay correlación entre los residuos. \(H_1\): Hay correlación entre los residuos.

tsdiag.Sarima(m2, plot = 3, gof.lag=84, layout = list(matrix(1:1, nrow = 1)))

No se rechaza la hipótesis nula, no hay correlación entre los residuos. El modelo no debe ser cambiado.En los gráficos se confirma que todos los p value de los residuos están por encima de 0.05. Se estudia la normalidad de los residuos del modelo con el gráfico qq y el test de Kolmogorov-Smirnov puesto que se tienen más de 50 datos.

ks.test(m2$residuals, "pnorm", mean = mean(m2$residuals), sd = sd(m2$residuals))
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  m2$residuals
## D = 0.043036, p-value = 0.6862
## alternative hypothesis: two-sided
qqnorm(m2$residuals)
qqline(m2$residuals)

Se comprueba la nomalidad, pues el p-value es mayor que 0.05 y, según el gráfico,los residuos siguen se sigue una distribución normal. Se hace pronpostico para los próximos 12 meses. Se elije el parametro c(95) para que sea a un nivel de confianza del 95%.

PredEXPUZ <- forecast(m2,level= c(95), h=12)
PredEXPUZ
##          Point Forecast    Lo 95    Hi 95
## Jan 2025       105.6857 86.65853 124.7130
## Feb 2025       103.2790 82.24454 124.3134
## Mar 2025       106.7688 84.85055 128.6870
## Apr 2025       107.6119 84.11911 131.1046
## May 2025       105.9905 81.42604 130.5549
## Jun 2025       107.0319 81.63615 132.4276
## Jul 2025       110.4894 84.42456 136.5542
## Aug 2025       106.7086 80.08419 133.3331
## Sep 2025       104.0808 76.97298 131.1887
## Oct 2025       106.3124 78.77536 133.8494
## Nov 2025       104.4206 76.49388 132.3474
## Dec 2025       106.0393 77.75197 134.3265
plot(PredEXPUZ,main="Predicción Exportaciones")

Finalmente, se hace el estudio de causalidad entre las series. La función de correlacción cruzada es la siguiente:

ccfvalores <- ccf(m1$residuals,m2$residuals, main= "Función de correlación cruzada",)

Cuando k= 0 y la correlación es distinta de cero, se habla de causalidad instantanea, en este caso poco significativa.No existe.

Para k<0 y teniendo que -12 es significativo, se entienque que es probable que si el tipo de cambio está por encima del promedio conduciría a un volumen de exportación por encima del promedio unos 12 meses después.

Para k>0 y teniendo en cuenta que 14 es significativo, se entienque que es probable que si el volumen de exportaciones está por encima del promedio conduciría a un tipo de cambio por debajo del promedio unos 14 meses después.

En conclusión, la causalidad es bidireccional.