1 Introducción

La política monetaria de la Reserva Federal de los Estados Unidos (Fed) constituye uno de los principales canales de transmisión financiera a nivel global debido al papel central del dólar en el sistema internacional. En este contexto, los ciclos de endurecimiento de la tasa de interés de referencia generan efectos que se transmiten hacia economías desarrolladas y emergentes a través de diversos canales financieros, afectando los flujos de capital, los precios de los activos, las tasas domésticas y el tipo de cambio. Esta dinámica se enmarca en lo descrito por Rey (2015), según el cual la política monetaria del país emisor de la moneda dominante influye de manera sistemática sobre las condiciones financieras internacionales.

Los tres mecanismos principales de transmisión internacional son:

  1. Canal financiero: mayores tasas en Estados Unidos elevan los rendimientos en dólares y generan salidas de capital desde economías emergentes.
  2. Canal de expectativas: los anuncios de política monetaria modifican las percepciones de riesgo e inflación.
  3. Canal cambiario: el endurecimiento monetario fortalece al dólar y provoca depreciaciones en monedas emergentes, afectando la inflación importada y la liquidez en divisas (Krugman & Obstfeld, 2006).

Este último canal es especialmente relevante para economías pequeñas y abiertas como Paraguay. El presente trabajo analiza cómo los movimientos de la tasa de fondos federales se transmiten hacia la economía paraguaya, distinguiendo entre:

  • La reacción de la política monetaria doméstica, modelada mediante una función de reacción de tipo Taylor (1993): la Tasa de Política Monetaria (TPM) del Banco Central del Paraguay (BCP) responde a desviaciones del producto y de la inflación respecto de sus niveles de referencia.
  • El canal cambiario, mediante el cual la brecha del tipo de cambio real (TCR) actúa como la variable que recibe el impacto externo antes de transmitirlo al resto de la economía doméstica.

Pregunta de investigación: ¿cómo y en qué magnitud los shocks de la tasa de fondos federales afectan al tipo de cambio real, la inflación y la actividad económica de Paraguay?

1.1 Objetivo

Estimar, mediante un modelo de Vectores Autorregresivos Estructurales (SVAR), el efecto dinámico de shocks en la tasa de fondos federales sobre el tipo de cambio real, la inflación y la actividad económica de Paraguay, identificando el rol de la Regla de Taylor doméstica y el canal cambiario en dicha transmisión.


2 Marco teórico

2.1 El ciclo financiero global

Rey (2015) postula que las condiciones financieras de las economías emergentes están supeditadas a la política monetaria del país emisor de la moneda dominante, generando comovimientos generalizados entre economías avanzadas y emergentes ante shocks financieros comunes.

2.2 La Regla de Taylor como ancla del bloque doméstico

La Regla de Taylor (Taylor, 1993) especifica la función de reacción de un banco central que opera bajo un esquema de metas de inflación:

\[i_t = r^* + \pi_t + \phi_\pi(\pi_t - \pi^*) + \phi_y(\hat{y}_t)\]

En nuestro modelo, esta regla ancla el comportamiento de la TPM paraguaya: el Banco Central ajusta su tasa de referencia en respuesta a desviaciones de la inflación y de la brecha del producto respecto de sus niveles de referencia.

2.3 El canal cambiario como mecanismo de recepción

El canal cambiario constituye el mecanismo mediante el cual se valida empíricamente la transmisión externa: la brecha del tipo de cambio real se incorpora como la variable que recibe de manera más directa los shocks externos, respondiendo contemporáneamente a la inflación local vía paridad de tasas de interés (Cresta, 2014; BCP, 2019).

En conjunto, el modelo utiliza la Regla de Taylor para modelar la reacción interna del BCP y el Canal Cambiario para modelar la recepción del impacto de la Reserva Federal.


3 Metodología

3.1 Especificación del modelo SVAR

Siguiendo el enfoque de Lütkepohl (2005), el sistema estructural se expresa como:

\[B_0 Y_t = B_1 Y_{t-1} + \cdots + B_p Y_{t-p} + u_t\]

donde \(Y_t\) es el vector de variables endógenas, \(B_0\) representa la matriz de relaciones contemporáneas, y \(u_t\) son los shocks estructurales ortogonales. Dado que estos no son observables directamente, el modelo se estima en su forma reducida:

\[Y_t = A_1 Y_{t-1} + \cdots + A_p Y_{t-p} + \varepsilon_t, \qquad \varepsilon_t = B_0^{-1} u_t\]

3.2 Variables y bloques

Siguiendo la estrategia empírica del Banco Central del Paraguay (2019), el vector \(Y_t\) se estructura en dos bloques:

