source("build_objects.R")
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: MASS
## Loading required package: strucchange
## Loading required package: sandwich
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:MASS':
## 
##     select
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(knitr)
## Warning: package 'knitr' was built under R version 4.4.3
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
library(lmtest)
library(urca)
library(vars)
library(tibble)
## Warning: package 'tibble' was built under R version 4.4.3
knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
source("build_objects.R")
## The following objects are masked from USA_data (pos = 7):
## 
##     CO, COUNTRY, COUNTRYCODE, CU, CUR, EMPL, EXR, GO, GU, HCAP, IO, IU,
##     KO, MO, MU, POP, XO, XU, YEAR, YO, YU
# =========================================================
# GLOBAL TABLE RENDERER FOR R MARKDOWN
# =========================================================



make_pretty_table <- function(df, title_text = NULL, digits = 4) {
  df %>%
    as.data.frame() %>%
    mutate(across(where(is.numeric), ~ round(.x, digits))) %>%
    knitr::kable(
      caption = title_text,
      align = "l",
      booktabs = TRUE
    ) %>%
    kableExtra::kable_styling(full_width = FALSE)
}

rbind_fill <- function(...) {
  dfs <- list(...)
  all_names <- unique(unlist(lapply(dfs, names)))
  
  dfs_aligned <- lapply(dfs, function(df) {
    missing <- setdiff(all_names, names(df))
    if (length(missing) > 0) {
      for (m in missing) df[[m]] <- NA
    }
    df[, all_names, drop = FALSE]
  })
  
  out <- do.call(rbind, dfs_aligned)
  rownames(out) <- NULL
  out
}

safe_whitefit_p <- function(model) {
  aux <- data.frame(
    u2 = residuals(model)^2,
    fitvals = fitted(model)
  )
  white_aux <- lm(u2 ~ fitvals + I(fitvals^2), data = aux)
  bptest(white_aux)$p.value
}

collect_diag_tests <- function(model, model_name) {
  data.frame(
    model = model_name,
    BG_p = bgtest(model, order = 4)$p.value,
    LjungBox_p = Box.test(resid(model), lag = 12, type = "Ljung-Box")$p.value,
    BP_p = bptest(model)$p.value,
    WhiteFit_p = safe_whitefit_p(model),
    RESET2_p = resettest(model, power = 2, type = "fitted")$p.value,
    RESET23_p = resettest(model, power = 2:3, type = "fitted")$p.value
  )
}

# ## ADF Tables
make_best_lag_table <- function(adf_table) {
  best_AIC <- do.call(
    rbind,
    lapply(split(adf_table, adf_table$series), function(x) x[which.min(x$AIC), ])
  )
  
  best_BIC <- do.call(
    rbind,
    lapply(split(adf_table, adf_table$series), function(x) x[which.min(x$BIC), ])
  )
  
  best_summary <- merge(
    best_AIC[, c("series", "type", "lag", "tau_stat", "AIC")],
    best_BIC[, c("series", "lag", "tau_stat", "BIC")],
    by = "series",
    suffixes = c("_AIC", "_BIC")
  )
  
  names(best_summary) <- c(
    "series",
    "type",
    "best_lag_AIC",
    "tau_stat_AIC",
    "AIC",
    "best_lag_BIC",
    "tau_stat_BIC",
    "BIC"
  )
  
  rownames(best_AIC) <- NULL
  rownames(best_BIC) <- NULL
  rownames(best_summary) <- NULL
  
  list(
    full = adf_table,
    best_AIC = best_AIC,
    best_BIC = best_BIC,
    summary = best_summary
  )
}

adf_tables_levels <- make_best_lag_table(adf_lag_table)
adf_tables_logs   <- make_best_lag_table(adf_lag_table_log)
adf_tables_dlog   <- make_best_lag_table(adf_lag_table_dlog)

