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
|