Bloque Variable Descripción Función
Externo d_fed_funds Tasa de Fondos Federales (FRED), primera diferencia Shock de la Fed
Externo d_infl_us Inflación de EE. UU. (BLS), primera diferencia Control de presiones externas
Doméstico brecha_pib Brecha del PIB (IMAEP desestacionalizado, filtro HP) Actividad económica
Doméstico infl_py_lvl Inflación interanual de Paraguay (BCP) Objetivo de estabilidad de precios
Doméstico brecha_tcr Brecha del tipo de cambio real (filtro HP) Canal cambiario
Doméstico tpm_bcp_lvl Tasa de Política Monetaria (BCP) Regla de Taylor

3.3 Identificación estructural

Las restricciones de corto plazo impuestas en la matriz \(B_0\) son:

  • El bloque doméstico no retroalimenta contemporáneamente al bloque externo (exogeneidad en bloque).
  • La brecha del PIB no responde contemporáneamente a inflación, TCR ni TPM.
  • La inflación responde a la brecha del producto, pero no a la TPM ni al TCR en el mismo período.
  • La brecha del TCR (canal cambiario) responde a la inflación, pero no a la brecha del producto ni a la TPM.
  • La TPM (Regla de Taylor) responde a la brecha del producto y a la inflación, pero no al TCR contemporáneamente.

4 Datos y exploración

# --- Librerías necesarias ---
library(mFilter)     # Filtro HP
library(vars)        # Modelos VAR/SVAR
library(tseries)      # Test ADF
library(urca)        # Tests DF-GLS, KPSS, Zivot-Andrews
library(seasonal)    # Desestacionalización X-13ARIMA-SEATS
library(ggplot2)
library(dplyr)
library(readxl)
library(car)         # Test de Wald (linearHypothesis)
# --- Cargar datos ---
# IMPORTANTE: esta ruta debe apuntar a la ubicación REAL de tu archivo.
# Opción más simple: guardá "bases de PM.xlsx" en la MISMA carpeta que
# este archivo .Rmd (ej. tu carpeta Downloads), y dejá solo el nombre
# del archivo, sin ruta completa, como está abajo.
# Si el archivo está en otra carpeta, reemplazá la ruta completa, ej.:
# "C:/Users/FATIMA OLAZAR/OneDrive/Documentos/Mestria en Finanzas/Modulo 5_finanzas/analisis de tipo de cambio fed/bases de PM.xlsx"
data <- read_excel("bases de PM.xlsx", sheet = "data")

str(data)
## tibble [168 × 8] (S3: tbl_df/tbl/data.frame)
##  $ fecha             : POSIXct[1:168], format: "2012-01-01" "2012-02-01" ...
##  $ fed_funds         : num [1:168] 0.08 0.1 0.13 0.14 0.16 0.16 0.16 0.13 0.14 0.16 ...
##  $ cpi_us_nivel      : num [1:168] 228 228 229 229 229 ...
##  $ imaep_sin_agri_bin: num [1:168] 74.6 77.4 85.6 80.5 83.9 ...
##  $ infl_py           : num [1:168] 4.45 4.46 3.25 3.34 3.75 ...
##  $ ipc_py_nivel      : num [1:168] 80.3 81.5 81.9 81.7 82 ...
##  $ tc_pyg_usd        : num [1:168] 4597 4455 4284 4305 4369 ...
##  $ tpm_bcp           : num [1:168] 6.5 6.5 6.5 6.5 6.25 6.25 6 5.5 5.5 5.5 ...
summary(data)
##      fecha                          fed_funds      cpi_us_nivel  
##  Min.   :2012-01-01 00:00:00.00   Min.   :0.050   Min.   :227.8  
##  1st Qu.:2015-06-23 12:00:00.00   1st Qu.:0.100   1st Qu.:237.5  
##  Median :2018-12-16 12:00:00.00   Median :0.475   Median :252.8  
##  Mean   :2018-12-16 05:42:51.43   Mean   :1.598   Mean   :263.7  
##  3rd Qu.:2022-06-08 12:00:00.00   3rd Qu.:2.402   3rd Qu.:294.9  
##  Max.   :2025-12-01 00:00:00.00   Max.   :5.330   Max.   :326.0  
##  imaep_sin_agri_bin    infl_py         ipc_py_nivel      tc_pyg_usd  
##  Min.   : 74.59     Min.   : 0.4771   Min.   : 80.27   Min.   :4002  
##  1st Qu.:100.79     1st Qu.: 2.9084   1st Qu.: 91.04   1st Qu.:5148  
##  Median :114.53     Median : 3.7650   Median :103.35   Median :5997  
##  Mean   :114.63     Mean   : 4.1311   Mean   :106.00   Mean   :6041  
##  3rd Qu.:126.26     3rd Qu.: 4.4467   3rd Qu.:122.92   3rd Qu.:6977  
##  Max.   :167.41     Max.   :11.8349   Max.   :139.30   Max.   :8006  
##     tpm_bcp     
##  Min.   :0.750  
##  1st Qu.:5.250  
##  Median :5.750  
##  Mean   :5.429  
##  3rd Qu.:6.250  
##  Max.   :8.500