make_pretty_table(adf_tables_levels$full,     "ADF LEVEL VARIABLES - FULL LAG TABLE")
ADF LEVEL VARIABLES - FULL LAG TABLE
series type lag tau_stat AIC BIC
wage_gap trend 0 -2.7571 -1508.5606 -1467.0968
wage_gap trend 1 -2.4823 -1494.5787 -1439.3621
wage_gap trend 2 -2.5016 -1479.5305 -1410.5958
wage_gap trend 3 -2.4518 -1463.9835 -1381.3655
wage_gap trend 4 -2.4808 -1450.7254 -1354.4591
wage_gap trend 5 -2.5487 -1435.7025 -1325.8234
wage_gap trend 6 -2.5227 -1420.7702 -1297.3138
wage_gap trend 7 -2.3474 -1405.7865 -1268.7885
wage_gap trend 8 -2.1043 -1391.7888 -1241.2853
treasury_gdp trend 0 0.1365 -1885.5109 -1844.0471
treasury_gdp trend 1 -0.5479 -1905.5294 -1850.3128
treasury_gdp trend 2 -0.7891 -1892.7755 -1823.8408
treasury_gdp trend 3 -1.3553 -1891.7857 -1809.1677
treasury_gdp trend 4 -1.7103 -1882.2027 -1785.9365
treasury_gdp trend 5 -1.7473 -1865.3189 -1755.4398
treasury_gdp trend 6 -1.7151 -1847.9130 -1724.4566
treasury_gdp trend 7 -1.9354 -1832.6533 -1695.6553
treasury_gdp trend 8 -1.7991 -1815.5498 -1665.0462
trade_deficit_gdp trend 0 -1.8462 -2074.7900 -2033.3261
trade_deficit_gdp trend 1 -2.4129 -2071.3929 -2016.1763
trade_deficit_gdp trend 2 -2.1759 -2055.0474 -1986.1127
trade_deficit_gdp trend 3 -2.2058 -2037.7789 -1955.1609
trade_deficit_gdp trend 4 -1.9272 -2022.1232 -1925.8570
trade_deficit_gdp trend 5 -1.8965 -2004.0925 -1894.2134
trade_deficit_gdp trend 6 -2.1246 -1989.0557 -1865.5992
trade_deficit_gdp trend 7 -2.1929 -1971.5282 -1834.5302
trade_deficit_gdp trend 8 -2.1749 -1953.5381 -1803.0345
fdi_outward_gdp trend 0 -3.8745 -1216.8683 -1175.4045
fdi_outward_gdp trend 1 -3.9051 -1203.0267 -1147.8101
fdi_outward_gdp trend 2 -4.2030 -1191.5900 -1122.6552
fdi_outward_gdp trend 3 -3.9048 -1177.9087 -1095.2906
fdi_outward_gdp trend 4 -3.7429 -1163.7040 -1067.4378
fdi_outward_gdp trend 5 -4.0111 -1151.9735 -1042.0944
fdi_outward_gdp trend 6 -3.6366 -1138.9931 -1015.5367
fdi_outward_gdp trend 7 -3.2733 -1126.8173 -989.8193
fdi_outward_gdp trend 8 -2.9407 -1114.6101 -964.1066
imports_ind_real_gdp trend 0 -2.0670 -2221.4416 -2179.9778
imports_ind_real_gdp trend 1 -3.4170 -2246.1708 -2190.9542
imports_ind_real_gdp trend 2 -2.7130 -2235.0666 -2166.1319
imports_ind_real_gdp trend 3 -2.7453 -2216.5180 -2133.8999
imports_ind_real_gdp trend 4 -2.1751 -2205.0220 -2108.7557
imports_ind_real_gdp trend 5 -2.3500 -2187.7172 -2077.8381
imports_ind_real_gdp trend 6 -2.2639 -2168.9548 -2045.4983
imports_ind_real_gdp trend 7 -2.1340 -2150.3726 -2013.3746
imports_ind_real_gdp trend 8 -1.8352 -2134.2289 -1983.7254
min_wage_real trend 0 -1.9475 -2261.5597 -2220.0959
min_wage_real trend 1 -1.9533 -2244.8119 -2189.5952
min_wage_real trend 2 -1.7413 -2227.3488 -2158.4140
min_wage_real trend 3 -1.6808 -2208.6825 -2126.0645
min_wage_real trend 4 -3.0574 -2249.8385 -2153.5723
min_wage_real trend 5 -2.8241 -2234.9761 -2125.0970
min_wage_real trend 6 -2.8897 -2216.3938 -2092.9373
min_wage_real trend 7 -2.9857 -2198.1344 -2061.1364
min_wage_real trend 8 -3.1007 -2184.9929 -2034.4893
long_rate trend 0 -2.5048 339.9844 381.4482
long_rate trend 1 -2.8036 332.1495 387.3661
long_rate trend 2 -2.5976 338.9532 407.8879
long_rate trend 3 -2.7630 341.3623 423.9803
long_rate trend 4 -2.7532 348.3269 444.5931
long_rate trend 5 -2.5205 352.7278 462.6069
long_rate trend 6 -2.6795 358.9543 482.4108
long_rate trend 7 -2.3556 362.0712 499.0692
long_rate trend 8 -2.3193 368.8120 519.3155
make_pretty_table(adf_tables_levels$best_AIC, "ADF LEVEL VARIABLES - BEST LAG BY AIC")
ADF LEVEL VARIABLES - BEST LAG BY AIC
series type lag tau_stat AIC BIC
fdi_outward_gdp trend 0 -3.8745 -1216.8683 -1175.4045
imports_ind_real_gdp trend 1 -3.4170 -2246.1708 -2190.9542
long_rate trend 1 -2.8036 332.1495 387.3661
min_wage_real trend 0 -1.9475 -2261.5597 -2220.0959
trade_deficit_gdp trend 0 -1.8462 -2074.7900 -2033.3261
treasury_gdp trend 1 -0.5479 -1905.5294 -1850.3128
wage_gap trend 0 -2.7571 -1508.5606 -1467.0968
make_pretty_table(adf_tables_levels$best_BIC, "ADF LEVEL VARIABLES - BEST LAG BY BIC")
ADF LEVEL VARIABLES - BEST LAG BY BIC
series type lag tau_stat AIC BIC
fdi_outward_gdp trend 0 -3.8745 -1216.8683 -1175.4045
imports_ind_real_gdp trend 1 -3.4170 -2246.1708 -2190.9542
long_rate trend 0 -2.5048 339.9844 381.4482
min_wage_real trend 0 -1.9475 -2261.5597 -2220.0959
trade_deficit_gdp trend 0 -1.8462 -2074.7900 -2033.3261
treasury_gdp trend 1 -0.5479 -1905.5294 -1850.3128
wage_gap trend 0 -2.7571 -1508.5606 -1467.0968
make_pretty_table(adf_tables_levels$summary,  "ADF LEVEL VARIABLES - BEST LAG SUMMARY")
ADF LEVEL VARIABLES - BEST LAG SUMMARY
series type best_lag_AIC tau_stat_AIC AIC best_lag_BIC tau_stat_BIC BIC
fdi_outward_gdp trend 0 -3.8745 -1216.8683 0 -3.8745 -1175.4045
imports_ind_real_gdp trend 1 -3.4170 -2246.1708 1 -3.4170 -2190.9542
long_rate trend 1 -2.8036 332.1495 0 -2.5048 381.4482
min_wage_real trend 0 -1.9475 -2261.5597 0 -1.9475 -2220.0959
trade_deficit_gdp trend 0 -1.8462 -2074.7900 0 -1.8462 -2033.3261
treasury_gdp trend 1 -0.5479 -1905.5294 1 -0.5479 -1850.3128
wage_gap trend 0 -2.7571 -1508.5606 0 -2.7571 -1467.0968
make_pretty_table(adf_tables_logs$full,     "ADF LOG VARIABLES - FULL LAG TABLE")
ADF LOG VARIABLES - FULL LAG TABLE
series type lag tau_stat AIC BIC
log_wage_gap trend 0 -2.1528 -1644.5272 -1603.0634
log_wage_gap trend 1 -1.9157 -1630.0405 -1574.8239
log_wage_gap trend 2 -2.0328 -1615.4071 -1546.4724
log_wage_gap trend 3 -1.8955 -1599.6429 -1517.0248
log_wage_gap trend 4 -1.8800 -1586.4856 -1490.2194
log_wage_gap trend 5 -1.8510 -1570.6030 -1460.7239
log_wage_gap trend 6 -1.8013 -1555.5103 -1432.0539
log_wage_gap trend 7 -1.6070 -1540.9641 -1403.9661
log_wage_gap trend 8 -1.4448 -1526.2226 -1375.7191
log_treasury_gdp trend 0 -0.8771 -632.1951 -590.7313
log_treasury_gdp trend 1 -1.4879 -639.5084 -584.2918
log_treasury_gdp trend 2 -1.7828 -632.2816 -563.3468
log_treasury_gdp trend 3 -2.5728 -644.7672 -562.1492
log_treasury_gdp trend 4 -3.1193 -644.0367 -547.7705
log_treasury_gdp trend 5 -3.0454 -648.9133 -539.0342
log_treasury_gdp trend 6 -2.9435 -636.9720 -513.5156
log_treasury_gdp trend 7 -2.3934 -628.8569 -491.8589
log_treasury_gdp trend 8 -2.4976 -623.3850 -472.8815
log_trade_balance trend 0 -2.1101 -987.0529 -945.5890
log_trade_balance trend 1 -2.4616 -980.3904 -925.1738
log_trade_balance trend 2 -2.2269 -969.9012 -900.9665
log_trade_balance trend 3 -2.4366 -959.7117 -877.0937
log_trade_balance trend 4 -2.3814 -946.7807 -850.5145
log_trade_balance trend 5 -2.3368 -933.4958 -823.6167
log_trade_balance trend 6 -2.6546 -926.9172 -803.4607
log_trade_balance trend 7 -2.7862 -915.8556 -778.8576
log_trade_balance trend 8 -2.6386 -902.7240 -752.2205
log_fdi_outward_gdp trend 0 -3.4518 -474.7437 -433.2799
log_fdi_outward_gdp trend 1 -3.3874 -463.6518 -408.4352
log_fdi_outward_gdp trend 2 -3.4626 -453.1305 -384.1958
log_fdi_outward_gdp trend 3 -3.2252 -442.5004 -359.8824
log_fdi_outward_gdp trend 4 -3.3656 -432.5517 -336.2855
log_fdi_outward_gdp trend 5 -3.4248 -421.9654 -312.0863
log_fdi_outward_gdp trend 6 -3.2585 -410.9269 -287.4704
log_fdi_outward_gdp trend 7 -2.9572 -400.9779 -263.9799
log_fdi_outward_gdp trend 8 -2.9770 -390.1059 -239.6024
log_imports_ind_real_gdp trend 0 -1.7780 -479.4511 -437.9873
log_imports_ind_real_gdp trend 1 -2.3232 -484.6957 -429.4791
log_imports_ind_real_gdp trend 2 -2.4258 -475.2361 -406.3013
log_imports_ind_real_gdp trend 3 -2.2511 -465.6324 -383.0144
log_imports_ind_real_gdp trend 4 -1.9039 -460.6499 -364.3837
log_imports_ind_real_gdp trend 5 -1.9542 -450.7028 -340.8237
log_imports_ind_real_gdp trend 6 -2.2041 -442.7818 -319.3254
log_imports_ind_real_gdp trend 7 -2.1102 -432.6514 -295.6534
log_imports_ind_real_gdp trend 8 -2.3221 -429.6479 -279.1444
log_min_wage_real trend 0 -1.8149 -1027.1857 -985.7219
log_min_wage_real trend 1 -1.8176 -1015.3303 -960.1137
log_min_wage_real trend 2 -1.6280 -1002.8295 -933.8947
log_min_wage_real trend 3 -1.5882 -989.4126 -906.7946
log_min_wage_real trend 4 -2.9269 -1031.2886 -935.0224
log_min_wage_real trend 5 -2.7067 -1020.2860 -910.4069
log_min_wage_real trend 6 -2.7646 -1006.9439 -883.4874
log_min_wage_real trend 7 -2.8604 -993.9505 -856.9525
log_min_wage_real trend 8 -2.9303 -984.1421 -833.6386
log_long_rate trend 0 -2.5540 -357.4551 -315.9913
log_long_rate trend 1 -3.2730 -373.5768 -318.3602
log_long_rate trend 2 -2.7674 -367.8754 -298.9406
log_long_rate trend 3 -2.8578 -358.4412 -275.8232
log_long_rate trend 4 -3.0606 -349.4439 -253.1777
log_long_rate trend 5 -3.1636 -339.6914 -229.8123
log_long_rate trend 6 -3.1934 -330.4749 -207.0185
log_long_rate trend 7 -2.8178 -321.5077 -184.5097
log_long_rate trend 8 -2.5009 -313.5662 -163.0627
make_pretty_table(adf_tables_logs$best_AIC, "ADF LOG VARIABLES - BEST LAG BY AIC")
ADF LOG VARIABLES - BEST LAG BY AIC
series type lag tau_stat AIC BIC
log_fdi_outward_gdp trend 0 -3.4518 -474.7437 -433.2799
log_imports_ind_real_gdp trend 1 -2.3232 -484.6957 -429.4791
log_long_rate trend 1 -3.2730 -373.5768 -318.3602
log_min_wage_real trend 4 -2.9269 -1031.2886 -935.0224
log_trade_balance trend 0 -2.1101 -987.0529 -945.5890
log_treasury_gdp trend 5 -3.0454 -648.9133 -539.0342
log_wage_gap trend 0 -2.1528 -1644.5272 -1603.0634
make_pretty_table(adf_tables_logs$best_BIC, "ADF LOG VARIABLES - BEST LAG BY BIC")
ADF LOG VARIABLES - BEST LAG BY BIC
series type lag tau_stat AIC BIC
log_fdi_outward_gdp trend 0 -3.4518 -474.7437 -433.2799
log_imports_ind_real_gdp trend 0 -1.7780 -479.4511 -437.9873
log_long_rate trend 1 -3.2730 -373.5768 -318.3602
log_min_wage_real trend 0 -1.8149 -1027.1857 -985.7219
log_trade_balance trend 0 -2.1101 -987.0529 -945.5890
log_treasury_gdp trend 0 -0.8771 -632.1951 -590.7313
log_wage_gap trend 0 -2.1528 -1644.5272 -1603.0634
make_pretty_table(adf_tables_logs$summary,  "ADF LOG VARIABLES - BEST LAG SUMMARY")
ADF LOG VARIABLES - BEST LAG SUMMARY
series type best_lag_AIC tau_stat_AIC AIC best_lag_BIC tau_stat_BIC BIC
log_fdi_outward_gdp trend 0 -3.4518 -474.7437 0 -3.4518 -433.2799
log_imports_ind_real_gdp trend 1 -2.3232 -484.6957 0 -1.7780 -437.9873
log_long_rate trend 1 -3.2730 -373.5768 1 -3.2730 -318.3602
log_min_wage_real trend 4 -2.9269 -1031.2886 0 -1.8149 -985.7219
log_trade_balance trend 0 -2.1101 -987.0529 0 -2.1101 -945.5890
log_treasury_gdp trend 5 -3.0454 -648.9133 0 -0.8771 -590.7313
log_wage_gap trend 0 -2.1528 -1644.5272 0 -2.1528 -1603.0634
make_pretty_table(adf_tables_dlog$full,     "ADF DIFFERENCED VARIABLES - FULL LAG TABLE")
ADF DIFFERENCED VARIABLES - FULL LAG TABLE
series type lag tau_stat AIC BIC
d_log_wage_gap drift 0 -16.7974 -1642.1847 -1614.5764
d_log_wage_gap drift 1 -10.6977 -1627.0257 -1585.6649
d_log_wage_gap drift 2 -9.2263 -1611.7481 -1556.6695
d_log_wage_gap drift 3 -8.0964 -1598.7755 -1530.0140
d_log_wage_gap drift 4 -7.2923 -1583.0089 -1500.5995
d_log_wage_gap drift 5 -6.5658 -1568.0048 -1471.9832
d_log_wage_gap drift 6 -6.4879 -1554.0093 -1444.4109
d_log_wage_gap drift 7 -6.3710 -1539.6252 -1416.4859
d_log_wage_gap drift 8 -5.1014 -1529.3345 -1392.6904
d_log_treasury_gdp drift 0 -11.3562 -650.6504 -623.0421
d_log_treasury_gdp drift 1 -7.9120 -643.0935 -601.7327
d_log_treasury_gdp drift 2 -5.2182 -653.2464 -598.1677
d_log_treasury_gdp drift 3 -4.5025 -648.9344 -580.1729
d_log_treasury_gdp drift 4 -5.2040 -652.5928 -570.1834
d_log_treasury_gdp drift 5 -4.9001 -641.5546 -545.5329
d_log_treasury_gdp drift 6 -5.1387 -636.7122 -527.1138
d_log_treasury_gdp drift 7 -5.2491 -629.4731 -506.3338
d_log_treasury_gdp drift 8 -5.3455 -620.4230 -483.7790
d_log_trade_balance drift 0 -13.0963 -989.7602 -962.1519
d_log_trade_balance drift 1 -10.4955 -980.5509 -939.1900
d_log_trade_balance drift 2 -8.1644 -969.2259 -914.1473
d_log_trade_balance drift 3 -7.4637 -956.4267 -887.6651
d_log_trade_balance drift 4 -6.8487 -943.2919 -860.8826
d_log_trade_balance drift 5 -5.3757 -935.3624 -839.3407
d_log_trade_balance drift 6 -4.7795 -923.6881 -814.0897
d_log_trade_balance drift 7 -4.8065 -911.3541 -788.2148
d_log_trade_balance drift 8 -4.5686 -898.6340 -761.9900
d_log_fdi_outward_gdp drift 0 -15.8068 -468.2576 -440.6493
d_log_fdi_outward_gdp drift 1 -10.8942 -457.1867 -415.8259
d_log_fdi_outward_gdp drift 2 -9.6216 -448.0581 -392.9794
d_log_fdi_outward_gdp drift 3 -7.8913 -437.1507 -368.3891
d_log_fdi_outward_gdp drift 4 -6.9790 -426.1148 -343.7055
d_log_fdi_outward_gdp drift 5 -6.7407 -416.1221 -320.1004
d_log_fdi_outward_gdp drift 6 -6.8355 -408.0002 -298.4018
d_log_fdi_outward_gdp drift 7 -6.2301 -396.9641 -273.8249
d_log_fdi_outward_gdp drift 8 -6.1765 -387.2809 -250.6369
d_log_imports_ind_real_gdp drift 0 -11.7843 -492.8260 -465.2177
d_log_imports_ind_real_gdp drift 1 -9.5115 -482.3944 -441.0336
d_log_imports_ind_real_gdp drift 2 -7.8676 -474.2596 -419.1809
d_log_imports_ind_real_gdp drift 3 -8.2399 -470.0969 -401.3353
d_log_imports_ind_real_gdp drift 4 -7.4100 -459.4572 -377.0479
d_log_imports_ind_real_gdp drift 5 -5.9553 -450.7682 -354.7465
d_log_imports_ind_real_gdp drift 6 -5.8909 -440.6498 -331.0514
d_log_imports_ind_real_gdp drift 7 -6.0112 -434.8993 -311.7600
d_log_imports_ind_real_gdp drift 8 -5.4969 -433.7182 -297.0741
d_log_min_wage_real drift 0 -15.5722 -1027.8304 -1000.2221
d_log_min_wage_real drift 1 -11.7091 -1015.9080 -974.5472
d_log_min_wage_real drift 2 -9.3595 -1002.5671 -947.4884
d_log_min_wage_real drift 3 -5.4337 -1038.6180 -969.8564
d_log_min_wage_real drift 4 -5.7810 -1028.8107 -946.4014
d_log_min_wage_real drift 5 -5.3741 -1015.1140 -919.0923
d_log_min_wage_real drift 6 -4.9175 -1001.5437 -891.9453
d_log_min_wage_real drift 7 -4.2986 -991.2804 -868.1412
d_log_min_wage_real drift 8 -4.1492 -978.3714 -841.7274
d_long_rate drift 0 -11.9035 324.2814 351.8897
d_long_rate drift 1 -10.1106 329.9770 371.3378
d_long_rate drift 2 -7.3740 333.1767 388.2553
d_long_rate drift 3 -6.9320 340.1683 408.9299
d_long_rate drift 4 -7.2029 343.4078 425.8171
d_long_rate drift 5 -6.4492 350.5815 446.6032
d_long_rate drift 6 -6.8947 352.0574 461.6558
d_long_rate drift 7 -5.9475 358.5412 481.6804
d_long_rate drift 8 -5.7258 365.7572 502.4012
make_pretty_table(adf_tables_dlog$best_AIC, "ADF DIFFERENCED VARIABLES - BEST LAG BY AIC")
ADF DIFFERENCED VARIABLES - BEST LAG BY AIC
series type lag tau_stat AIC BIC
d_log_fdi_outward_gdp drift 0 -15.8068 -468.2576 -440.6493
d_log_imports_ind_real_gdp drift 0 -11.7843 -492.8260 -465.2177
d_log_min_wage_real drift 3 -5.4337 -1038.6180 -969.8564
d_log_trade_balance drift 0 -13.0963 -989.7602 -962.1519
d_log_treasury_gdp drift 2 -5.2182 -653.2464 -598.1677
d_log_wage_gap drift 0 -16.7974 -1642.1847 -1614.5764
d_long_rate drift 0 -11.9035 324.2814 351.8897
make_pretty_table(adf_tables_dlog$best_BIC, "ADF DIFFERENCED VARIABLES - BEST LAG BY BIC")
ADF DIFFERENCED VARIABLES - BEST LAG BY BIC
series type lag tau_stat AIC BIC
d_log_fdi_outward_gdp drift 0 -15.8068 -468.2576 -440.6493
d_log_imports_ind_real_gdp drift 0 -11.7843 -492.8260 -465.2177
d_log_min_wage_real drift 0 -15.5722 -1027.8304 -1000.2221
d_log_trade_balance drift 0 -13.0963 -989.7602 -962.1519
d_log_treasury_gdp drift 0 -11.3562 -650.6504 -623.0421
d_log_wage_gap drift 0 -16.7974 -1642.1847 -1614.5764
d_long_rate drift 0 -11.9035 324.2814 351.8897
make_pretty_table(adf_tables_dlog$summary,  "ADF DIFFERENCED VARIABLES - BEST LAG SUMMARY")
ADF DIFFERENCED VARIABLES - BEST LAG SUMMARY
series type best_lag_AIC tau_stat_AIC AIC best_lag_BIC tau_stat_BIC BIC
d_log_fdi_outward_gdp drift 0 -15.8068 -468.2576 0 -15.8068 -440.6493
d_log_imports_ind_real_gdp drift 0 -11.7843 -492.8260 0 -11.7843 -465.2177
d_log_min_wage_real drift 3 -5.4337 -1038.6180 0 -15.5722 -1000.2221
d_log_trade_balance drift 0 -13.0963 -989.7602 0 -13.0963 -962.1519
d_log_treasury_gdp drift 2 -5.2182 -653.2464 0 -11.3562 -623.0421
d_log_wage_gap drift 0 -16.7974 -1642.1847 0 -16.7974 -1614.5764
d_long_rate drift 0 -11.9035 324.2814 0 -11.9035 351.8897
# ## Engle-Granger Tables
collect_eg_results <- function(eg_obj, model_label) {
  data.frame(
    model = model_label,
    best_lag_AIC = eg_obj$best_AIC$lag,
    tau_stat_AIC = eg_obj$best_AIC$tau_stat,
    AIC = eg_obj$best_AIC$AIC,
    best_lag_BIC = eg_obj$best_BIC$lag,
    tau_stat_BIC = eg_obj$best_BIC$tau_stat,
    BIC = eg_obj$best_BIC$BIC
  )
}