Las seis series originales cubren el período enero 2012 – diciembre 2025 con frecuencia mensual: tasa de fondos federales (fed_funds), IPC de EE. UU. (cpi_us_nivel), actividad económica de Paraguay sin agricultura/binacionales (imaep_sin_agri_bin), inflación interanual de Paraguay (infl_py), IPC de Paraguay (ipc_py_nivel), tipo de cambio nominal guaraní/dólar (tc_pyg_usd) y la TPM (tpm_bcp).

4.1 Transformación de variables

# --- 1. Desestacionalizar el IMAEP ---
imaep_ts <- ts(data$imaep_sin_agri_bin, start = c(2012, 1), frequency = 12)
imaep_sa <- seas(imaep_ts)
data$imaep_sa <- as.numeric(final(imaep_sa))

# --- 2. Brecha del PIB (filtro HP, lambda=129600 para datos mensuales) ---
imaep_log <- log(data$imaep_sa)
hp_imaep <- hpfilter(imaep_log, freq = 129600, type = "lambda")
data$brecha_pib <- hp_imaep$cycle * 100

# --- 3. Inflación de EE. UU. interanual (bloque exógeno) ---
data$infl_us_rate <- c(rep(NA, 12), diff(log(data$cpi_us_nivel), lag = 12) * 100)

# --- 4. Inflación de Paraguay (bloque doméstico) ---
data$infl_py_lvl <- data$infl_py

# --- 5. Tipo de Cambio Real y su brecha ---
data$tcr <- data$tc_pyg_usd * (data$cpi_us_nivel / data$ipc_py_nivel)
tcr_log <- log(data$tcr)
hp_tcr <- hpfilter(tcr_log, freq = 129600, type = "lambda")
data$brecha_tcr <- hp_tcr$cycle * 100

# --- 6. Tasas de interés: se mantienen en nivel ---
data$fed_funds_lvl <- data$fed_funds
data$tpm_bcp_lvl <- data$tpm_bcp

# --- Dataset consolidado ---
df_final <- na.omit(data[, c("fecha", "fed_funds_lvl", "infl_us_rate",
                              "brecha_pib", "infl_py_lvl", "brecha_tcr",
                              "tpm_bcp_lvl")])
head(df_final)
## # A tibble: 6 × 7
##   fecha               fed_funds_lvl infl_us_rate brecha_pib infl_py_lvl
##   <dttm>                      <dbl>        <dbl>      <dbl>       <dbl>
## 1 2013-01-01 00:00:00          0.14         1.67      0.734       4.10 
## 2 2013-02-01 00:00:00          0.15         2.00      2.25        1.74 
## 3 2013-03-01 00:00:00          0.14         1.51      1.58        1.18 
## 4 2013-04-01 00:00:00          0.15         1.13      1.52        1.58 
## 5 2013-05-01 00:00:00          0.11         1.38      2.79        0.865
## 6 2013-06-01 00:00:00          0.09         1.70      0.417       1.74 
## # ℹ 2 more variables: brecha_tcr <dbl>, tpm_bcp_lvl <dbl>

Nota metodológica: la brecha del TCR muestra una caída pronunciada al final de la muestra (2025), coincidente con el problema de punto final (“endpoint problem”) del filtro Hodrick-Prescott (Hamilton, 2018). Esto se investiga más adelante en la sección de robustez muestral.


5 Pruebas de estacionariedad

Antes de estimar el VAR, se evalúa la estacionariedad de las seis series mediante tres pruebas con hipótesis nulas complementarias: ADF y DF-GLS (H0: raíz unitaria) y KPSS (H0: estacionariedad). La triangulación entre pruebas con hipótesis opuestas da mayor solidez a la conclusión.

variables <- c("fed_funds_lvl", "infl_us_rate", "brecha_pib",
               "infl_py_lvl", "brecha_tcr", "tpm_bcp_lvl")

# --- ADF ---
resultados_adf <- data.frame(Variable = character(), P_Value = numeric(),
                              Estacionaria = character())
for (v in variables) {
  test <- adf.test(df_final[[v]], alternative = "stationary")
  resultados_adf <- rbind(resultados_adf, data.frame(
    Variable = v, P_Value = round(test$p.value, 4),
    Estacionaria = ifelse(test$p.value < 0.05, "SÍ", "NO")))
}

# --- DF-GLS ---
verificar_dfgls <- function(serie, nombre) {
  test_gls <- ur.ers(serie, type = "DF-GLS", model = "constant", lag.max = 4)
  estadistico <- test_gls@teststat[1]
  critico_5pct <- test_gls@cval[1, 2]
  data.frame(Variable = nombre, Estadistico_DFGLS = round(estadistico, 4),
             Critico_5pct = round(critico_5pct, 4),
             Conclusion = ifelse(estadistico < critico_5pct, "ESTACIONARIA (I(0))", "NO ESTACIONARIA"))
}
resultados_dfgls <- do.call(rbind, lapply(variables, function(v) verificar_dfgls(df_final[[v]], v)))

# --- KPSS ---
verificar_kpss <- function(serie, nombre) {
  test_kpss <- ur.kpss(serie, type = "mu", lags = "short")
  estadistico <- test_kpss@teststat
  critico_5pct <- test_kpss@cval[1, "5pct"]
  data.frame(Variable = nombre, Estadistico_KPSS = round(estadistico, 4),
             Critico_5pct_KPSS = round(critico_5pct, 4),
             Conclusion_KPSS = ifelse(estadistico > critico_5pct, "NO ESTACIONARIA", "ESTACIONARIA (I(0))"))
}
resultados_kpss <- do.call(rbind, lapply(variables, function(v) verificar_kpss(df_final[[v]], v)))

tabla_triangulacion <- merge(merge(resultados_adf, resultados_dfgls, by = "Variable"),
                             resultados_kpss, by = "Variable")
knitr::kable(tabla_triangulacion, caption = "Triangulación de pruebas de raíz unitaria")
Triangulación de pruebas de raíz unitaria
Variable P_Value Estacionaria Estadistico_DFGLS Critico_5pct Conclusion Estadistico_KPSS Critico_5pct_KPSS Conclusion_KPSS
brecha_pib 0.0211 -3.8282 -1.94 ESTACIONARIA (I(0)) 0.2142 0.463 ESTACIONARIA (I(0))
brecha_tcr 0.3480 NO -2.1169 -1.94 ESTACIONARIA (I(0)) 0.1612 0.463 ESTACIONARIA (I(0))
fed_funds_lvl 0.1290 NO -1.3714 -1.94 NO ESTACIONARIA 1.9313 0.463 NO ESTACIONARIA
infl_py_lvl 0.2642 NO -2.5403 -1.94 ESTACIONARIA (I(0)) 0.3710 0.463 ESTACIONARIA (I(0))
infl_us_rate 0.4235 NO -1.6822 -1.94 NO ESTACIONARIA 1.2704 0.463 NO ESTACIONARIA
tpm_bcp_lvl 0.3800 NO -2.1541 -1.94 ESTACIONARIA (I(0)) 0.3359 0.463 ESTACIONARIA (I(0))

Las tres pruebas coinciden: brecha_pib, infl_py_lvl, brecha_tcr y tpm_bcp_lvl son estacionarias en nivel/brecha. fed_funds_lvl e infl_us_rate presentan raíz unitaria.

5.1 Zivot-Andrews: ¿raíz unitaria genuina o quiebre estructural?

za_fed <- ur.za(df_final$fed_funds_lvl, model = "both", lag = 4)
za_infl_us <- ur.za(df_final$infl_us_rate, model = "both", lag = 4)

cat("Fed Funds -- estadístico:", round(za_fed@teststat, 3),
    "| crítico 5%:", za_fed@cval[2], "\n")
## Fed Funds -- estadístico: -3.609 | crítico 5%: -5.08
cat("Inflación EE.UU. -- estadístico:", round(za_infl_us@teststat, 3),
    "| crítico 5%:", za_infl_us@cval[2], "\n")
## Inflación EE.UU. -- estadístico: -4.936 | crítico 5%: -5.08

Ambas variables mantienen raíz unitaria incluso permitiendo un quiebre estructural (Perron, 1989), por lo que se incorporan al bloque exógeno en primeras diferencias.

df_final$d_fed_funds <- c(NA, diff(df_final$fed_funds_lvl))
df_final$d_infl_us <- c(NA, diff(df_final$infl_us_rate))
df_final_svar <- na.omit(df_final)
nrow(df_final_svar)
## [1] 155

6 Selección de rezagos y estimación del VAR

sistema_var <- df_final_svar[, c("d_fed_funds", "d_infl_us",
                                  "brecha_pib", "infl_py_lvl",
                                  "brecha_tcr", "tpm_bcp_lvl")]

seleccion_rezagos <- VARselect(sistema_var, lag.max = 12, type = "const")
seleccion_rezagos$selection
## AIC(n)  HQ(n)  SC(n) FPE(n) 
##      2      2      1      2