eg_table_no_break <- rbind(
  collect_eg_results(eg_baseline, "baseline"),
  collect_eg_results(eg_pathway1, "pathway1_imports"),
  collect_eg_results(eg_pathway2, "pathway2_longrate"),
  collect_eg_results(eg_optional, "optional_both_pathways")
)
rownames(eg_table_no_break) <- NULL

eg_table_break <- rbind(
  collect_eg_results(eg_baseline_break, "baseline_break"),
  collect_eg_results(eg_pathway1_break, "pathway1_break"),
  collect_eg_results(eg_pathway2_break, "pathway2_break"),
  collect_eg_results(eg_fdi_break, "fdi_break"),
  collect_eg_results(eg_optional_break, "optional_break"),
  collect_eg_results(eg_optional_breakFDI, "optional_breakFDI")
)
rownames(eg_table_break) <- NULL

make_pretty_table(eg_table_no_break, "ENGLE-GRANGER RESULTS - NO BREAK")
ENGLE-GRANGER RESULTS - NO BREAK
model best_lag_AIC tau_stat_AIC AIC best_lag_BIC tau_stat_BIC BIC
baseline 0 -2.1752 -1391.764 0 -2.1752 -1377.943
pathway1_imports 0 -2.1204 -1414.749 0 -2.1204 -1400.928
pathway2_longrate 0 -2.5252 -1347.957 0 -2.5252 -1334.135
optional_both_pathways 0 -3.4033 -1319.774 0 -3.4033 -1305.953
make_pretty_table(eg_table_break, "ENGLE-GRANGER RESULTS - BREAK MODELS")
ENGLE-GRANGER RESULTS - BREAK MODELS
model best_lag_AIC tau_stat_AIC AIC best_lag_BIC tau_stat_BIC BIC
baseline_break 0 -4.0864 -1513.723 0 -4.0864 -1499.902
pathway1_break 0 -5.6014 -1515.975 0 -5.6014 -1502.153
pathway2_break 0 -4.6279 -1495.590 0 -4.6279 -1481.769
fdi_break 0 -3.9769 -1532.493 0 -3.9769 -1518.671
optional_break 0 -5.6480 -1516.875 0 -5.6480 -1503.054
optional_breakFDI 0 -5.6453 -1517.047 0 -5.6453 -1503.226
# ## Long-Run Regression Fit Tables
collect_lm_fit_stats <- function(model, model_label) {
  s <- summary(model)
  data.frame(
    model = model_label,
    n = length(resid(model)),
    R2 = s$r.squared,
    Adj_R2 = s$adj.r.squared,
    Resid_SE = s$sigma,
    F_stat = unname(s$fstatistic[1]),
    F_df1 = unname(s$fstatistic[2]),
    F_df2 = unname(s$fstatistic[3]),
    F_p = pf(
      unname(s$fstatistic[1]),
      unname(s$fstatistic[2]),
      unname(s$fstatistic[3]),
      lower.tail = FALSE
    )
  )
}