AIC, HQ y FPE seleccionan \(p=2\); SC selecciona \(p=1\) (más conservador en muestras finitas, Lütkepohl, 2005). Sin embargo, el diagnóstico de autocorrelación residual (más abajo) obliga a ampliar la especificación.

# Estandarización para estabilidad numérica del SVAR posterior
sistema_var_std <- as.data.frame(scale(sistema_var))

p_optimo <- 4  # ver justificación en el diagnóstico de residuos, abajo
var_irrestricto <- VAR(sistema_var_std, p = p_optimo, type = "const")

cat("Raíz máxima del polinomio característico:", round(max(roots(var_irrestricto)), 4), "\n")
cat("¿VAR estable?", all(roots(var_irrestricto) < 1), "\n")
## Raíz máxima del polinomio característico: 0.9722 
## ¿VAR estable? TRUE

6.1 Diagnóstico de residuos

serial_test <- serial.test(var_irrestricto, lags.pt = 16, type = "PT.asymptotic")
arch_test <- arch.test(var_irrestricto, lags.multi = 5, multivariate.only = TRUE)
normalidad_test <- normality.test(var_irrestricto, multivariate.only = TRUE)

cat("Autocorrelación (Portmanteau): p =", round(serial_test$serial$p.value, 4), "\n")
## Autocorrelación (Portmanteau): p = 0.1417
cat("Heterocedasticidad (ARCH):     p =", round(arch_test$arch.mul$p.value, 4), "\n")
## Heterocedasticidad (ARCH):     p = 0.2756
cat("Normalidad (Jarque-Bera):      p =", format.pval(normalidad_test$jb.mul$JB$p.value), "\n")
## Normalidad (Jarque-Bera):      p = < 2.22e-16

Con \(p=2\) los residuos muestran autocorrelación significativa; esta desaparece recién con \(p=4\) (Portmanteau, \(p>0.10\)), motivo por el cual se adopta este rezago pese a que los criterios de información favorecían una especificación más parsimoniosa. La heterocedasticidad no resulta significativa; la normalidad se rechaza —esperable en series financieras y cambiarias con colas pesadas—, lo que motiva el uso de bootstrap para las bandas de confianza de las funciones de impulso-respuesta más adelante.

6.2 Exogeneidad en bloque

lm_fed <- var_irrestricto$varresult$d_fed_funds
lm_infl_us <- var_irrestricto$varresult$d_infl_us

restricciones_dom <- c("brecha_pib.l1 = 0", "infl_py_lvl.l1 = 0",
                       "brecha_tcr.l1 = 0", "tpm_bcp_lvl.l1 = 0",
                       "brecha_pib.l2 = 0", "infl_py_lvl.l2 = 0",
                       "brecha_tcr.l2 = 0", "tpm_bcp_lvl.l2 = 0")

wald_fed <- linearHypothesis(lm_fed, restricciones_dom[1:8])
wald_infl <- linearHypothesis(lm_infl_us, restricciones_dom[1:8])
wald_fed
## 
## Linear hypothesis test:
## brecha_pib.l1 = 0
## infl_py_lvl.l1 = 0
## brecha_tcr.l1 = 0
## tpm_bcp_lvl.l1 = 0
## brecha_pib.l2 = 0
## infl_py_lvl.l2 = 0
## brecha_tcr.l2 = 0
## tpm_bcp_lvl.l2 = 0
## 
## Model 1: restricted model
## Model 2: y ~ -1 + (d_fed_funds.l1 + d_infl_us.l1 + brecha_pib.l1 + infl_py_lvl.l1 + 
##     brecha_tcr.l1 + tpm_bcp_lvl.l1 + d_fed_funds.l2 + d_infl_us.l2 + 
##     brecha_pib.l2 + infl_py_lvl.l2 + brecha_tcr.l2 + tpm_bcp_lvl.l2 + 
##     d_fed_funds.l3 + d_infl_us.l3 + brecha_pib.l3 + infl_py_lvl.l3 + 
##     brecha_tcr.l3 + tpm_bcp_lvl.l3 + d_fed_funds.l4 + d_infl_us.l4 + 
##     brecha_pib.l4 + infl_py_lvl.l4 + brecha_tcr.l4 + tpm_bcp_lvl.l4 + 
##     const)
## 
##   Res.Df    RSS Df Sum of Sq      F Pr(>F)  
## 1    134 69.250                             
## 2    126 61.627  8    7.6228 1.9482 0.0584 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
wald_infl
## 
## Linear hypothesis test:
## brecha_pib.l1 = 0
## infl_py_lvl.l1 = 0
## brecha_tcr.l1 = 0
## tpm_bcp_lvl.l1 = 0
## brecha_pib.l2 = 0
## infl_py_lvl.l2 = 0
## brecha_tcr.l2 = 0
## tpm_bcp_lvl.l2 = 0
## 
## Model 1: restricted model
## Model 2: y ~ -1 + (d_fed_funds.l1 + d_infl_us.l1 + brecha_pib.l1 + infl_py_lvl.l1 + 
##     brecha_tcr.l1 + tpm_bcp_lvl.l1 + d_fed_funds.l2 + d_infl_us.l2 + 
##     brecha_pib.l2 + infl_py_lvl.l2 + brecha_tcr.l2 + tpm_bcp_lvl.l2 + 
##     d_fed_funds.l3 + d_infl_us.l3 + brecha_pib.l3 + infl_py_lvl.l3 + 
##     brecha_tcr.l3 + tpm_bcp_lvl.l3 + d_fed_funds.l4 + d_infl_us.l4 + 
##     brecha_pib.l4 + infl_py_lvl.l4 + brecha_tcr.l4 + tpm_bcp_lvl.l4 + 
##     const)
## 
##   Res.Df    RSS Df Sum of Sq      F Pr(>F)
## 1    134 95.369                           
## 2    126 90.382  8    4.9873 0.8691 0.5445

El test de Wald conjunto rechaza la hipótesis de no retroalimentación del bloque doméstico hacia el externo. Este resultado se mantiene incluso controlando por la volatilidad extraordinaria del período de pandemia mediante una variable dummy (Lenza & Primiceri, 2022), lo que descarta que se trate de un artefacto de ese episodio puntual. Es consistente con la literatura del ciclo financiero global (Rey, 2015), que documenta comovimientos entre economías avanzadas y emergentes sin causalidad genuina en sentido inverso. Siguiendo la práctica estándar en modelos SVAR para economías pequeñas y abiertas (Cushman & Zha, 1997; Zha, 1999), la exogeneidad en bloque se mantiene como restricción teórica de identificación.


7 Identificación estructural (SVAR)

amat <- diag(6)
amat[amat == 0] <- NA
colnames(amat) <- rownames(amat) <- colnames(sistema_var)

# Bloque externo: sin retroalimentación doméstica
amat[1, 2:6] <- 0
amat[2, 3:6] <- 0
# Bloque doméstico: Taylor Rule + Canal Cambiario
amat[3, 4:6] <- 0   # Brecha PIB no responde a inflación/TCR/TPM
amat[4, 5:6] <- 0   # Inflación no responde a TCR/TPM
amat[5, 3]   <- 0   # TCR (canal cambiario) no responde a brecha PIB
amat[5, 6]   <- 0   # TCR no responde a TPM
amat[6, 5]   <- 0   # TPM (Taylor) no responde a TCR

amat
##             d_fed_funds d_infl_us brecha_pib infl_py_lvl brecha_tcr tpm_bcp_lvl
## d_fed_funds           1         0          0           0          0           0
## d_infl_us            NA         1          0           0          0           0
## brecha_pib           NA        NA          1           0          0           0
## infl_py_lvl          NA        NA         NA           1          0           0
## brecha_tcr           NA        NA          0          NA          1           0
## tpm_bcp_lvl          NA        NA         NA          NA          0           1

Con 13 parámetros libres frente a los 15 requeridos para identificación exacta, el modelo queda sobre-identificado por 2 restricciones, lo que habilita un test LR de sobreidentificación.