longrun_fit_no_break <- rbind(
  collect_lm_fit_stats(eg_baseline$long_run, "baseline"),
  collect_lm_fit_stats(eg_pathway1$long_run, "pathway1_imports"),
  collect_lm_fit_stats(eg_pathway2$long_run, "pathway2_longrate"),
  collect_lm_fit_stats(eg_optional$long_run, "optional_both_pathways")
)
rownames(longrun_fit_no_break) <- NULL

longrun_fit_break <- rbind(
  collect_lm_fit_stats(eg_baseline_break$long_run, "baseline_break"),
  collect_lm_fit_stats(eg_pathway1_break$long_run, "pathway1_break"),
  collect_lm_fit_stats(eg_pathway2_break$long_run, "pathway2_break"),
  collect_lm_fit_stats(eg_fdi_break$long_run, "fdi_break"),
  collect_lm_fit_stats(eg_optional_break$long_run, "optional_break"),
  collect_lm_fit_stats(eg_optional_breakFDI$long_run, "optional_breakFDI")
)
rownames(longrun_fit_break) <- NULL

make_pretty_table(longrun_fit_no_break, "LONG-RUN REGRESSION FIT - NO BREAK")
LONG-RUN REGRESSION FIT - NO BREAK
model n R2 Adj_R2 Resid_SE F_stat F_df1 F_df2 F_p
baseline 235 0.8866 0.8852 0.0456 602.1818 3 231 0
pathway1_imports 235 0.8879 0.8860 0.0455 455.4543 4 230 0
pathway2_longrate 235 0.9136 0.9121 0.0399 607.9992 4 230 0
optional_both_pathways 235 0.9430 0.9417 0.0325 757.0053 5 229 0
make_pretty_table(longrun_fit_break, "LONG-RUN REGRESSION FIT - BREAK MODELS")
LONG-RUN REGRESSION FIT - BREAK MODELS
model n R2 Adj_R2 Resid_SE F_stat F_df1 F_df2 F_p
baseline_break 235 0.9806 0.9801 0.0190 2309.792 5 229 0
pathway1_break 235 0.9885 0.9882 0.0146 3279.853 6 228 0
pathway2_break 235 0.9830 0.9825 0.0178 2196.393 6 228 0
fdi_break 235 0.9812 0.9807 0.0187 1981.612 6 228 0
optional_break 235 0.9887 0.9884 0.0145 2847.196 7 227 0
optional_breakFDI 235 0.9887 0.9883 0.0145 2480.330 8 226 0
# ## Short-Run Regression Tables
collect_short_run_stats <- function(model, model_label, key_vars = NULL) {
  s <- summary(model)
  coefs <- s$coefficients
  
  out <- data.frame(
    model = model_label,
    n = length(resid(model)),
    R2 = s$r.squared,
    Adj_R2 = s$adj.r.squared,
    Resid_SE = s$sigma,
    F_stat = unname(s$fstatistic[1]),
    F_p = pf(
      unname(s$fstatistic[1]),
      unname(s$fstatistic[2]),
      unname(s$fstatistic[3]),
      lower.tail = FALSE
    )
  )
  
  if (!is.null(key_vars)) {
    for (v in key_vars) {
      out[[paste0(v, "_coef")]] <- if (v %in% rownames(coefs)) coefs[v, 1] else NA_real_
      out[[paste0(v, "_p")]]    <- if (v %in% rownames(coefs)) coefs[v, 4] else NA_real_
    }
  }
  
  out
}

short_run_table_basic <- rbind_fill(
  collect_short_run_stats(
    mod_dlog_baseline, "baseline",
    key_vars = c("d_log_treasury_gdp", "d_log_trade_balance", "d_log_min_wage_real")
  ),
  collect_short_run_stats(
    mod_dlog_fdi, "pathway_fdi",
    key_vars = c("d_log_fdi_outward_gdp")
  ),
  collect_short_run_stats(
    mod_dlog_imports, "pathway_imports",
    key_vars = c("d_log_imports_ind_real_gdp")
  ),
  collect_short_run_stats(
    mod_dlog_longrate, "pathway_longrate",
    key_vars = c("d_long_rate")
  ),
  collect_short_run_stats(
    mod_dlog_full_with_fdi, "full_with_fdi",
    key_vars = c("d_log_fdi_outward_gdp", "d_log_imports_ind_real_gdp", "d_long_rate")
  ),
  collect_short_run_stats(
    mod_dlog_full_no_fdi, "full_no_fdi",
    key_vars = c("d_log_imports_ind_real_gdp", "d_long_rate")
  )
)

short_run_table_pandemic <- rbind_fill(
  collect_short_run_stats(
    mod_dlog_fdi_pandemic,
    "fdi_pandemic",
    key_vars = c("d_log_fdi_outward_gdp", "pandemic_q1")
  ),
  collect_short_run_stats(
    mod_dlog_full_with_fdi_pandemic,
    "full_with_fdi_pandemic",
    key_vars = c("d_log_fdi_outward_gdp", "d_log_imports_ind_real_gdp", "d_long_rate", "pandemic_q1")
  ),
  collect_short_run_stats(
    mod_dlog_fdi_break,
    "fdi_break",
    key_vars = c("d_log_fdi_outward_gdp", "pandemic_q1", "D2000", "DT2000")
  )
)