var_irrestricto_std <- VAR(sistema_var_std, p = p_optimo, type = "const")
svar_modelo <- SVAR(var_irrestricto_std, Amat = amat, estmethod = "scoring", max.iter = 1000)
summary(svar_modelo)
## 
## SVAR Estimation Results:
## ======================== 
## 
## Call:
## SVAR(x = var_irrestricto_std, estmethod = "scoring", Amat = amat, 
##     max.iter = 1000)
## 
## Type: A-model 
## Sample size: 151 
## Log Likelihood: -1285.558 
## Method: scoring 
## Number of iterations: 153 
## 
## LR overidentification test:
## 
##  LR overidentification
## 
## data:  sistema_var_std
## Chi^2 = 1760, df = 8, p-value <2e-16
## 
## 
## Estimated A matrix:
##             d_fed_funds d_infl_us brecha_pib infl_py_lvl brecha_tcr tpm_bcp_lvl
## d_fed_funds     1.00000  0.000000    0.00000     0.00000          0           0
## d_infl_us      -0.28632  1.000000    0.00000     0.00000          0           0
## brecha_pib     -0.23260 -0.155892    1.00000     0.00000          0           0
## infl_py_lvl    -0.03456 -0.026302    0.04833     1.00000          0           0
## brecha_tcr      0.03295 -0.039110    0.00000     0.26560          1           0
## tpm_bcp_lvl    -0.04991 -0.005409   -0.04765    -0.05174          0           1
## 
## Estimated standard errors for A matrix:
##             d_fed_funds d_infl_us brecha_pib infl_py_lvl brecha_tcr tpm_bcp_lvl
## d_fed_funds     0.00000   0.00000    0.00000     0.00000          0           0
## d_infl_us       0.08138   0.00000    0.00000     0.00000          0           0
## brecha_pib      0.08465   0.08138    0.00000     0.00000          0           0
## infl_py_lvl     0.08674   0.08236    0.08138     0.00000          0           0
## brecha_tcr      0.08467   0.08139    0.00000     0.08128          0           0
## tpm_bcp_lvl     0.08679   0.08239    0.08147     0.08138          0           0
## 
## Estimated B matrix:
##             d_fed_funds d_infl_us brecha_pib infl_py_lvl brecha_tcr tpm_bcp_lvl
## d_fed_funds           1         0          0           0          0           0
## d_infl_us             0         1          0           0          0           0
## brecha_pib            0         0          1           0          0           0
## infl_py_lvl           0         0          0           1          0           0
## brecha_tcr            0         0          0           0          1           0
## tpm_bcp_lvl           0         0          0           0          0           1
## 
## Covariance matrix of reduced form residuals (*100):
##             d_fed_funds d_infl_us brecha_pib infl_py_lvl brecha_tcr tpm_bcp_lvl
## d_fed_funds     100.000    28.632     27.724       2.870     -2.937       6.615
## d_infl_us        28.632   108.198     23.527       2.698      2.572       3.275
## brecha_pib       27.724    23.527    110.116      -3.745      1.001       6.564
## infl_py_lvl       2.870     2.698     -3.745     100.351    -26.642       5.172
## brecha_tcr       -2.937     2.572      1.001     -26.642    107.273      -1.463
## tpm_bcp_lvl       6.615     3.275      6.564       5.172     -1.463     100.928

El test LR rechaza la hipótesis conjunta de restricciones. Este resultado es coherente con la evidencia de retroalimentación estadística documentada arriba, y —siguiendo la práctica del propio BCP (2019), que no reporta este test para su especificación— las restricciones se mantienen por su fundamento teórico (Taylor + canal cambiario) antes que por su ajuste estadístico exacto.


8 Robustez muestral: el episodio de 2025

Durante 2025 el dólar estadounidense registró una depreciación generalizada de aproximadamente 15% (ABC Color, 2026), atribuida principalmente a la política arancelaria y comercial de la administración estadounidense y a flujos de inversión extranjera directa, más que a movimientos en la tasa de la Fed (Barría, 2025). Dado que este mecanismo excede el canal de tasas de interés identificado en este modelo, se adopta como especificación principal la muestra que excluye dicho año.

df_principal <- df_final_svar[df_final_svar$fecha <= as.POSIXct("2024-12-01", tz = "UTC"), ]
cat("Observaciones en la muestra principal:", nrow(df_principal), "\n")
## Observaciones en la muestra principal: 143
sistema_var_principal <- scale(df_principal[, c("d_fed_funds", "d_infl_us",
                                                 "brecha_pib", "infl_py_lvl",
                                                 "brecha_tcr", "tpm_bcp_lvl")])

var_principal <- VAR(sistema_var_principal, p = p_optimo, type = "const")
cat("¿Estable?", all(roots(var_principal) < 1), "\n")
## ¿Estable? TRUE
svar_principal <- SVAR(var_principal, Amat = amat, estmethod = "scoring", max.iter = 1000)

Este es el modelo utilizado en las secciones de resultados siguientes.


9 Funciones de impulso-respuesta

irf_principal <- irf(svar_principal,
                      impulse = "d_fed_funds",
                      response = c("d_fed_funds", "brecha_pib", "infl_py_lvl",
                                   "brecha_tcr", "tpm_bcp_lvl"),
                      n.ahead = 24, ortho = TRUE, cumulative = TRUE,
                      boot = TRUE, runs = 500, ci = 0.95)

par(cex.lab = 1.3, cex.axis = 1.0, font.lab = 2)
plot(irf_principal, mar = c(3, 6, 2, 1))

Lectura de resultados: ante un shock permanente en la tasa de la Fed, la brecha del TCR muestra una apreciación real acumulada, significativa hasta aproximadamente el mes 8-10. Este resultado, en apariencia contrario al canal cambiario tradicional, se explica por la respuesta endógena de la TPM: siguiendo la Regla de Taylor, el BCP eleva su tasa ante el shock externo, generando apreciación cambiaria (BCP, 2019).


10 Descomposición de varianza (FEVD)

fevd_principal <- fevd(svar_principal, n.ahead = 24)
fevd_tcr <- fevd_principal$brecha_tcr

horizontes_clave <- c(1, 6, 12, 24)
tabla_fevd <- round(fevd_tcr[horizontes_clave, ] * 100, 2)
rownames(tabla_fevd) <- horizontes_clave
knitr::kable(tabla_fevd, caption = "Descomposición de varianza de la brecha del TCR (%)")
Descomposición de varianza de la brecha del TCR (%)
d_fed_funds d_infl_us brecha_pib infl_py_lvl brecha_tcr tpm_bcp_lvl
1 0.27 0.14 0.02 8.84 90.73 0.00
6 2.09 0.29 1.05 19.65 68.63 8.29
12 2.36 0.27 1.28 20.83 52.47 22.80
24 2.32 0.26 1.33 20.52 50.88 24.68
plot(fevd_principal, addbars = 6)

En el largo plazo (mes 24), el shock directo de la Fed explica apenas 2,3% de la variabilidad del TCR, mientras que la TPM explica 24,7% —más de diez veces más— y la inflación local 20,5%. Esto confirma que la transmisión de los shocks externos hacia el tipo de cambio real opera de forma predominantemente indirecta, a través de la reacción de política monetaria doméstica, más que por un canal cambiario directo de paridad de tasas de interés.


11 Discusión y conclusiones

Los resultados de este trabajo muestran que, en Paraguay, la transmisión de los shocks de la Reserva Federal hacia el tipo de cambio real está mediada principalmente por la reacción de política monetaria doméstica —modelada mediante una función de reacción de tipo Taylor—, más que por un canal cambiario directo de paridad de tasas de interés. Este hallazgo matiza la interpretación estándar de este mecanismo en economías pequeñas y abiertas, sin contradecir el marco teórico del ciclo financiero global (Rey, 2015): revela más bien cómo ambos mecanismos interactúan, con la Regla de Taylor dominando la transmisión neta observada.

Limitaciones y líneas futuras:

  • El test de sobreidentificación rechaza las restricciones estructurales; se mantienen como supuesto teórico, práctica estándar en la literatura de SVAR de bloques (Cushman & Zha, 1997; Zha, 1999).
  • El episodio de 2025 (depreciación del dólar por política comercial) queda fuera del alcance del modelo; su incorporación mediante variables de política comercial o flujos de IED es una línea natural de extensión.
  • El rechazo de normalidad de los residuos se abordó con bootstrap; futuras extensiones podrían modelar explícitamente la heterocedasticidad condicional (Lenza & Primiceri, 2022).

12 Referencias

  • ABC Color. (2026, 2 de enero). La cotización del dólar cayó 15% en 2025 y abre en G. 6.650 en primer día.
  • Amisano, G., & Giannini, C. (2012). Topics in structural VAR econometrics. Springer.
  • Banco Central del Paraguay. (2019). Efectos macroeconómicos de la política monetaria en Paraguay bajo un enfoque SVAR [Recuadro I]. Informe de Política Monetaria, diciembre 2019.
  • Barría, C. (2025, 3 de junio). Por qué a Trump podría interesarle un dólar débil… BBC News Mundo.
  • Cresta, J. B. (2014). La FED y el mercado cambiario nacional. CADEP.
  • Cushman, D. O., & Zha, T. (1997). Identifying monetary policy in a small open economy under flexible exchange rates. Journal of Monetary Economics, 39(3), 433–448.
  • Hamilton, J. D. (2018). Why you should never use the Hodrick-Prescott filter. Review of Economics and Statistics, 100(5), 831–843.
  • Krugman, P., & Obstfeld, M. (2006). Economía internacional: Teoría y política. Pearson.
  • Lenza, M., & Primiceri, G. E. (2022). How to estimate a VAR after March 2020. Journal of Applied Econometrics, 37(4), 688–699.
  • Lütkepohl, H. (2005). New introduction to multiple time series analysis. Springer.
  • Perron, P. (1989). The great crash, the oil price shock, and the unit root hypothesis. Econometrica, 57(6), 1361–1401.
  • Rey, H. (2015). Dilemma not trilemma: The global financial cycle and monetary policy independence (NBER WP 21162).
  • Taylor, J. B. (1993). Discretion versus policy rules in practice. Carnegie-Rochester Conference Series on Public Policy, 39(1), 195–214.
  • Zha, T. (1999). Block recursion and structural vector autoregressions. Journal of Econometrics, 90(2), 291–316.

Este documento fue generado en R Markdown. El código completo se encuentra disponible mostrando los bloques ocultos (“Show” en cada sección).