make_pretty_table(short_run_table_basic, "SHORT-RUN DIFFERENCED MODELS - FIT AND KEY COEFFICIENTS")
SHORT-RUN DIFFERENCED MODELS - FIT AND KEY COEFFICIENTS
model n R2 Adj_R2 Resid_SE F_stat F_p d_log_treasury_gdp_coef d_log_treasury_gdp_p d_log_trade_balance_coef d_log_trade_balance_p d_log_min_wage_real_coef d_log_min_wage_real_p d_log_fdi_outward_gdp_coef d_log_fdi_outward_gdp_p d_log_imports_ind_real_gdp_coef d_log_imports_ind_real_gdp_p d_long_rate_coef d_long_rate_p
baseline 234 0.0154 0.0025 0.0069 1.1952 0.3123 0.0097 0.1971 -0.002 0.9022 -0.0237 0.179 NA NA NA NA NA NA
pathway_fdi 234 0.0602 0.0438 0.0068 3.6663 0.0065 NA NA NA NA NA NA 0.0171 0.0011 NA NA NA NA
pathway_imports 234 0.0240 0.0070 0.0069 1.4093 0.2317 NA NA NA NA NA NA NA NA -0.0078 0.1551 NA NA
pathway_longrate 234 0.0171 -0.0001 0.0069 0.9946 0.4113 NA NA NA NA NA NA NA NA NA NA -6e-04 0.5268
full_with_fdi 234 0.0723 0.0477 0.0068 2.9470 0.0087 NA NA NA NA NA NA 0.0178 0.0007 -0.0090 0.1069 -2e-04 0.8792
full_no_fdi 234 0.0244 0.0030 0.0069 1.1396 0.3402 NA NA NA NA NA NA NA NA -0.0074 0.1926 -3e-04 0.7729
make_pretty_table(short_run_table_pandemic, "SHORT-RUN PANDEMIC / BREAK MODELS - FIT AND KEY COEFFICIENTS")
SHORT-RUN PANDEMIC / BREAK MODELS - FIT AND KEY COEFFICIENTS
model n R2 Adj_R2 Resid_SE F_stat F_p d_log_fdi_outward_gdp_coef d_log_fdi_outward_gdp_p pandemic_q1_coef pandemic_q1_p d_log_imports_ind_real_gdp_coef d_log_imports_ind_real_gdp_p d_long_rate_coef d_long_rate_p D2000_coef D2000_p DT2000_coef DT2000_p
fdi_pandemic 234 0.0793 0.0591 0.0067 3.9281 0.0020 0.0149 0.0051 -0.0150 0.0306 NA NA NA NA NA NA NA NA
full_with_fdi_pandemic 234 0.0922 0.0640 0.0067 3.2778 0.0024 0.0154 0.0037 -0.0153 0.0270 -0.009 0.1028 -3e-04 0.7759 NA NA NA NA
fdi_break 234 0.0798 0.0513 0.0068 2.7985 0.0082 0.0148 0.0056 -0.0148 0.0349 NA NA NA NA 3e-04 0.8366 0 0.7392
# ## Short-Run Diagnostics Table
short_run_diag_table <- rbind(
  collect_diag_tests(mod_dlog_fdi, "mod_dlog_fdi"),
  collect_diag_tests(mod_dlog_full_with_fdi, "mod_dlog_full_with_fdi"),
  collect_diag_tests(mod_dlog_fdi_pandemic, "mod_dlog_fdi_pandemic"),
  collect_diag_tests(mod_dlog_full_with_fdi_pandemic, "mod_dlog_full_with_fdi_pandemic"),
  collect_diag_tests(mod_dlog_fdi_break, "mod_dlog_fdi_break")
)
rownames(short_run_diag_table) <- NULL

make_pretty_table(short_run_diag_table, "SHORT-RUN MODEL DIAGNOSTICS")
SHORT-RUN MODEL DIAGNOSTICS
model BG_p LjungBox_p BP_p WhiteFit_p RESET2_p RESET23_p
mod_dlog_fdi 0.5724 0.3458 0.5605 0.0000 0.7353 0.8377
mod_dlog_full_with_fdi 0.5761 0.3153 0.7066 0.0000 0.1670 0.0997
mod_dlog_fdi_pandemic 0.8281 0.3754 0.4630 0.0016 0.6625 0.9033
mod_dlog_full_with_fdi_pandemic 0.8045 0.3303 0.5737 0.0000 0.0993 0.0166
mod_dlog_fdi_break 0.8121 0.3675 0.0815 0.0047 0.7879 0.8701
# ## ECM Fit Table
collect_ecm_stats <- function(model, model_label, ect_name, extra_vars = NULL) {
  s <- summary(model)
  coefs <- s$coefficients
  
  out <- data.frame(
    model = model_label,
    n = length(resid(model)),
    R2 = s$r.squared,
    Adj_R2 = s$adj.r.squared,
    Resid_SE = s$sigma,
    F_stat = unname(s$fstatistic[1]),
    F_p = pf(
      unname(s$fstatistic[1]),
      unname(s$fstatistic[2]),
      unname(s$fstatistic[3]),
      lower.tail = FALSE
    ),
    ECT_coef = if (ect_name %in% rownames(coefs)) coefs[ect_name, 1] else NA_real_,
    ECT_p = if (ect_name %in% rownames(coefs)) coefs[ect_name, 4] else NA_real_,
    pandemic_coef = if ("pandemic_q1_d" %in% rownames(coefs)) coefs["pandemic_q1_d", 1] else NA_real_,
    pandemic_p = if ("pandemic_q1_d" %in% rownames(coefs)) coefs["pandemic_q1_d", 4] else NA_real_
  )
  
  if (!is.null(extra_vars)) {
    for (v in extra_vars) {
      out[[paste0(v, "_coef")]] <- if (v %in% rownames(coefs)) coefs[v, 1] else NA_real_
      out[[paste0(v, "_p")]]    <- if (v %in% rownames(coefs)) coefs[v, 4] else NA_real_
    }
  }
  
  out
}

ecm_fit_table <- rbind_fill(
  collect_ecm_stats(
    ecm_pathway1_break,
    "ecm_pathway1_break",
    "ect_pathway1_break_dd",
    extra_vars = c("d_log_imports_ind_real_gdp")
  ),
  collect_ecm_stats(
    ecm_pathway2_break,
    "ecm_pathway2_break",
    "ect_pathway2_break_dd",
    extra_vars = c("d_long_rate")
  ),
  collect_ecm_stats(
    ecm_optional_break,
    "ecm_optional_break",
    "ect_optional_break_dd",
    extra_vars = c("d_log_imports_ind_real_gdp", "d_long_rate")
  ),
  collect_ecm_stats(
    ecm_optional_breakFDI,
    "ecm_optional_breakFDI",
    "ect_optional_breakFDI_dd",
    extra_vars = c("d_log_imports_ind_real_gdp", "d_long_rate", "d_log_fdi_outward_gdp")
  )
)

make_pretty_table(ecm_fit_table, "ECM MODELS - FIT AND KEY COEFFICIENTS")
ECM MODELS - FIT AND KEY COEFFICIENTS
model n R2 Adj_R2 Resid_SE F_stat F_p ECT_coef ECT_p pandemic_coef pandemic_p d_log_imports_ind_real_gdp_coef d_log_imports_ind_real_gdp_p d_long_rate_coef d_long_rate_p d_log_fdi_outward_gdp_coef d_log_fdi_outward_gdp_p
ecm_pathway1_break 234 0.1507 0.1283 0.0065 6.7140 0.000 -0.1495 0.000 -0.0140 0.0341 -0.0081 0.1146 NA NA NA NA
ecm_pathway2_break 234 0.0937 0.0698 0.0067 3.9134 0.001 -0.0838 0.001 -0.0156 0.0224 NA NA -7e-04 0.4669 NA NA
ecm_optional_break 234 0.1558 0.1296 0.0065 5.9579 0.000 -0.1543 0.000 -0.0141 0.0332 -0.0064 0.2276 -6e-04 0.5000 NA NA
ecm_optional_breakFDI 234 0.1734 0.1440 0.0064 5.9003 0.000 -0.1427 0.000 -0.0116 0.0824 -0.0075 0.1592 -5e-04 0.5865 0.0112 0.0301
# ## ECM Diagnostics Table
ecm_test_table <- rbind(
  collect_diag_tests(ecm_pathway1_break, "ecm_pathway1_break"),
  collect_diag_tests(ecm_pathway2_break, "ecm_pathway2_break"),
  collect_diag_tests(ecm_optional_break, "ecm_optional_break"),
  collect_diag_tests(ecm_optional_breakFDI, "ecm_optional_breakFDI")
)
rownames(ecm_test_table) <- NULL

make_pretty_table(ecm_test_table, "ECM MODEL DIAGNOSTICS")
ECM MODEL DIAGNOSTICS
model BG_p LjungBox_p BP_p WhiteFit_p RESET2_p RESET23_p
ecm_pathway1_break 0.7717 0.6634 0.7964 0.1626 0.7817 0.8326
ecm_pathway2_break 0.8738 0.6228 0.7956 0.9249 0.3372 0.4511
ecm_optional_break 0.8361 0.7127 0.8663 0.1594 0.9689 0.7007
ecm_optional_breakFDI 0.8769 0.5594 0.6033 0.0006 0.4928 0.6231
# ## VAR Overview and Diagnostics Tables
collect_var_info <- function(var_obj, model_name) {
  roots_vals <- roots(var_obj)
  data.frame(
    model = model_name,
    n = var_obj$obs,
    K = var_obj$K,
    p = var_obj$p,
    max_root = max(Mod(roots_vals)),
    min_root = min(Mod(roots_vals))
  )
}

collect_var_tests <- function(var_obj, model_name) {
  serial_p <- serial.test(var_obj, lags.pt = 12, type = "PT.asymptotic")$serial$p.value
  arch_p <- arch.test(var_obj, lags.multi = 4)$arch.mul$p.value
  normality_p <- normality.test(var_obj)$jb.mul$JB$p.value
  
  data.frame(
    model = model_name,
    Serial_p = serial_p,
    ARCH_p = arch_p,
    Normality_p = normality_p,
    max_root = max(Mod(roots(var_obj)))
  )
}

var_overview_table <- rbind(
  collect_var_info(var_fdi, "var_fdi"),
  collect_var_info(var_no_fdi, "var_no_fdi")
)
rownames(var_overview_table) <- NULL

var_diag_table <- rbind(
  collect_var_tests(var_fdi, "var_fdi"),
  collect_var_tests(var_no_fdi, "var_no_fdi")
)
rownames(var_diag_table) <- NULL

make_pretty_table(var_overview_table, "VAR MODELS - OVERVIEW")
VAR MODELS - OVERVIEW
model n K p max_root min_root
var_fdi 232 2 2 0.3393 0.0553
var_no_fdi 232 3 2 0.4134 0.2952
make_pretty_table(var_diag_table, "VAR MODEL DIAGNOSTICS")
VAR MODEL DIAGNOSTICS
model Serial_p ARCH_p Normality_p max_root
var_fdi 0.1547 0.983 0 0.3393
var_no_fdi 0.0750 0.000 0 0.4134
# ## VAR Granger Tables
collect_granger_result <- function(var_obj, cause_var, model_name) {
  g <- causality(var_obj, cause = cause_var)
  
  data.frame(
    model = model_name,
    cause = cause_var,
    Granger_p = g$Granger$p.value,
    Instant_p = g$Instant$p.value
  )
}

var_fdi_granger_table <- rbind(
  collect_granger_result(var_fdi, "d_log_fdi_outward_gdp", "var_fdi"),
  collect_granger_result(var_fdi, "d_log_wage_gap", "var_fdi")
)
rownames(var_fdi_granger_table) <- NULL

var_no_fdi_granger_table <- rbind(
  collect_granger_result(var_no_fdi, "d_log_imports_ind_real_gdp", "var_no_fdi"),
  collect_granger_result(var_no_fdi, "d_long_rate", "var_no_fdi"),
  collect_granger_result(var_no_fdi, "d_log_wage_gap", "var_no_fdi")
)
rownames(var_no_fdi_granger_table) <- NULL

make_pretty_table(var_fdi_granger_table, "VAR WITH FDI - GRANGER CAUSALITY")
VAR WITH FDI - GRANGER CAUSALITY
model cause Granger_p Instant_p
var_fdi d_log_fdi_outward_gdp 0.3540 0.0066
var_fdi d_log_wage_gap 0.0059 0.0066
make_pretty_table(var_no_fdi_granger_table, "VAR WITHOUT FDI - GRANGER CAUSALITY")
VAR WITHOUT FDI - GRANGER CAUSALITY
model cause Granger_p Instant_p
var_no_fdi d_log_imports_ind_real_gdp 0.7000 0.0021
var_no_fdi d_long_rate 0.0388 0.0055
var_no_fdi d_log_wage_gap 0.0005 0.3147
# ## IRF Tables
collect_irf_table <- function(irf_obj, model_name, impulse_name, response_name) {
  data.frame(
    model = model_name,
    impulse = impulse_name,
    response = response_name,
    horizon = seq_along(irf_obj$irf[[1]]),
    irf = as.numeric(irf_obj$irf[[1]]),
    lower = as.numeric(irf_obj$Lower[[1]]),
    upper = as.numeric(irf_obj$Upper[[1]])
  )
}

irf_table_fdi_on_wage <- collect_irf_table(
  irf_fdi_on_wage,
  "var_fdi",
  "d_log_fdi_outward_gdp",
  "d_log_wage_gap"
)

irf_table_wage_on_fdi <- collect_irf_table(
  irf_wage_on_fdi,
  "var_fdi",
  "d_log_wage_gap",
  "d_log_fdi_outward_gdp"
)

irf_table_imports_on_wage <- collect_irf_table(
  irf_imports_on_wage,
  "var_no_fdi",
  "d_log_imports_ind_real_gdp",
  "d_log_wage_gap"
)

irf_table_longrate_on_wage <- collect_irf_table(
  irf_longrate_on_wage,
  "var_no_fdi",
  "d_long_rate",
  "d_log_wage_gap"
)

make_pretty_table(irf_table_fdi_on_wage, "IRF TABLE - FDI SHOCK ON WAGE GAP")
IRF TABLE - FDI SHOCK ON WAGE GAP
model impulse response horizon irf lower upper
var_fdi d_log_fdi_outward_gdp d_log_wage_gap 1 0e+00 0.0000 0e+00
var_fdi d_log_fdi_outward_gdp d_log_wage_gap 2 -6e-04 -0.0014 2e-04
var_fdi d_log_fdi_outward_gdp d_log_wage_gap 3 0e+00 -0.0010 8e-04
var_fdi d_log_fdi_outward_gdp d_log_wage_gap 4 0e+00 -0.0002 3e-04
var_fdi d_log_fdi_outward_gdp d_log_wage_gap 5 0e+00 -0.0001 1e-04
var_fdi d_log_fdi_outward_gdp d_log_wage_gap 6 0e+00 0.0000 1e-04
var_fdi d_log_fdi_outward_gdp d_log_wage_gap 7 0e+00 0.0000 0e+00
var_fdi d_log_fdi_outward_gdp d_log_wage_gap 8 0e+00 0.0000 0e+00
var_fdi d_log_fdi_outward_gdp d_log_wage_gap 9 0e+00 0.0000 0e+00
var_fdi d_log_fdi_outward_gdp d_log_wage_gap 10 0e+00 0.0000 0e+00
var_fdi d_log_fdi_outward_gdp d_log_wage_gap 11 0e+00 0.0000 0e+00
var_fdi d_log_fdi_outward_gdp d_log_wage_gap 12 0e+00 0.0000 0e+00
var_fdi d_log_fdi_outward_gdp d_log_wage_gap 13 0e+00 0.0000 0e+00
make_pretty_table(irf_table_wage_on_fdi, "IRF TABLE - WAGE GAP SHOCK ON FDI")
IRF TABLE - WAGE GAP SHOCK ON FDI
model impulse response horizon irf lower upper
var_fdi d_log_wage_gap d_log_fdi_outward_gdp 1 0.0151 0.0016 0.0284
var_fdi d_log_wage_gap d_log_fdi_outward_gdp 2 0.0086 -0.0018 0.0187
var_fdi d_log_wage_gap d_log_fdi_outward_gdp 3 0.0138 0.0028 0.0240
var_fdi d_log_wage_gap d_log_fdi_outward_gdp 4 -0.0024 -0.0070 0.0003
var_fdi d_log_wage_gap d_log_fdi_outward_gdp 5 0.0004 -0.0018 0.0037
var_fdi d_log_wage_gap d_log_fdi_outward_gdp 6 -0.0004 -0.0015 0.0009
var_fdi d_log_wage_gap d_log_fdi_outward_gdp 7 0.0001 -0.0001 0.0008
var_fdi d_log_wage_gap d_log_fdi_outward_gdp 8 0.0000 -0.0004 0.0001
var_fdi d_log_wage_gap d_log_fdi_outward_gdp 9 0.0000 -0.0001 0.0002
var_fdi d_log_wage_gap d_log_fdi_outward_gdp 10 0.0000 -0.0001 0.0000
var_fdi d_log_wage_gap d_log_fdi_outward_gdp 11 0.0000 0.0000 0.0000
var_fdi d_log_wage_gap d_log_fdi_outward_gdp 12 0.0000 0.0000 0.0000
var_fdi d_log_wage_gap d_log_fdi_outward_gdp 13 0.0000 0.0000 0.0000
make_pretty_table(irf_table_imports_on_wage, "IRF TABLE - IMPORTS SHOCK ON WAGE GAP")
IRF TABLE - IMPORTS SHOCK ON WAGE GAP
model impulse response horizon irf lower upper
var_no_fdi d_log_imports_ind_real_gdp d_log_wage_gap 1 0e+00 0.0000 0e+00
var_no_fdi d_log_imports_ind_real_gdp d_log_wage_gap 2 -2e-04 -0.0010 6e-04
var_no_fdi d_log_imports_ind_real_gdp d_log_wage_gap 3 -7e-04 -0.0013 2e-04
var_no_fdi d_log_imports_ind_real_gdp d_log_wage_gap 4 -1e-04 -0.0003 1e-04
var_no_fdi d_log_imports_ind_real_gdp d_log_wage_gap 5 -1e-04 -0.0003 1e-04
var_no_fdi d_log_imports_ind_real_gdp d_log_wage_gap 6 0e+00 0.0000 1e-04
var_no_fdi d_log_imports_ind_real_gdp d_log_wage_gap 7 0e+00 0.0000 1e-04
var_no_fdi d_log_imports_ind_real_gdp d_log_wage_gap 8 0e+00 0.0000 0e+00
var_no_fdi d_log_imports_ind_real_gdp d_log_wage_gap 9 0e+00 0.0000 0e+00
var_no_fdi d_log_imports_ind_real_gdp d_log_wage_gap 10 0e+00 0.0000 0e+00
var_no_fdi d_log_imports_ind_real_gdp d_log_wage_gap 11 0e+00 0.0000 0e+00
var_no_fdi d_log_imports_ind_real_gdp d_log_wage_gap 12 0e+00 0.0000 0e+00
var_no_fdi d_log_imports_ind_real_gdp d_log_wage_gap 13 0e+00 0.0000 0e+00
make_pretty_table(irf_table_longrate_on_wage, "IRF TABLE - LONG RATE SHOCK ON WAGE GAP")
IRF TABLE - LONG RATE SHOCK ON WAGE GAP
model impulse response horizon irf lower upper
var_no_fdi d_long_rate d_log_wage_gap 1 0e+00 0.0000 0e+00
var_no_fdi d_long_rate d_log_wage_gap 2 -8e-04 -0.0017 1e-04
var_no_fdi d_long_rate d_log_wage_gap 3 -4e-04 -0.0010 3e-04
var_no_fdi d_long_rate d_log_wage_gap 4 -2e-04 -0.0003 1e-04
var_no_fdi d_long_rate d_log_wage_gap 5 0e+00 -0.0001 2e-04
var_no_fdi d_long_rate d_log_wage_gap 6 0e+00 0.0000 1e-04
var_no_fdi d_long_rate d_log_wage_gap 7 0e+00 0.0000 1e-04
var_no_fdi d_long_rate d_log_wage_gap 8 0e+00 0.0000 0e+00
var_no_fdi d_long_rate d_log_wage_gap 9 0e+00 0.0000 0e+00
var_no_fdi d_long_rate d_log_wage_gap 10 0e+00 0.0000 0e+00
var_no_fdi d_long_rate d_log_wage_gap 11 0e+00 0.0000 0e+00
var_no_fdi d_long_rate d_log_wage_gap 12 0e+00 0.0000 0e+00
var_no_fdi d_long_rate d_log_wage_gap 13 0e+00 0.0000 0e+00