`
load("USA_data.RData")
attach(USA_data)
Imp <- read.csv("IMPGS.csv")
Ex <- read.csv("EXPGS.csv")
X<-ts(Ex$EXPGS, start= 1948, frequency=4)
M<-ts(Imp$IMPGS, start= 1948, frequency=4)
start_date <- as.Date("1951-10-01")
trade_balance<-(X-M)
log_trade_balance<-log(X/M)
read_to_ts <- function(file) {
x <- read.csv(file, stringsAsFactors = FALSE)
date_col <- names(x)[1]
value_col <- names(x)[2]
x[[date_col]] <- as.Date(x[[date_col]])
x[[value_col]] <- as.numeric(x[[value_col]])
x <- x[!is.na(x[[date_col]]) & !is.na(x[[value_col]]), ]
# always drop observations before 1951-10-01
x <- x[x[[date_col]] >= start_date, ]
# if nothing remains, stop
if (nrow(x) == 0) {
stop(paste("No observations on or after", start_date, "in file", file))
}
first_date <- min(x[[date_col]])
start_year <- as.integer(format(first_date, "%Y"))
start_month <- as.integer(format(first_date, "%m"))
start_quarter <- (start_month - 1) %/% 3 + 1
ts(
x[[value_col]],
start = c(start_year, start_quarter),
frequency = 4
)
}
treasury <- read_to_ts("BOGZ1FL263061130Q.csv")
fdi_outward <- read_to_ts("BOGZ1FL263192141Q.csv")
trade_balance <- read_to_ts("NETEXP.csv")
imports_ind <- read_to_ts("LA0000041Q027SBEA.csv")
gdp_deflator <- read_to_ts("GDPDEF.csv")
gdp <- read_to_ts("GDP.csv")
real_gdp <- read_to_ts("GDPC1.csv")
min_wage <- read_to_ts("FEDMINNFRWG.csv")
long_rate <- read_to_ts("DGS10.csv")
ppg <- read.csv("PPG.csv", stringsAsFactors = FALSE, check.names = FALSE)
names(ppg) <- trimws(names(ppg))
ppg[[1]] <- trimws(ppg[[1]])
ppg[[2]] <- suppressWarnings(as.numeric(ppg[[2]]))
ppg[[3]] <- suppressWarnings(as.numeric(ppg[[3]]))
ppg <- ppg[grepl("^[0-9]{4}q[1-4]$", ppg[[1]]), ]
year <- as.numeric(substr(ppg[[1]], 1, 4))
quarter <- as.numeric(substr(ppg[[1]], 6, 6))
prod <- ts(ppg[[2]], start = c(year[1], quarter[1]), frequency = 4)
pay <- ts(ppg[[3]], start = c(year[1], quarter[1]), frequency = 4)
wage_gap <- prod / pay
plot(wage_gap)
start_all <- c(1967, 1)
end_all <- c(2025, 3)
treasury <- window(treasury, start = start_all, end = end_all)
fdi_outward <- window(fdi_outward, start = start_all, end = end_all)
trade_balance <- window(trade_balance, start = start_all, end = end_all)
imports_ind <- window(imports_ind, start = start_all, end = end_all)
gdp_deflator <- window(gdp_deflator, start = start_all, end = end_all)
gdp <- window(gdp, start = start_all, end = end_all)
real_gdp <- window(real_gdp, start = start_all, end = end_all)
min_wage <- window(min_wage, start = start_all, end = end_all)
long_rate <- window(long_rate, start = start_all, end = end_all)
wage_gap <- window(wage_gap, start = start_all, end = end_all)
log_trade_balance <- window(log_trade_balance, start = start_all, end = end_all)
start(treasury); end(treasury)
## [1] 1967 1
## [1] 2025 3
start(fdi_outward); end(fdi_outward)
## [1] 1967 1
## [1] 2025 3
start(trade_balance); end(trade_balance)
## [1] 1967 1
## [1] 2025 3
start(imports_ind); end(imports_ind)
## [1] 1967 1
## [1] 2025 3
start(gdp_deflator); end(gdp_deflator)
## [1] 1967 1
## [1] 2025 3
start(gdp); end(gdp)
## [1] 1967 1
## [1] 2025 3
start(real_gdp); end(real_gdp)
## [1] 1967 1
## [1] 2025 3
start(min_wage); end(min_wage)
## [1] 1967 1
## [1] 2025 3
start(long_rate); end(long_rate)
## [1] 1967 1
## [1] 2025 3
start(wage_gap); end(wage_gap)
## [1] 1967 1
## [1] 2025 3
##Scaling
treasury_gdp <- treasury / gdp
fdi_outward_gdp <- fdi_outward / gdp
trade_deficit_gdp <- -trade_balance / gdp
imports_ind_real_gdp <- imports_ind / real_gdp
min_wage_real <- min_wage / gdp_deflator
long_rate <- long_rate
wage_gap <- wage_gap
log_treasury_gdp <- log(treasury_gdp)
log_fdi_outward_gdp <- log(fdi_outward_gdp)
log_trade_balance <- log_trade_balance
log_imports_ind_real_gdp <- log(imports_ind_real_gdp)
log_min_wage_real <- log(min_wage_real)
log_long_rate <- log(long_rate)
log_wage_gap <- log(wage_gap)
d_log_treasury_gdp <- diff(log_treasury_gdp)
d_log_fdi_outward_gdp <- diff(log_fdi_outward_gdp)
d_log_trade_balance <- diff(log_trade_balance)
d_log_imports_ind_real_gdp <- diff(log_imports_ind_real_gdp)
d_log_min_wage_real <- diff(log_min_wage_real)
d_log_long_rate <- diff(log_long_rate)
d_log_wage_gap <- diff(log_wage_gap)
##Plot
par(mfrow = c(1, 2))
plot(treasury_gdp, main = "Treasury Holdings / GDP")
plot(trade_deficit_gdp, main = "Trade Deficit / GDP")
plot(fdi_outward_gdp, main = "Outward FDI / GDP")
plot(imports_ind_real_gdp, main = "Industrial Imports / Real GDP")
plot(min_wage_real, main = "Real Minimum Wage")
plot(long_rate, main = "Long-Term Interest Rate")
# separate plot for dependent variable
par(mfrow = c(1,1))
plot(wage_gap, main = "Wage Gap")
## Log Plot
par(mfrow = c(1, 2))
plot(log_treasury_gdp, main = "Log Treasury Holdings / GDP")
plot(log_trade_balance, main = "Log Trade Balance Measure")
plot(log_fdi_outward_gdp, main = "Log Outward FDI / GDP")
plot(log_imports_ind_real_gdp, main = "Log Industrial Imports / Real GDP")
plot(log_min_wage_real, main = "Log Real Minimum Wage")
plot(log_long_rate, main = "Log Long-Term Interest Rate")
# separate plot for dependent variable
par(mfrow = c(1,1))
plot(log_wage_gap, main = "Log Wage Gap")
##Dlog PLot
par(mfrow = c(1, 2))
plot(d_log_treasury_gdp, main = "D Log Treasury Holdings / GDP")
plot(d_log_trade_balance, main = "D Log Trade Balance Measure")
plot(d_log_fdi_outward_gdp, main = "D Log Outward FDI / GDP")
plot(d_log_imports_ind_real_gdp, main = "D Log Industrial Imports / Real GDP")
plot(d_log_min_wage_real, main = "D Log Real Minimum Wage")
plot(d_log_long_rate, main = "D Log Long-Term Interest Rate")
# separate plot for dependent variable
par(mfrow = c(1,1))
plot(d_log_wage_gap, main = "D Log Wage Gap")
par(mfrow = c(1, 2))
acf(treasury_gdp, main = "ACF: Treasury / GDP")
acf(trade_deficit_gdp, main = "ACF: Trade Deficit / GDP")
acf(fdi_outward_gdp, main = "ACF: Outward FDI / GDP")
acf(imports_ind_real_gdp, main = "ACF: Industrial Imports / Real GDP")
acf(min_wage_real, main = "ACF: Real Minimum Wage")
acf(long_rate, main = "ACF: Long-Term Interest Rate")
par(mfrow = c(1,1))
acf(wage_gap, main = "ACF: Wage Gap")
par(mfrow = c(1, 2))
pacf(treasury_gdp, main = "ACF: Treasury / GDP")
pacf(trade_deficit_gdp, main = "ACF: Trade Deficit / GDP")
pacf(fdi_outward_gdp, main = "ACF: Outward FDI / GDP")
pacf(imports_ind_real_gdp, main = "ACF: Industrial Imports / Real GDP")
pacf(min_wage_real, main = "ACF: Real Minimum Wage")
pacf(long_rate, main = "ACF: Long-Term Interest Rate")
par(mfrow = c(1,1))
pacf(wage_gap, main = "ACF: Wage Gap")
#every one of the correlograms shows slow decay, which suggests high persistence and possible unit-root behavior. A formal conclusion requires a DF/ADF unit-root test
par(mfrow = c(1, 2))
acf(log_treasury_gdp, main = "ACF: Log Treasury / GDP")
acf(log_trade_balance, main = "ACF: Log Trade Balance Measure")
acf(log_fdi_outward_gdp, main = "ACF: Log Outward FDI / GDP")
acf(log_imports_ind_real_gdp, main = "ACF: Log Industrial Imports / Real GDP")
acf(log_min_wage_real, main = "ACF: Log Real Minimum Wage")
acf(log_long_rate, main = "ACF: Log Long-Term Interest Rate")
par(mfrow = c(1,1))
acf(log_wage_gap, main = "ACF: Log Wage Gap")
par(mfrow = c(1, 2))
pacf(log_treasury_gdp, main = "PACF: Log Treasury / GDP")
pacf(log_trade_balance, main = "PACF: Log Trade Balance Measure")
pacf(log_fdi_outward_gdp, main = "PACF: Log Outward FDI / GDP")
pacf(log_imports_ind_real_gdp, main = "PACF: Log Industrial Imports / Real GDP")
pacf(log_min_wage_real, main = "PACF: Log Real Minimum Wage")
pacf(log_long_rate, main = "PACF: Log Long-Term Interest Rate")
par(mfrow = c(1,1))
pacf(log_wage_gap, main = "PACF: Log Wage Gap")
##Dlog ACf
par(mfrow = c(1, 2))
acf(d_log_treasury_gdp, main = "ACF: D Log Treasury / GDP")
acf(d_log_trade_balance, main = "ACF: D Log Trade Balance Measure")
acf(d_log_fdi_outward_gdp, main = "ACF: D Log Outward FDI / GDP")
acf(d_log_imports_ind_real_gdp, main = "ACF: D Log Industrial Imports / Real GDP")
acf(d_log_min_wage_real, main = "ACF: D Log Real Minimum Wage")
acf(d_log_long_rate, main = "ACF: D Log Long-Term Interest Rate")
par(mfrow = c(1,1))
acf(d_log_wage_gap, main = "ACF: D Log Wage Gap")
par(mfrow = c(1, 2))
pacf(d_log_treasury_gdp, main = "PACF: D Log Treasury / GDP")
pacf(d_log_trade_balance, main = "PACF: D Log Trade Balance Measure")
pacf(d_log_fdi_outward_gdp, main = "PACF: D Log Outward FDI / GDP")
pacf(d_log_imports_ind_real_gdp, main = "PACF: D Log Industrial Imports / Real GDP")
pacf(d_log_min_wage_real, main = "PACF: D Log Real Minimum Wage")
pacf(d_log_long_rate, main = "PACF: D Log Long-Term Interest Rate")
par(mfrow = c(1,1))
pacf(d_log_wage_gap, main = "PACF: D Log Wage Gap")
# =========================
# ADF LAG-LENGTH TABLES
# =========================
library(urca)
# choose max lag to inspect
max_lag <- 8 # quarterly data: 4 or 8 are common choices
# helper function
make_adf_table <- function(series, series_name, type_adf = c("trend", "drift"), max_lag = 8) {
type_adf <- match.arg(type_adf)
y <- na.omit(as.numeric(series))
out <- data.frame(
series = character(),
type = character(),
lag = integer(),
tau_stat = numeric(),
AIC = numeric(),
BIC = numeric(),
stringsAsFactors = FALSE
)
for (L in 0:max_lag) {
fit <- ur.df(y, type = type_adf, lags = L, selectlags = "Fixed")
tau_stat <- as.numeric(fit@teststat[1])
# rebuild regression manually from residuals (safe workaround)
res <- residuals(fit@testreg)
n <- length(res)
k <- length(coef(fit@testreg))
sigma2 <- sum(res^2) / n
logLik_val <- -n/2 * (log(2*pi) + log(sigma2) + 1)
AIC_val <- -2*logLik_val + 2*k
BIC_val <- -2*logLik_val + log(n)*k
out <- rbind(
out,
data.frame(
series = series_name,
type = type_adf,
lag = L,
tau_stat = tau_stat,
AIC = AIC_val,
BIC = BIC_val,
stringsAsFactors = FALSE
)
)
}
out
}
# -------------------------
# BUILD TABLES
# -------------------------
tab_wage_gap <- make_adf_table(wage_gap, "wage_gap", "trend", max_lag)
tab_treasury <- make_adf_table(treasury_gdp, "treasury_gdp", "trend", max_lag)
tab_trade <- make_adf_table(trade_deficit_gdp, "trade_deficit_gdp", "trend", max_lag)
tab_fdi <- make_adf_table(fdi_outward_gdp, "fdi_outward_gdp", "trend", max_lag)
tab_imports <- make_adf_table(imports_ind_real_gdp, "imports_ind_real_gdp", "trend", max_lag)
tab_minwage <- make_adf_table(min_wage_real, "min_wage_real", "trend", max_lag)
tab_longrate <- make_adf_table(long_rate, "long_rate", "trend", max_lag)
# combine all into one big table
adf_lag_table <- rbind(
tab_wage_gap,
tab_treasury,
tab_trade,
tab_fdi,
tab_imports,
tab_minwage,
tab_longrate
)
# view full table
adf_lag_table
## series type lag tau_stat AIC BIC
## 1 wage_gap trend 0 -2.7570671 -1508.5606 -1467.0968
## 2 wage_gap trend 1 -2.4822763 -1494.5787 -1439.3621
## 3 wage_gap trend 2 -2.5015532 -1479.5305 -1410.5958
## 4 wage_gap trend 3 -2.4518297 -1463.9835 -1381.3655
## 5 wage_gap trend 4 -2.4807530 -1450.7254 -1354.4591
## 6 wage_gap trend 5 -2.5487149 -1435.7025 -1325.8234
## 7 wage_gap trend 6 -2.5227045 -1420.7702 -1297.3138
## 8 wage_gap trend 7 -2.3473963 -1405.7865 -1268.7885
## 9 wage_gap trend 8 -2.1042924 -1391.7888 -1241.2853
## 10 treasury_gdp trend 0 0.1365410 -1885.5109 -1844.0471
## 11 treasury_gdp trend 1 -0.5478753 -1905.5294 -1850.3128
## 12 treasury_gdp trend 2 -0.7890855 -1892.7755 -1823.8408
## 13 treasury_gdp trend 3 -1.3553099 -1891.7857 -1809.1677
## 14 treasury_gdp trend 4 -1.7103327 -1882.2027 -1785.9365
## 15 treasury_gdp trend 5 -1.7473057 -1865.3189 -1755.4398
## 16 treasury_gdp trend 6 -1.7150523 -1847.9130 -1724.4566
## 17 treasury_gdp trend 7 -1.9353786 -1832.6533 -1695.6553
## 18 treasury_gdp trend 8 -1.7990972 -1815.5498 -1665.0462
## 19 trade_deficit_gdp trend 0 -1.7832215 -2022.9161 -1981.4523
## 20 trade_deficit_gdp trend 1 -2.1568217 -2011.7446 -1956.5280
## 21 trade_deficit_gdp trend 2 -1.9839331 -1994.9021 -1925.9673
## 22 trade_deficit_gdp trend 3 -2.0596669 -1977.6879 -1895.0699
## 23 trade_deficit_gdp trend 4 -1.8499342 -1961.2542 -1864.9880
## 24 trade_deficit_gdp trend 5 -1.7824518 -1943.7742 -1833.8951
## 25 trade_deficit_gdp trend 6 -1.9937341 -1928.4523 -1804.9959
## 26 trade_deficit_gdp trend 7 -2.1523792 -1912.0907 -1775.0927
## 27 trade_deficit_gdp trend 8 -2.0759985 -1894.3540 -1743.8505
## 28 fdi_outward_gdp trend 0 -3.8745228 -1216.8683 -1175.4045
## 29 fdi_outward_gdp trend 1 -3.9051151 -1203.0267 -1147.8101
## 30 fdi_outward_gdp trend 2 -4.2029625 -1191.5900 -1122.6552
## 31 fdi_outward_gdp trend 3 -3.9047922 -1177.9087 -1095.2906
## 32 fdi_outward_gdp trend 4 -3.7429086 -1163.7040 -1067.4378
## 33 fdi_outward_gdp trend 5 -4.0111449 -1151.9735 -1042.0944
## 34 fdi_outward_gdp trend 6 -3.6365507 -1138.9931 -1015.5367
## 35 fdi_outward_gdp trend 7 -3.2732670 -1126.8173 -989.8193
## 36 fdi_outward_gdp trend 8 -2.9406965 -1114.6101 -964.1066
## 37 imports_ind_real_gdp trend 0 -2.0669909 -2221.4416 -2179.9778
## 38 imports_ind_real_gdp trend 1 -3.4170431 -2246.1708 -2190.9542
## 39 imports_ind_real_gdp trend 2 -2.7129905 -2235.0666 -2166.1319
## 40 imports_ind_real_gdp trend 3 -2.7452659 -2216.5180 -2133.8999
## 41 imports_ind_real_gdp trend 4 -2.1750823 -2205.0220 -2108.7557
## 42 imports_ind_real_gdp trend 5 -2.3500078 -2187.7172 -2077.8381
## 43 imports_ind_real_gdp trend 6 -2.2639281 -2168.9548 -2045.4983
## 44 imports_ind_real_gdp trend 7 -2.1339925 -2150.3726 -2013.3746
## 45 imports_ind_real_gdp trend 8 -1.8351947 -2134.2289 -1983.7254
## 46 min_wage_real trend 0 -1.9474847 -2261.5597 -2220.0959
## 47 min_wage_real trend 1 -1.9533282 -2244.8119 -2189.5952
## 48 min_wage_real trend 2 -1.7413039 -2227.3488 -2158.4140
## 49 min_wage_real trend 3 -1.6808078 -2208.6825 -2126.0645
## 50 min_wage_real trend 4 -3.0574355 -2249.8385 -2153.5723
## 51 min_wage_real trend 5 -2.8240550 -2234.9761 -2125.0970
## 52 min_wage_real trend 6 -2.8897321 -2216.3938 -2092.9373
## 53 min_wage_real trend 7 -2.9857376 -2198.1344 -2061.1364
## 54 min_wage_real trend 8 -3.1007406 -2184.9929 -2034.4893
## 55 long_rate trend 0 -2.5048399 339.9844 381.4482
## 56 long_rate trend 1 -2.8036467 332.1495 387.3661
## 57 long_rate trend 2 -2.5975814 338.9532 407.8879
## 58 long_rate trend 3 -2.7629606 341.3623 423.9803
## 59 long_rate trend 4 -2.7532480 348.3269 444.5931
## 60 long_rate trend 5 -2.5205220 352.7278 462.6069
## 61 long_rate trend 6 -2.6795306 358.9543 482.4108
## 62 long_rate trend 7 -2.3555680 362.0712 499.0692
## 63 long_rate trend 8 -2.3192611 368.8120 519.3155
# -------------------------
# BEST LAG BY AIC
# -------------------------
best_by_AIC <- do.call(
rbind,
lapply(split(adf_lag_table, adf_lag_table$series), function(x) x[which.min(x$AIC), ])
)
best_by_AIC
## series type lag tau_stat AIC
## fdi_outward_gdp fdi_outward_gdp trend 0 -3.8745228 -1216.8683
## imports_ind_real_gdp imports_ind_real_gdp trend 1 -3.4170431 -2246.1708
## long_rate long_rate trend 1 -2.8036467 332.1495
## min_wage_real min_wage_real trend 0 -1.9474847 -2261.5597
## trade_deficit_gdp trade_deficit_gdp trend 0 -1.7832215 -2022.9161
## treasury_gdp treasury_gdp trend 1 -0.5478753 -1905.5294
## wage_gap wage_gap trend 0 -2.7570671 -1508.5606
## BIC
## fdi_outward_gdp -1175.4045
## imports_ind_real_gdp -2190.9542
## long_rate 387.3661
## min_wage_real -2220.0959
## trade_deficit_gdp -1981.4523
## treasury_gdp -1850.3128
## wage_gap -1467.0968
# -------------------------
# BEST LAG BY BIC
# -------------------------
best_by_BIC <- do.call(
rbind,
lapply(split(adf_lag_table, adf_lag_table$series), function(x) x[which.min(x$BIC), ])
)
best_by_BIC
## series type lag tau_stat AIC
## fdi_outward_gdp fdi_outward_gdp trend 0 -3.8745228 -1216.8683
## imports_ind_real_gdp imports_ind_real_gdp trend 1 -3.4170431 -2246.1708
## long_rate long_rate trend 0 -2.5048399 339.9844
## min_wage_real min_wage_real trend 0 -1.9474847 -2261.5597
## trade_deficit_gdp trade_deficit_gdp trend 0 -1.7832215 -2022.9161
## treasury_gdp treasury_gdp trend 1 -0.5478753 -1905.5294
## wage_gap wage_gap trend 0 -2.7570671 -1508.5606
## BIC
## fdi_outward_gdp -1175.4045
## imports_ind_real_gdp -2190.9542
## long_rate 381.4482
## min_wage_real -2220.0959
## trade_deficit_gdp -1981.4523
## treasury_gdp -1850.3128
## wage_gap -1467.0968
##ADF Logged
# =========================
# ADF LAG-LENGTH TABLES (LOGGED VARIABLES)
# =========================
library(urca)
# choose max lag to inspect
max_lag <- 8 # quarterly data: 4 or 8 are common choices
# helper function
make_adf_table <- function(series, series_name, type_adf = c("trend", "drift"), max_lag = 8) {
type_adf <- match.arg(type_adf)
y <- na.omit(as.numeric(series))
out <- data.frame(
series = character(),
type = character(),
lag = integer(),
tau_stat = numeric(),
AIC = numeric(),
BIC = numeric(),
stringsAsFactors = FALSE
)
for (L in 0:max_lag) {
fit <- ur.df(y, type = type_adf, lags = L, selectlags = "Fixed")
tau_stat <- as.numeric(fit@teststat[1])
# rebuild regression manually from residuals (safe workaround)
res <- residuals(fit@testreg)
n <- length(res)
k <- length(coef(fit@testreg))
sigma2 <- sum(res^2) / n
logLik_val <- -n/2 * (log(2*pi) + log(sigma2) + 1)
AIC_val <- -2*logLik_val + 2*k
BIC_val <- -2*logLik_val + log(n)*k
out <- rbind(
out,
data.frame(
series = series_name,
type = type_adf,
lag = L,
tau_stat = tau_stat,
AIC = AIC_val,
BIC = BIC_val,
stringsAsFactors = FALSE
)
)
}
out
}
# -------------------------
# BUILD TABLES
# -------------------------
tab_log_wage_gap <- make_adf_table(log_wage_gap, "log_wage_gap", "trend", max_lag)
tab_log_treasury <- make_adf_table(log_treasury_gdp, "log_treasury_gdp", "trend", max_lag)
tab_log_trade <- make_adf_table(log_trade_balance, "log_trade_balance", "trend", max_lag)
tab_log_fdi <- make_adf_table(log_fdi_outward_gdp, "log_fdi_outward_gdp", "trend", max_lag)
tab_log_imports <- make_adf_table(log_imports_ind_real_gdp, "log_imports_ind_real_gdp", "trend", max_lag)
tab_log_minwage <- make_adf_table(log_min_wage_real, "log_min_wage_real", "trend", max_lag)
tab_log_longrate <- make_adf_table(log_long_rate, "log_long_rate", "trend", max_lag)
# combine all into one big table
adf_lag_table_log <- rbind(
tab_log_wage_gap,
tab_log_treasury,
tab_log_trade,
tab_log_fdi,
tab_log_imports,
tab_log_minwage,
tab_log_longrate
)
# view full table
adf_lag_table_log
## series type lag tau_stat AIC BIC
## 1 log_wage_gap trend 0 -2.152795 -1644.5272 -1603.0634
## 2 log_wage_gap trend 1 -1.915729 -1630.0405 -1574.8239
## 3 log_wage_gap trend 2 -2.032812 -1615.4071 -1546.4724
## 4 log_wage_gap trend 3 -1.895498 -1599.6429 -1517.0248
## 5 log_wage_gap trend 4 -1.879968 -1586.4856 -1490.2194
## 6 log_wage_gap trend 5 -1.851018 -1570.6030 -1460.7239
## 7 log_wage_gap trend 6 -1.801257 -1555.5103 -1432.0539
## 8 log_wage_gap trend 7 -1.606959 -1540.9641 -1403.9661
## 9 log_wage_gap trend 8 -1.444827 -1526.2226 -1375.7191
## 10 log_treasury_gdp trend 0 -0.877057 -632.1951 -590.7313
## 11 log_treasury_gdp trend 1 -1.487884 -639.5084 -584.2918
## 12 log_treasury_gdp trend 2 -1.782800 -632.2816 -563.3468
## 13 log_treasury_gdp trend 3 -2.572763 -644.7672 -562.1492
## 14 log_treasury_gdp trend 4 -3.119296 -644.0367 -547.7705
## 15 log_treasury_gdp trend 5 -3.045354 -648.9133 -539.0342
## 16 log_treasury_gdp trend 6 -2.943507 -636.9720 -513.5156
## 17 log_treasury_gdp trend 7 -2.393376 -628.8569 -491.8589
## 18 log_treasury_gdp trend 8 -2.497627 -623.3850 -472.8815
## 19 log_trade_balance trend 0 -2.110058 -987.0529 -945.5890
## 20 log_trade_balance trend 1 -2.461645 -980.3904 -925.1738
## 21 log_trade_balance trend 2 -2.226866 -969.9012 -900.9665
## 22 log_trade_balance trend 3 -2.436603 -959.7117 -877.0937
## 23 log_trade_balance trend 4 -2.381440 -946.7807 -850.5145
## 24 log_trade_balance trend 5 -2.336825 -933.4958 -823.6167
## 25 log_trade_balance trend 6 -2.654626 -926.9172 -803.4607
## 26 log_trade_balance trend 7 -2.786191 -915.8556 -778.8576
## 27 log_trade_balance trend 8 -2.638566 -902.7240 -752.2205
## 28 log_fdi_outward_gdp trend 0 -3.451794 -474.7437 -433.2799
## 29 log_fdi_outward_gdp trend 1 -3.387438 -463.6518 -408.4352
## 30 log_fdi_outward_gdp trend 2 -3.462563 -453.1305 -384.1958
## 31 log_fdi_outward_gdp trend 3 -3.225247 -442.5004 -359.8824
## 32 log_fdi_outward_gdp trend 4 -3.365638 -432.5517 -336.2855
## 33 log_fdi_outward_gdp trend 5 -3.424761 -421.9654 -312.0863
## 34 log_fdi_outward_gdp trend 6 -3.258453 -410.9269 -287.4704
## 35 log_fdi_outward_gdp trend 7 -2.957231 -400.9779 -263.9799
## 36 log_fdi_outward_gdp trend 8 -2.976957 -390.1059 -239.6024
## 37 log_imports_ind_real_gdp trend 0 -1.777954 -479.4511 -437.9873
## 38 log_imports_ind_real_gdp trend 1 -2.323239 -484.6957 -429.4791
## 39 log_imports_ind_real_gdp trend 2 -2.425845 -475.2361 -406.3013
## 40 log_imports_ind_real_gdp trend 3 -2.251132 -465.6324 -383.0144
## 41 log_imports_ind_real_gdp trend 4 -1.903878 -460.6499 -364.3837
## 42 log_imports_ind_real_gdp trend 5 -1.954196 -450.7028 -340.8237
## 43 log_imports_ind_real_gdp trend 6 -2.204074 -442.7818 -319.3254
## 44 log_imports_ind_real_gdp trend 7 -2.110196 -432.6514 -295.6534
## 45 log_imports_ind_real_gdp trend 8 -2.322061 -429.6479 -279.1444
## 46 log_min_wage_real trend 0 -1.814923 -1027.1857 -985.7219
## 47 log_min_wage_real trend 1 -1.817592 -1015.3303 -960.1137
## 48 log_min_wage_real trend 2 -1.628005 -1002.8295 -933.8947
## 49 log_min_wage_real trend 3 -1.588228 -989.4126 -906.7946
## 50 log_min_wage_real trend 4 -2.926927 -1031.2886 -935.0224
## 51 log_min_wage_real trend 5 -2.706675 -1020.2860 -910.4069
## 52 log_min_wage_real trend 6 -2.764631 -1006.9439 -883.4874
## 53 log_min_wage_real trend 7 -2.860411 -993.9505 -856.9525
## 54 log_min_wage_real trend 8 -2.930262 -984.1421 -833.6386
## 55 log_long_rate trend 0 -2.553984 -357.4551 -315.9913
## 56 log_long_rate trend 1 -3.272950 -373.5768 -318.3602
## 57 log_long_rate trend 2 -2.767409 -367.8754 -298.9406
## 58 log_long_rate trend 3 -2.857832 -358.4412 -275.8232
## 59 log_long_rate trend 4 -3.060612 -349.4439 -253.1777
## 60 log_long_rate trend 5 -3.163618 -339.6914 -229.8123
## 61 log_long_rate trend 6 -3.193413 -330.4749 -207.0185
## 62 log_long_rate trend 7 -2.817786 -321.5077 -184.5097
## 63 log_long_rate trend 8 -2.500949 -313.5662 -163.0627
# -------------------------
# BEST LAG BY AIC
# -------------------------
best_by_AIC_log <- do.call(
rbind,
lapply(split(adf_lag_table_log, adf_lag_table_log$series), function(x) x[which.min(x$AIC), ])
)
best_by_AIC_log
## series type lag tau_stat
## log_fdi_outward_gdp log_fdi_outward_gdp trend 0 -3.451794
## log_imports_ind_real_gdp log_imports_ind_real_gdp trend 1 -2.323239
## log_long_rate log_long_rate trend 1 -3.272950
## log_min_wage_real log_min_wage_real trend 4 -2.926927
## log_trade_balance log_trade_balance trend 0 -2.110058
## log_treasury_gdp log_treasury_gdp trend 5 -3.045354
## log_wage_gap log_wage_gap trend 0 -2.152795
## AIC BIC
## log_fdi_outward_gdp -474.7437 -433.2799
## log_imports_ind_real_gdp -484.6957 -429.4791
## log_long_rate -373.5768 -318.3602
## log_min_wage_real -1031.2886 -935.0224
## log_trade_balance -987.0529 -945.5890
## log_treasury_gdp -648.9133 -539.0342
## log_wage_gap -1644.5272 -1603.0634
# -------------------------
# BEST LAG BY BIC
# -------------------------
best_by_BIC_log <- do.call(
rbind,
lapply(split(adf_lag_table_log, adf_lag_table_log$series), function(x) x[which.min(x$BIC), ])
)
best_by_BIC_log
## series type lag tau_stat
## log_fdi_outward_gdp log_fdi_outward_gdp trend 0 -3.451794
## log_imports_ind_real_gdp log_imports_ind_real_gdp trend 0 -1.777954
## log_long_rate log_long_rate trend 1 -3.272950
## log_min_wage_real log_min_wage_real trend 0 -1.814923
## log_trade_balance log_trade_balance trend 0 -2.110058
## log_treasury_gdp log_treasury_gdp trend 0 -0.877057
## log_wage_gap log_wage_gap trend 0 -2.152795
## AIC BIC
## log_fdi_outward_gdp -474.7437 -433.2799
## log_imports_ind_real_gdp -479.4511 -437.9873
## log_long_rate -373.5768 -318.3602
## log_min_wage_real -1027.1857 -985.7219
## log_trade_balance -987.0529 -945.5890
## log_treasury_gdp -632.1951 -590.7313
## log_wage_gap -1644.5272 -1603.0634
#I will use difference stationary as they are not robust enough even with lags.
# =========================
# ADF LAG-LENGTH TABLES (DIFFERENCED LOGGED VARIABLES)
# =========================
library(urca)
max_lag <- 8
make_adf_table <- function(series, series_name, type_adf = c("trend", "drift"), max_lag = 8) {
type_adf <- match.arg(type_adf)
y <- na.omit(as.numeric(series))
out <- data.frame(
series = character(),
type = character(),
lag = integer(),
tau_stat = numeric(),
AIC = numeric(),
BIC = numeric(),
stringsAsFactors = FALSE
)
for (L in 0:max_lag) {
fit <- ur.df(y, type = type_adf, lags = L, selectlags = "Fixed")
tau_stat <- as.numeric(fit@teststat[1])
res <- residuals(fit@testreg)
n <- length(res)
k <- length(coef(fit@testreg))
sigma2 <- sum(res^2) / n
logLik_val <- -n/2 * (log(2*pi) + log(sigma2) + 1)
AIC_val <- -2*logLik_val + 2*k
BIC_val <- -2*logLik_val + log(n)*k
out <- rbind(
out,
data.frame(
series = series_name,
type = type_adf,
lag = L,
tau_stat = tau_stat,
AIC = AIC_val,
BIC = BIC_val,
stringsAsFactors = FALSE
)
)
}
out
}
# -------------------------
# BUILD TABLES
# -------------------------
tab_dlog_wage_gap <- make_adf_table(d_log_wage_gap, "d_log_wage_gap", "drift", max_lag)
tab_dlog_treasury <- make_adf_table(d_log_treasury_gdp, "d_log_treasury_gdp", "drift", max_lag)
tab_dlog_trade <- make_adf_table(d_log_trade_balance, "d_log_log_trade_balance", "drift", max_lag)
tab_dlog_fdi <- make_adf_table(d_log_fdi_outward_gdp, "d_log_fdi_outward_gdp", "drift", max_lag)
tab_dlog_imports <- make_adf_table(d_log_imports_ind_real_gdp, "d_log_imports_ind_real_gdp", "drift", max_lag)
tab_dlog_minwage <- make_adf_table(d_log_min_wage_real, "d_log_min_wage_real", "drift", max_lag)
tab_dlog_longrate <- make_adf_table(d_log_long_rate, "d_log_long_rate", "drift", max_lag)
adf_lag_table_dlog <- rbind(
tab_dlog_wage_gap,
tab_dlog_treasury,
tab_dlog_trade,
tab_dlog_fdi,
tab_dlog_imports,
tab_dlog_minwage,
tab_dlog_longrate
)
adf_lag_table_dlog
## series type lag tau_stat AIC BIC
## 1 d_log_wage_gap drift 0 -16.797359 -1642.1847 -1614.5764
## 2 d_log_wage_gap drift 1 -10.697666 -1627.0257 -1585.6649
## 3 d_log_wage_gap drift 2 -9.226296 -1611.7481 -1556.6695
## 4 d_log_wage_gap drift 3 -8.096398 -1598.7755 -1530.0140
## 5 d_log_wage_gap drift 4 -7.292272 -1583.0089 -1500.5995
## 6 d_log_wage_gap drift 5 -6.565813 -1568.0048 -1471.9832
## 7 d_log_wage_gap drift 6 -6.487873 -1554.0093 -1444.4109
## 8 d_log_wage_gap drift 7 -6.371046 -1539.6252 -1416.4859
## 9 d_log_wage_gap drift 8 -5.101409 -1529.3345 -1392.6904
## 10 d_log_treasury_gdp drift 0 -11.356198 -650.6504 -623.0421
## 11 d_log_treasury_gdp drift 1 -7.911956 -643.0935 -601.7327
## 12 d_log_treasury_gdp drift 2 -5.218183 -653.2464 -598.1677
## 13 d_log_treasury_gdp drift 3 -4.502470 -648.9344 -580.1729
## 14 d_log_treasury_gdp drift 4 -5.204037 -652.5928 -570.1834
## 15 d_log_treasury_gdp drift 5 -4.900130 -641.5546 -545.5329
## 16 d_log_treasury_gdp drift 6 -5.138738 -636.7122 -527.1138
## 17 d_log_treasury_gdp drift 7 -5.249132 -629.4731 -506.3338
## 18 d_log_treasury_gdp drift 8 -5.345472 -620.4230 -483.7790
## 19 d_log_log_trade_balance drift 0 -13.096281 -989.7602 -962.1519
## 20 d_log_log_trade_balance drift 1 -10.495544 -980.5509 -939.1900
## 21 d_log_log_trade_balance drift 2 -8.164372 -969.2259 -914.1473
## 22 d_log_log_trade_balance drift 3 -7.463667 -956.4267 -887.6651
## 23 d_log_log_trade_balance drift 4 -6.848674 -943.2919 -860.8826
## 24 d_log_log_trade_balance drift 5 -5.375662 -935.3624 -839.3407
## 25 d_log_log_trade_balance drift 6 -4.779512 -923.6881 -814.0897
## 26 d_log_log_trade_balance drift 7 -4.806531 -911.3541 -788.2148
## 27 d_log_log_trade_balance drift 8 -4.568558 -898.6340 -761.9900
## 28 d_log_fdi_outward_gdp drift 0 -15.806760 -468.2576 -440.6493
## 29 d_log_fdi_outward_gdp drift 1 -10.894188 -457.1867 -415.8259
## 30 d_log_fdi_outward_gdp drift 2 -9.621649 -448.0581 -392.9794
## 31 d_log_fdi_outward_gdp drift 3 -7.891300 -437.1507 -368.3891
## 32 d_log_fdi_outward_gdp drift 4 -6.979042 -426.1148 -343.7055
## 33 d_log_fdi_outward_gdp drift 5 -6.740719 -416.1221 -320.1004
## 34 d_log_fdi_outward_gdp drift 6 -6.835531 -408.0002 -298.4018
## 35 d_log_fdi_outward_gdp drift 7 -6.230063 -396.9641 -273.8249
## 36 d_log_fdi_outward_gdp drift 8 -6.176452 -387.2809 -250.6369
## 37 d_log_imports_ind_real_gdp drift 0 -11.784313 -492.8260 -465.2177
## 38 d_log_imports_ind_real_gdp drift 1 -9.511505 -482.3944 -441.0336
## 39 d_log_imports_ind_real_gdp drift 2 -7.867634 -474.2596 -419.1809
## 40 d_log_imports_ind_real_gdp drift 3 -8.239854 -470.0969 -401.3353
## 41 d_log_imports_ind_real_gdp drift 4 -7.409954 -459.4572 -377.0479
## 42 d_log_imports_ind_real_gdp drift 5 -5.955298 -450.7682 -354.7465
## 43 d_log_imports_ind_real_gdp drift 6 -5.890910 -440.6498 -331.0514
## 44 d_log_imports_ind_real_gdp drift 7 -6.011235 -434.8993 -311.7600
## 45 d_log_imports_ind_real_gdp drift 8 -5.496943 -433.7182 -297.0741
## 46 d_log_min_wage_real drift 0 -15.572182 -1027.8304 -1000.2221
## 47 d_log_min_wage_real drift 1 -11.709082 -1015.9080 -974.5472
## 48 d_log_min_wage_real drift 2 -9.359536 -1002.5671 -947.4884
## 49 d_log_min_wage_real drift 3 -5.433695 -1038.6180 -969.8564
## 50 d_log_min_wage_real drift 4 -5.781048 -1028.8107 -946.4014
## 51 d_log_min_wage_real drift 5 -5.374110 -1015.1140 -919.0923
## 52 d_log_min_wage_real drift 6 -4.917457 -1001.5437 -891.9453
## 53 d_log_min_wage_real drift 7 -4.298576 -991.2804 -868.1412
## 54 d_log_min_wage_real drift 8 -4.149236 -978.3714 -841.7274
## 55 d_log_long_rate drift 0 -11.125097 -378.8926 -351.2843
## 56 d_log_long_rate drift 1 -10.730823 -376.1560 -334.7952
## 57 d_log_long_rate drift 2 -8.344999 -366.1991 -311.1204
## 58 d_log_long_rate drift 3 -6.938223 -355.9738 -287.2122
## 59 d_log_long_rate drift 4 -6.117807 -345.5475 -263.1382
## 60 d_log_long_rate drift 5 -5.952598 -336.0811 -240.0594
## 61 d_log_long_rate drift 6 -6.247350 -329.3454 -219.7470
## 62 d_log_long_rate drift 7 -6.591986 -323.0809 -199.9416
## 63 d_log_long_rate drift 8 -6.715372 -315.3126 -178.6686
# -------------------------
# BEST LAG BY AIC
# -------------------------
best_by_AIC_dlog <- do.call(
rbind,
lapply(split(adf_lag_table_dlog, adf_lag_table_dlog$series), function(x) x[which.min(x$AIC), ])
)
best_by_AIC_dlog
## series type lag tau_stat
## d_log_fdi_outward_gdp d_log_fdi_outward_gdp drift 0 -15.806760
## d_log_imports_ind_real_gdp d_log_imports_ind_real_gdp drift 0 -11.784313
## d_log_log_trade_balance d_log_log_trade_balance drift 0 -13.096281
## d_log_long_rate d_log_long_rate drift 0 -11.125097
## d_log_min_wage_real d_log_min_wage_real drift 3 -5.433695
## d_log_treasury_gdp d_log_treasury_gdp drift 2 -5.218183
## d_log_wage_gap d_log_wage_gap drift 0 -16.797359
## AIC BIC
## d_log_fdi_outward_gdp -468.2576 -440.6493
## d_log_imports_ind_real_gdp -492.8260 -465.2177
## d_log_log_trade_balance -989.7602 -962.1519
## d_log_long_rate -378.8926 -351.2843
## d_log_min_wage_real -1038.6180 -969.8564
## d_log_treasury_gdp -653.2464 -598.1677
## d_log_wage_gap -1642.1847 -1614.5764
# -------------------------
# BEST LAG BY BIC
# -------------------------
best_by_BIC_dlog <- do.call(
rbind,
lapply(split(adf_lag_table_dlog, adf_lag_table_dlog$series), function(x) x[which.min(x$BIC), ])
)
best_by_BIC_dlog
## series type lag tau_stat
## d_log_fdi_outward_gdp d_log_fdi_outward_gdp drift 0 -15.80676
## d_log_imports_ind_real_gdp d_log_imports_ind_real_gdp drift 0 -11.78431
## d_log_log_trade_balance d_log_log_trade_balance drift 0 -13.09628
## d_log_long_rate d_log_long_rate drift 0 -11.12510
## d_log_min_wage_real d_log_min_wage_real drift 0 -15.57218
## d_log_treasury_gdp d_log_treasury_gdp drift 0 -11.35620
## d_log_wage_gap d_log_wage_gap drift 0 -16.79736
## AIC BIC
## d_log_fdi_outward_gdp -468.2576 -440.6493
## d_log_imports_ind_real_gdp -492.8260 -465.2177
## d_log_log_trade_balance -989.7602 -962.1519
## d_log_long_rate -378.8926 -351.2843
## d_log_min_wage_real -1027.8304 -1000.2221
## d_log_treasury_gdp -650.6504 -623.0421
## d_log_wage_gap -1642.1847 -1614.5764
##Baseline
library(urca)
# -------------------------
# Engle-Granger helper
# -------------------------
run_eg_test <- function(formula, data, model_name, max_lag = 8) {
# step 1: long-run regression
long_run <- lm(formula, data = data)
uhat <- residuals(long_run)
# step 2: ADF on residuals, no deterministics
out <- data.frame(
model = character(),
lag = integer(),
tau_stat = numeric(),
AIC = numeric(),
BIC = numeric(),
stringsAsFactors = FALSE
)
for (L in 0:max_lag) {
fit <- ur.df(uhat, type = "none", lags = L, selectlags = "Fixed")
tau_stat <- as.numeric(fit@teststat[1])
res <- residuals(fit@testreg)
n <- length(res)
k <- length(coef(fit@testreg))
sigma2 <- sum(res^2) / n
logLik_val <- -n/2 * (log(2*pi) + log(sigma2) + 1)
AIC_val <- -2*logLik_val + 2*k
BIC_val <- -2*logLik_val + log(n)*k
out <- rbind(
out,
data.frame(
model = model_name,
lag = L,
tau_stat = tau_stat,
AIC = AIC_val,
BIC = BIC_val,
stringsAsFactors = FALSE
)
)
}
best_AIC <- out[which.min(out$AIC), ]
best_BIC <- out[which.min(out$BIC), ]
list(
long_run = long_run,
resid = uhat,
lag_table = out,
best_AIC = best_AIC,
best_BIC = best_BIC
)
}
# -------------------------
# Baseline model
# -------------------------
eg_baseline <- run_eg_test(
log_wage_gap ~ log_treasury_gdp + log_trade_balance + log_min_wage_real,
data = data.frame(
log_wage_gap,
log_treasury_gdp,
log_trade_balance,
log_min_wage_real
),
model_name = "baseline",
max_lag = 8
)
summary(eg_baseline$long_run)
##
## Call:
## lm(formula = formula, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.121463 -0.023560 0.003558 0.029427 0.127988
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.040972 0.090631 -0.452 0.652
## log_treasury_gdp 0.127807 0.004602 27.773 < 2e-16 ***
## log_trade_balance -0.127181 0.030401 -4.183 4.08e-05 ***
## log_min_wage_real -0.247699 0.035375 -7.002 2.72e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.04563 on 231 degrees of freedom
## Multiple R-squared: 0.8866, Adjusted R-squared: 0.8852
## F-statistic: 602.2 on 3 and 231 DF, p-value: < 2.2e-16
eg_baseline$lag_table
## model lag tau_stat AIC BIC
## 1 baseline 0 -2.175216 -1391.764 -1377.943
## 2 baseline 1 -2.600341 -1384.724 -1357.116
## 3 baseline 2 -2.420255 -1370.938 -1329.577
## 4 baseline 3 -2.684569 -1360.566 -1305.487
## 5 baseline 4 -3.650744 -1373.498 -1304.736
## 6 baseline 5 -3.937740 -1366.675 -1284.265
## 7 baseline 6 -3.977723 -1354.678 -1258.656
## 8 baseline 7 -3.899353 -1343.107 -1233.509
## 9 baseline 8 -3.781179 -1328.532 -1205.393
eg_baseline$best_AIC
## model lag tau_stat AIC BIC
## 1 baseline 0 -2.175216 -1391.764 -1377.943
eg_baseline$best_BIC
## model lag tau_stat AIC BIC
## 1 baseline 0 -2.175216 -1391.764 -1377.943
eg_pathway1 <- run_eg_test(
log_wage_gap ~ log_treasury_gdp + log_trade_balance + log_min_wage_real + log_imports_ind_real_gdp,
data = data.frame(
log_wage_gap,
log_treasury_gdp,
log_trade_balance,
log_min_wage_real,
log_imports_ind_real_gdp
),
model_name = "pathway1_imports",
max_lag = 8
)
summary(eg_pathway1$long_run)
##
## Call:
## lm(formula = formula, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.107789 -0.028306 0.004052 0.028663 0.129872
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.005416 0.094756 0.057 0.95447
## log_treasury_gdp 0.118547 0.007334 16.164 < 2e-16 ***
## log_trade_balance -0.101697 0.034145 -2.978 0.00321 **
## log_min_wage_real -0.246444 0.035260 -6.989 2.96e-11 ***
## log_imports_ind_real_gdp 0.015341 0.009481 1.618 0.10703
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.04547 on 230 degrees of freedom
## Multiple R-squared: 0.8879, Adjusted R-squared: 0.886
## F-statistic: 455.5 on 4 and 230 DF, p-value: < 2.2e-16
eg_pathway1$lag_table
## model lag tau_stat AIC BIC
## 1 pathway1_imports 0 -2.120379 -1414.749 -1400.928
## 2 pathway1_imports 1 -2.452471 -1404.913 -1377.305
## 3 pathway1_imports 2 -2.301435 -1390.646 -1349.285
## 4 pathway1_imports 3 -2.548091 -1381.463 -1326.384
## 5 pathway1_imports 4 -3.524171 -1394.267 -1325.506
## 6 pathway1_imports 5 -3.878580 -1388.622 -1306.212
## 7 pathway1_imports 6 -3.893440 -1375.776 -1279.754
## 8 pathway1_imports 7 -3.700502 -1363.456 -1253.858
## 9 pathway1_imports 8 -3.644576 -1348.845 -1225.706
eg_pathway1$best_AIC
## model lag tau_stat AIC BIC
## 1 pathway1_imports 0 -2.120379 -1414.749 -1400.928
eg_pathway1$best_BIC
## model lag tau_stat AIC BIC
## 1 pathway1_imports 0 -2.120379 -1414.749 -1400.928
##Pathway 2
eg_pathway2 <- run_eg_test(
log_wage_gap ~ log_treasury_gdp + log_trade_balance + log_min_wage_real + log_long_rate,
data = data.frame(
log_wage_gap,
log_treasury_gdp,
log_trade_balance,
log_min_wage_real,
log_long_rate
),
model_name = "pathway2_longrate",
max_lag = 8
)
summary(eg_pathway2$long_run)
##
## Call:
## lm(formula = formula, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.119299 -0.021536 0.001851 0.026837 0.086717
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.178064 0.083479 -2.133 0.034 *
## log_treasury_gdp 0.093449 0.006178 15.127 < 2e-16 ***
## log_trade_balance -0.146187 0.027438 -5.328 2.36e-07 ***
## log_min_wage_real -0.297774 0.032486 -9.166 < 2e-16 ***
## log_long_rate -0.056192 0.007506 -7.486 1.50e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.041 on 230 degrees of freedom
## Multiple R-squared: 0.9088, Adjusted R-squared: 0.9073
## F-statistic: 573.3 on 4 and 230 DF, p-value: < 2.2e-16
eg_pathway2$lag_table
## model lag tau_stat AIC BIC
## 1 pathway2_longrate 0 -2.465703 -1341.207 -1327.386
## 2 pathway2_longrate 1 -3.124985 -1339.214 -1311.605
## 3 pathway2_longrate 2 -2.800292 -1326.352 -1284.991
## 4 pathway2_longrate 3 -3.115943 -1314.884 -1259.805
## 5 pathway2_longrate 4 -3.734610 -1319.604 -1250.842
## 6 pathway2_longrate 5 -3.587004 -1308.218 -1225.808
## 7 pathway2_longrate 6 -3.871531 -1298.557 -1202.535
## 8 pathway2_longrate 7 -4.099868 -1286.729 -1177.130
## 9 pathway2_longrate 8 -3.776943 -1272.270 -1149.131
eg_pathway2$best_AIC
## model lag tau_stat AIC BIC
## 1 pathway2_longrate 0 -2.465703 -1341.207 -1327.386
eg_pathway2$best_BIC
## model lag tau_stat AIC BIC
## 1 pathway2_longrate 0 -2.465703 -1341.207 -1327.386
##Full
eg_optional <- run_eg_test(
log_wage_gap ~ log_treasury_gdp + log_trade_balance + log_min_wage_real +
log_imports_ind_real_gdp + log_long_rate,
data = data.frame(
log_wage_gap,
log_treasury_gdp,
log_trade_balance,
log_min_wage_real,
log_imports_ind_real_gdp,
log_long_rate
),
model_name = "optional_both_pathways",
max_lag = 8
)
summary(eg_optional$long_run)
##
## Call:
## lm(formula = formula, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.10205 -0.02525 0.00067 0.02572 0.06672
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.036903 0.074346 -0.496 0.6201
## log_treasury_gdp 0.020792 0.009937 2.092 0.0375 *
## log_trade_balance -0.028065 0.027448 -1.022 0.3076
## log_min_wage_real -0.327362 0.028437 -11.512 < 2e-16 ***
## log_imports_ind_real_gdp 0.079350 0.009132 8.690 7.04e-16 ***
## log_long_rate -0.096682 0.008017 -12.060 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.03564 on 229 degrees of freedom
## Multiple R-squared: 0.9314, Adjusted R-squared: 0.9299
## F-statistic: 622.3 on 5 and 229 DF, p-value: < 2.2e-16
eg_optional$lag_table
## model lag tau_stat AIC BIC
## 1 optional_both_pathways 0 -2.899023 -1332.170 -1318.349
## 2 optional_both_pathways 1 -3.375103 -1324.764 -1297.155
## 3 optional_both_pathways 2 -3.185287 -1310.228 -1268.867
## 4 optional_both_pathways 3 -3.525251 -1299.067 -1243.988
## 5 optional_both_pathways 4 -3.812198 -1292.672 -1223.911
## 6 optional_both_pathways 5 -3.194575 -1284.557 -1202.147
## 7 optional_both_pathways 6 -3.293345 -1271.191 -1175.170
## 8 optional_both_pathways 7 -3.156587 -1256.384 -1146.785
## 9 optional_both_pathways 8 -3.332634 -1243.593 -1120.454
eg_optional$best_AIC
## model lag tau_stat AIC BIC
## 1 optional_both_pathways 0 -2.899023 -1332.17 -1318.349
eg_optional$best_BIC
## model lag tau_stat AIC BIC
## 1 optional_both_pathways 0 -2.899023 -1332.17 -1318.349
library(urca)
make_resid_adf_table <- function(resid_series, model_name, max_lag = 8) {
y <- na.omit(as.numeric(resid_series))
out <- data.frame(
model = character(),
lag = integer(),
tau_stat = numeric(),
AIC = numeric(),
BIC = numeric(),
stringsAsFactors = FALSE
)
for (L in 0:max_lag) {
fit <- ur.df(y, type = "none", lags = L, selectlags = "Fixed")
tau_stat <- as.numeric(fit@teststat[1])
res <- residuals(fit@testreg)
n <- length(res)
k <- length(coef(fit@testreg))
sigma2 <- sum(res^2) / n
logLik_val <- -n/2 * (log(2*pi) + log(sigma2) + 1)
AIC_val <- -2*logLik_val + 2*k
BIC_val <- -2*logLik_val + log(n)*k
out <- rbind(
out,
data.frame(
model = model_name,
lag = L,
tau_stat = tau_stat,
AIC = AIC_val,
BIC = BIC_val,
stringsAsFactors = FALSE
)
)
}
out
}
resid_baseline <- residuals(eg_baseline$long_run)
resid_pathway1 <- residuals(eg_pathway1$long_run)
resid_pathway2 <- residuals(eg_pathway2$long_run)
resid_optional <- residuals(eg_optional$long_run)
tab_resid_baseline <- make_resid_adf_table(resid_baseline, "baseline", max_lag = 8)
tab_resid_pathway1 <- make_resid_adf_table(resid_pathway1, "pathway1_imports", max_lag = 8)
tab_resid_pathway2 <- make_resid_adf_table(resid_pathway2, "pathway2_longrate", max_lag = 8)
tab_resid_optional <- make_resid_adf_table(resid_optional, "optional_both", max_lag = 8)
eg_resid_table <- rbind(
tab_resid_baseline,
tab_resid_pathway1,
tab_resid_pathway2,
tab_resid_optional
)
eg_resid_table
## model lag tau_stat AIC BIC
## 1 baseline 0 -2.175216 -1391.764 -1377.943
## 2 baseline 1 -2.600341 -1384.724 -1357.116
## 3 baseline 2 -2.420255 -1370.938 -1329.577
## 4 baseline 3 -2.684569 -1360.566 -1305.487
## 5 baseline 4 -3.650744 -1373.498 -1304.736
## 6 baseline 5 -3.937740 -1366.675 -1284.265
## 7 baseline 6 -3.977723 -1354.678 -1258.656
## 8 baseline 7 -3.899353 -1343.107 -1233.509
## 9 baseline 8 -3.781179 -1328.532 -1205.393
## 10 pathway1_imports 0 -2.120379 -1414.749 -1400.928
## 11 pathway1_imports 1 -2.452471 -1404.913 -1377.305
## 12 pathway1_imports 2 -2.301435 -1390.646 -1349.285
## 13 pathway1_imports 3 -2.548091 -1381.463 -1326.384
## 14 pathway1_imports 4 -3.524171 -1394.267 -1325.506
## 15 pathway1_imports 5 -3.878580 -1388.622 -1306.212
## 16 pathway1_imports 6 -3.893440 -1375.776 -1279.754
## 17 pathway1_imports 7 -3.700502 -1363.456 -1253.858
## 18 pathway1_imports 8 -3.644576 -1348.845 -1225.706
## 19 pathway2_longrate 0 -2.465703 -1341.207 -1327.386
## 20 pathway2_longrate 1 -3.124985 -1339.214 -1311.605
## 21 pathway2_longrate 2 -2.800292 -1326.352 -1284.991
## 22 pathway2_longrate 3 -3.115943 -1314.884 -1259.805
## 23 pathway2_longrate 4 -3.734610 -1319.604 -1250.842
## 24 pathway2_longrate 5 -3.587004 -1308.218 -1225.808
## 25 pathway2_longrate 6 -3.871531 -1298.557 -1202.535
## 26 pathway2_longrate 7 -4.099868 -1286.729 -1177.130
## 27 pathway2_longrate 8 -3.776943 -1272.270 -1149.131
## 28 optional_both 0 -2.899023 -1332.170 -1318.349
## 29 optional_both 1 -3.375103 -1324.764 -1297.155
## 30 optional_both 2 -3.185287 -1310.228 -1268.867
## 31 optional_both 3 -3.525251 -1299.067 -1243.988
## 32 optional_both 4 -3.812198 -1292.672 -1223.911
## 33 optional_both 5 -3.194575 -1284.557 -1202.147
## 34 optional_both 6 -3.293345 -1271.191 -1175.170
## 35 optional_both 7 -3.156587 -1256.384 -1146.785
## 36 optional_both 8 -3.332634 -1243.593 -1120.454
best_resid_AIC <- do.call(
rbind,
lapply(split(eg_resid_table, eg_resid_table$model), function(x) x[which.min(x$AIC), ])
)
best_resid_BIC <- do.call(
rbind,
lapply(split(eg_resid_table, eg_resid_table$model), function(x) x[which.min(x$BIC), ])
)
best_resid_AIC
## model lag tau_stat AIC BIC
## baseline baseline 0 -2.175216 -1391.764 -1377.943
## optional_both optional_both 0 -2.899023 -1332.170 -1318.349
## pathway1_imports pathway1_imports 0 -2.120379 -1414.749 -1400.928
## pathway2_longrate pathway2_longrate 0 -2.465703 -1341.207 -1327.386
best_resid_BIC
## model lag tau_stat AIC BIC
## baseline baseline 0 -2.175216 -1391.764 -1377.943
## optional_both optional_both 0 -2.899023 -1332.170 -1318.349
## pathway1_imports pathway1_imports 0 -2.120379 -1414.749 -1400.928
## pathway2_longrate pathway2_longrate 0 -2.465703 -1341.207 -1327.386
eg_critical_values <- data.frame(
n_variables = c(2, 3, 4, 5),
cv_1pct = c(-3.96, -4.36, -4.73, -5.07),
cv_5pct = c(-3.41, -3.80, -4.16, -4.49),
cv_10pct = c(-3.12, -3.52, -3.84, -4.20)
)
eg_critical_values
## n_variables cv_1pct cv_5pct cv_10pct
## 1 2 -3.96 -3.41 -3.12
## 2 3 -4.36 -3.80 -3.52
## 3 4 -4.73 -4.16 -3.84
## 4 5 -5.07 -4.49 -4.20
# =========================
# DLOG REGRESSIONS
# =========================
reg_dlog <- na.omit(data.frame(
d_log_wage_gap,
d_log_treasury_gdp,
d_log_trade_balance,
d_log_min_wage_real,
d_log_imports_ind_real_gdp,
d_log_long_rate
))
# baseline
mod_dlog_baseline <- lm(
d_log_wage_gap ~ d_log_treasury_gdp + d_log_trade_balance + d_log_min_wage_real,
data = reg_dlog
)
# pathway 1
mod_dlog_pathway1 <- lm(
d_log_wage_gap ~ d_log_treasury_gdp + d_log_trade_balance +
d_log_min_wage_real + d_log_imports_ind_real_gdp,
data = reg_dlog
)
# pathway 2
mod_dlog_pathway2 <- lm(
d_log_wage_gap ~ d_log_treasury_gdp + d_log_trade_balance +
d_log_min_wage_real + d_log_long_rate,
data = reg_dlog
)
# optional
mod_dlog_optional <- lm(
d_log_wage_gap ~ d_log_treasury_gdp + d_log_trade_balance +
d_log_min_wage_real + d_log_imports_ind_real_gdp + d_log_long_rate,
data = reg_dlog
)
summary(mod_dlog_baseline)
##
## Call:
## lm(formula = d_log_wage_gap ~ d_log_treasury_gdp + d_log_trade_balance +
## d_log_min_wage_real, data = reg_dlog)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.018770 -0.004493 -0.000197 0.004490 0.035728
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0016453 0.0004597 3.579 0.00042 ***
## d_log_treasury_gdp 0.0097489 0.0075370 1.293 0.19714
## d_log_trade_balance -0.0019852 0.0161433 -0.123 0.90223
## d_log_min_wage_real -0.0237185 0.0175976 -1.348 0.17904
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.006921 on 230 degrees of freedom
## Multiple R-squared: 0.01535, Adjusted R-squared: 0.002508
## F-statistic: 1.195 on 3 and 230 DF, p-value: 0.3123
summary(mod_dlog_pathway1)
##
## Call:
## lm(formula = d_log_wage_gap ~ d_log_treasury_gdp + d_log_trade_balance +
## d_log_min_wage_real + d_log_imports_ind_real_gdp, data = reg_dlog)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.019089 -0.004314 -0.000261 0.004415 0.034008
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0017346 0.0004629 3.747 0.000226 ***
## d_log_treasury_gdp 0.0091665 0.0075312 1.217 0.224801
## d_log_trade_balance 0.0013270 0.0162736 0.082 0.935080
## d_log_min_wage_real -0.0221815 0.0175911 -1.261 0.208610
## d_log_imports_ind_real_gdp -0.0078086 0.0054736 -1.427 0.155060
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.006906 on 229 degrees of freedom
## Multiple R-squared: 0.02402, Adjusted R-squared: 0.006977
## F-statistic: 1.409 on 4 and 229 DF, p-value: 0.2317
summary(mod_dlog_pathway2)
##
## Call:
## lm(formula = d_log_wage_gap ~ d_log_treasury_gdp + d_log_trade_balance +
## d_log_min_wage_real + d_log_long_rate, data = reg_dlog)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.0211883 -0.0041872 0.0000062 0.0043433 0.0297981
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0016837 0.0004565 3.689 0.000282 ***
## d_log_treasury_gdp 0.0055615 0.0077295 0.720 0.472561
## d_log_trade_balance -0.0017672 0.0160189 -0.110 0.912254
## d_log_min_wage_real -0.0244248 0.0174647 -1.399 0.163308
## d_log_long_rate -0.0091641 0.0042739 -2.144 0.033069 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.006868 on 229 degrees of freedom
## Multiple R-squared: 0.03473, Adjusted R-squared: 0.01787
## F-statistic: 2.06 on 4 and 229 DF, p-value: 0.08693
summary(mod_dlog_optional)
##
## Call:
## lm(formula = d_log_wage_gap ~ d_log_treasury_gdp + d_log_trade_balance +
## d_log_min_wage_real + d_log_imports_ind_real_gdp + d_log_long_rate,
## data = reg_dlog)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.0210582 -0.0043979 -0.0002173 0.0046279 0.0295994
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.728e-03 4.608e-04 3.750 0.000224 ***
## d_log_treasury_gdp 5.770e-03 7.742e-03 0.745 0.456859
## d_log_trade_balance 3.561e-05 1.622e-02 0.002 0.998250
## d_log_min_wage_real -2.349e-02 1.753e-02 -1.340 0.181589
## d_log_imports_ind_real_gdp -4.315e-03 5.800e-03 -0.744 0.457658
## d_log_long_rate -8.003e-03 4.554e-03 -1.757 0.080191 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.006875 on 228 degrees of freedom
## Multiple R-squared: 0.03707, Adjusted R-squared: 0.01595
## F-statistic: 1.755 on 5 and 228 DF, p-value: 0.123
##HAC
# =========================
# HAC STANDARD ERRORS
# =========================
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(sandwich)
coeftest(mod_dlog_baseline, vcov = NeweyWest(mod_dlog_baseline, lag = 4, prewhite = FALSE))
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0016453 0.0004105 4.0081 8.27e-05 ***
## d_log_treasury_gdp 0.0097489 0.0091292 1.0679 0.2867
## d_log_trade_balance -0.0019852 0.0173409 -0.1145 0.9090
## d_log_min_wage_real -0.0237185 0.0220894 -1.0738 0.2841
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coeftest(mod_dlog_pathway1, vcov = NeweyWest(mod_dlog_pathway1, lag = 4, prewhite = FALSE))
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.00173465 0.00042367 4.0943 5.873e-05 ***
## d_log_treasury_gdp 0.00916654 0.00898214 1.0205 0.3086
## d_log_trade_balance 0.00132703 0.01724654 0.0769 0.9387
## d_log_min_wage_real -0.02218153 0.02194877 -1.0106 0.3133
## d_log_imports_ind_real_gdp -0.00780855 0.00564564 -1.3831 0.1680
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coeftest(mod_dlog_pathway2, vcov = NeweyWest(mod_dlog_pathway2, lag = 4, prewhite = FALSE))
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.00168371 0.00041997 4.0091 8.25e-05 ***
## d_log_treasury_gdp 0.00556146 0.00881407 0.6310 0.52869
## d_log_trade_balance -0.00176716 0.01711402 -0.1033 0.91785
## d_log_min_wage_real -0.02442475 0.02171936 -1.1246 0.26195
## d_log_long_rate -0.00916406 0.00524167 -1.7483 0.08175 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coeftest(mod_dlog_optional, vcov = NeweyWest(mod_dlog_optional, lag = 4, prewhite = FALSE))
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.7282e-03 4.2553e-04 4.0613 6.713e-05 ***
## d_log_treasury_gdp 5.7702e-03 8.8133e-03 0.6547 0.5133
## d_log_trade_balance 3.5609e-05 1.7143e-02 0.0021 0.9983
## d_log_min_wage_real -2.3486e-02 2.1612e-02 -1.0867 0.2783
## d_log_imports_ind_real_gdp -4.3151e-03 4.6677e-03 -0.9245 0.3562
## d_log_long_rate -8.0029e-03 5.0767e-03 -1.5764 0.1163
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# =========================
# DIAGNOSTICS
# =========================
library(lmtest)
# Breusch-Godfrey
bgtest(mod_dlog_baseline, order = 4)
##
## Breusch-Godfrey test for serial correlation of order up to 4
##
## data: mod_dlog_baseline
## LM test = 4.0131, df = 4, p-value = 0.4042
bgtest(mod_dlog_pathway1, order = 4)
##
## Breusch-Godfrey test for serial correlation of order up to 4
##
## data: mod_dlog_pathway1
## LM test = 3.8627, df = 4, p-value = 0.4249
bgtest(mod_dlog_pathway2, order = 4)
##
## Breusch-Godfrey test for serial correlation of order up to 4
##
## data: mod_dlog_pathway2
## LM test = 3.7884, df = 4, p-value = 0.4354
bgtest(mod_dlog_optional, order = 4)
##
## Breusch-Godfrey test for serial correlation of order up to 4
##
## data: mod_dlog_optional
## LM test = 3.7443, df = 4, p-value = 0.4417
# Ljung-Box on residuals
Box.test(residuals(mod_dlog_baseline), lag = 12, type = "Ljung-Box")
##
## Box-Ljung test
##
## data: residuals(mod_dlog_baseline)
## X-squared = 11.453, df = 12, p-value = 0.4905
Box.test(residuals(mod_dlog_pathway1), lag = 12, type = "Ljung-Box")
##
## Box-Ljung test
##
## data: residuals(mod_dlog_pathway1)
## X-squared = 11.052, df = 12, p-value = 0.5245
Box.test(residuals(mod_dlog_pathway2), lag = 12, type = "Ljung-Box")
##
## Box-Ljung test
##
## data: residuals(mod_dlog_pathway2)
## X-squared = 10.997, df = 12, p-value = 0.5292
Box.test(residuals(mod_dlog_optional), lag = 12, type = "Ljung-Box")
##
## Box-Ljung test
##
## data: residuals(mod_dlog_optional)
## X-squared = 10.847, df = 12, p-value = 0.542
# Breusch-Pagan
bptest(mod_dlog_baseline)
##
## studentized Breusch-Pagan test
##
## data: mod_dlog_baseline
## BP = 2.3744, df = 3, p-value = 0.4984
bptest(mod_dlog_pathway1)
##
## studentized Breusch-Pagan test
##
## data: mod_dlog_pathway1
## BP = 4.5526, df = 4, p-value = 0.3364
bptest(mod_dlog_pathway2)
##
## studentized Breusch-Pagan test
##
## data: mod_dlog_pathway2
## BP = 22.799, df = 4, p-value = 0.0001389
bptest(mod_dlog_optional)
##
## studentized Breusch-Pagan test
##
## data: mod_dlog_optional
## BP = 22.981, df = 5, p-value = 0.0003404
# White-type using fitted values
bptest(mod_dlog_baseline, ~ fitted(mod_dlog_baseline) + I(fitted(mod_dlog_baseline)^2))
##
## studentized Breusch-Pagan test
##
## data: mod_dlog_baseline
## BP = 1.4545, df = 2, p-value = 0.4832
bptest(mod_dlog_pathway1, ~ fitted(mod_dlog_pathway1) + I(fitted(mod_dlog_pathway1)^2))
##
## studentized Breusch-Pagan test
##
## data: mod_dlog_pathway1
## BP = 12.784, df = 2, p-value = 0.001675
bptest(mod_dlog_pathway2, ~ fitted(mod_dlog_pathway2) + I(fitted(mod_dlog_pathway2)^2))
##
## studentized Breusch-Pagan test
##
## data: mod_dlog_pathway2
## BP = 91.068, df = 2, p-value < 2.2e-16
bptest(mod_dlog_optional, ~ fitted(mod_dlog_optional) + I(fitted(mod_dlog_optional)^2))
##
## studentized Breusch-Pagan test
##
## data: mod_dlog_optional
## BP = 86.431, df = 2, p-value < 2.2e-16
# RESET
resettest(mod_dlog_baseline, power = 2:3, type = "fitted")
##
## RESET test
##
## data: mod_dlog_baseline
## RESET = 2.9059, df1 = 2, df2 = 228, p-value = 0.05673
resettest(mod_dlog_pathway1, power = 2:3, type = "fitted")
##
## RESET test
##
## data: mod_dlog_pathway1
## RESET = 2.5092, df1 = 2, df2 = 227, p-value = 0.08359
resettest(mod_dlog_pathway2, power = 2:3, type = "fitted")
##
## RESET test
##
## data: mod_dlog_pathway2
## RESET = 10.571, df1 = 2, df2 = 227, p-value = 4.079e-05
resettest(mod_dlog_optional, power = 2:3, type = "fitted")
##
## RESET test
##
## data: mod_dlog_optional
## RESET = 10.382, df1 = 2, df2 = 226, p-value = 4.857e-05
par(mfrow = c(2, 2))
acf(residuals(mod_dlog_baseline), main = "ACF Residuals: Baseline")
pacf(residuals(mod_dlog_baseline), main = "PACF Residuals: Baseline")
acf(residuals(mod_dlog_pathway2), main = "ACF Residuals: Pathway 2")
pacf(residuals(mod_dlog_pathway2), main = "PACF Residuals: Pathway 2")
par(mfrow = c(1, 1))
# =========================
# SMALL VAR IN DLOGS
# =========================
library(vars)
## Loading required package: MASS
## Loading required package: strucchange
var_data_core <- na.omit(data.frame(
d_log_wage_gap,
d_log_treasury_gdp,
d_log_trade_balance
))
# lag selection
VARselect(var_data_core, lag.max = 8, type = "const")
## $selection
## AIC(n) HQ(n) SC(n) FPE(n)
## 3 1 1 3
##
## $criteria
## 1 2 3 4 5
## AIC(n) -2.284465e+01 -2.283257e+01 -2.287066e+01 -2.281672e+01 -2.277210e+01
## HQ(n) -2.277136e+01 -2.270431e+01 -2.268742e+01 -2.257851e+01 -2.247892e+01
## SC(n) -2.266303e+01 -2.251474e+01 -2.241660e+01 -2.222645e+01 -2.204562e+01
## FPE(n) 1.198665e-10 1.213293e-10 1.168087e-10 1.233075e-10 1.289763e-10
## 6 7 8
## AIC(n) -2.273886e+01 -2.272943e+01 -2.271741e+01
## HQ(n) -2.239071e+01 -2.232631e+01 -2.225931e+01
## SC(n) -2.187616e+01 -2.173052e+01 -2.158227e+01
## FPE(n) 1.334006e-10 1.347531e-10 1.365025e-10
# choose lag, for example p = 1 or whatever AIC/BIC suggests
p_var <- 1
var_core <- VAR(var_data_core, p = p_var, type = "const")
summary(var_core)
##
## VAR Estimation Results:
## =========================
## Endogenous variables: d_log_wage_gap, d_log_treasury_gdp, d_log_trade_balance
## Deterministic variables: const
## Sample size: 233
## Log Likelihood: 1670.839
## Roots of the characteristic polynomial:
## 0.2144 0.2144 0.08168
## Call:
## VAR(y = var_data_core, p = p_var, type = "const")
##
##
## Estimation results for equation d_log_wage_gap:
## ===============================================
## d_log_wage_gap = d_log_wage_gap.l1 + d_log_treasury_gdp.l1 + d_log_trade_balance.l1 + const
##
## Estimate Std. Error t value Pr(>|t|)
## d_log_wage_gap.l1 -0.1043903 0.0658333 -1.586 0.114
## d_log_treasury_gdp.l1 0.0057245 0.0075873 0.754 0.451
## d_log_trade_balance.l1 -0.0097216 0.0161291 -0.603 0.547
## const 0.0019052 0.0004743 4.017 8.01e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.006938 on 229 degrees of freedom
## Multiple R-Squared: 0.01419, Adjusted R-squared: 0.001276
## F-statistic: 1.099 on 3 and 229 DF, p-value: 0.3504
##
##
## Estimation results for equation d_log_treasury_gdp:
## ===================================================
## d_log_treasury_gdp = d_log_wage_gap.l1 + d_log_treasury_gdp.l1 + d_log_trade_balance.l1 + const
##
## Estimate Std. Error t value Pr(>|t|)
## d_log_wage_gap.l1 -1.107813 0.546414 -2.027 0.0438 *
## d_log_treasury_gdp.l1 0.300660 0.062974 4.774 3.22e-06 ***
## d_log_trade_balance.l1 0.196519 0.133871 1.468 0.1435
## const 0.009256 0.003937 2.351 0.0196 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.05758 on 229 degrees of freedom
## Multiple R-Squared: 0.1047, Adjusted R-squared: 0.09298
## F-statistic: 8.928 on 3 and 229 DF, p-value: 1.283e-05
##
##
## Estimation results for equation d_log_trade_balance:
## ====================================================
## d_log_trade_balance = d_log_wage_gap.l1 + d_log_treasury_gdp.l1 + d_log_trade_balance.l1 + const
##
## Estimate Std. Error t value Pr(>|t|)
## d_log_wage_gap.l1 0.210328 0.266640 0.789 0.4310
## d_log_treasury_gdp.l1 -0.032231 0.030730 -1.049 0.2954
## d_log_trade_balance.l1 0.143694 0.065326 2.200 0.0288 *
## const -0.001426 0.001921 -0.742 0.4588
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.0281 on 229 degrees of freedom
## Multiple R-Squared: 0.0286, Adjusted R-squared: 0.01588
## F-statistic: 2.248 on 3 and 229 DF, p-value: 0.08357
##
##
##
## Covariance matrix of residuals:
## d_log_wage_gap d_log_treasury_gdp d_log_trade_balance
## d_log_wage_gap 4.813e-05 2.698e-05 -1.490e-06
## d_log_treasury_gdp 2.698e-05 3.316e-03 -1.056e-04
## d_log_trade_balance -1.490e-06 -1.056e-04 7.895e-04
##
## Correlation matrix of residuals:
## d_log_wage_gap d_log_treasury_gdp d_log_trade_balance
## d_log_wage_gap 1.000000 0.06753 -0.007645
## d_log_treasury_gdp 0.067531 1.00000 -0.065292
## d_log_trade_balance -0.007645 -0.06529 1.000000
# serial correlation
serial.test(var_core, lags.pt = 16, type = "PT.asymptotic")
##
## Portmanteau Test (asymptotic)
##
## data: Residuals of VAR object var_core
## Chi-squared = 164, df = 135, p-value = 0.0453
serial.test(var_core, lags.bg = 8, type = "BG")
##
## Breusch-Godfrey LM test
##
## data: Residuals of VAR object var_core
## Chi-squared = 108.46, df = 72, p-value = 0.003555
# heteroskedasticity
arch.test(var_core, lags.multi = 4)
##
## ARCH (multivariate)
##
## data: Residuals of VAR object var_core
## Chi-squared = 323.54, df = 144, p-value = 7.772e-16
# normality
normality.test(var_core)
## $JB
##
## JB-Test (multivariate)
##
## data: Residuals of VAR object var_core
## Chi-squared = 304.52, df = 6, p-value < 2.2e-16
##
##
## $Skewness
##
## Skewness only (multivariate)
##
## data: Residuals of VAR object var_core
## Chi-squared = 3.5157, df = 3, p-value = 0.3187
##
##
## $Kurtosis
##
## Kurtosis only (multivariate)
##
## data: Residuals of VAR object var_core
## Chi-squared = 301.01, df = 3, p-value < 2.2e-16
# stability
roots(var_core)
## [1] 0.21442638 0.21442638 0.08168327
plot(stability(var_core))
## Granger
# does treasury + trade help predict wage gap?
causality(var_core, cause = "d_log_treasury_gdp")
## $Granger
##
## Granger causality H0: d_log_treasury_gdp do not Granger-cause
## d_log_wage_gap d_log_trade_balance
##
## data: VAR object var_core
## F-Test = 0.82866, df1 = 2, df2 = 687, p-value = 0.4371
##
##
## $Instant
##
## H0: No instantaneous causality between: d_log_treasury_gdp and
## d_log_wage_gap d_log_trade_balance
##
## data: VAR object var_core
## Chi-squared = 2.0226, df = 2, p-value = 0.3638
causality(var_core, cause = "d_log_trade_balance")
## $Granger
##
## Granger causality H0: d_log_trade_balance do not Granger-cause
## d_log_wage_gap d_log_treasury_gdp
##
## data: VAR object var_core
## F-Test = 1.3249, df1 = 2, df2 = 687, p-value = 0.2665
##
##
## $Instant
##
## H0: No instantaneous causality between: d_log_trade_balance and
## d_log_wage_gap d_log_treasury_gdp
##
## data: VAR object var_core
## Chi-squared = 0.99149, df = 2, p-value = 0.6091
# does wage gap help predict treasury or trade?
causality(var_core, cause = "d_log_wage_gap")
## $Granger
##
## Granger causality H0: d_log_wage_gap do not Granger-cause
## d_log_treasury_gdp d_log_trade_balance
##
## data: VAR object var_core
## F-Test = 2.2716, df1 = 2, df2 = 687, p-value = 0.1039
##
##
## $Instant
##
## H0: No instantaneous causality between: d_log_wage_gap and
## d_log_treasury_gdp d_log_trade_balance
##
## data: VAR object var_core
## Chi-squared = 1.0602, df = 2, p-value = 0.5885
##Impulse
# shock from treasury to wage gap
irf_treasury <- irf(
var_core,
impulse = "d_log_treasury_gdp",
response = "d_log_wage_gap",
n.ahead = 12,
boot = TRUE,
runs = 1000
)
plot(irf_treasury)
# shock from trade balance to wage gap
irf_trade <- irf(
var_core,
impulse = "d_log_trade_balance",
response = "d_log_wage_gap",
n.ahead = 12,
boot = TRUE,
runs = 1000
)
plot(irf_trade)
fevd_core <- fevd(var_core, n.ahead = 12)
plot(fevd_core)
## VAR long-rate
var_data_longrate <- na.omit(data.frame(
d_log_wage_gap,
d_log_treasury_gdp,
d_log_trade_balance,
d_log_long_rate
))
VARselect(var_data_longrate, lag.max = 8, type = "const")
## $selection
## AIC(n) HQ(n) SC(n) FPE(n)
## 1 1 1 1
##
## $criteria
## 1 2 3 4 5
## AIC(n) -2.745763e+01 -2.743830e+01 -2.743086e+01 -2.732668e+01 -2.724948e+01
## HQ(n) -2.733547e+01 -2.721842e+01 -2.711325e+01 -2.691134e+01 -2.673641e+01
## SC(n) -2.715492e+01 -2.689344e+01 -2.664384e+01 -2.629749e+01 -2.597813e+01
## FPE(n) 1.189370e-12 1.212748e-12 1.222219e-12 1.357275e-12 1.467699e-12
## 6 7 8
## AIC(n) -2.718986e+01 -2.715813e+01 -2.713104e+01
## HQ(n) -2.657907e+01 -2.644961e+01 -2.632480e+01
## SC(n) -2.567635e+01 -2.540246e+01 -2.513321e+01
## FPE(n) 1.560172e-12 1.613782e-12 1.662607e-12
var_longrate <- VAR(var_data_longrate, p = 1, type = "const")
summary(var_longrate)
##
## VAR Estimation Results:
## =========================
## Endogenous variables: d_log_wage_gap, d_log_treasury_gdp, d_log_trade_balance, d_log_long_rate
## Deterministic variables: const
## Sample size: 233
## Log Likelihood: 1887.101
## Roots of the characteristic polynomial:
## 0.2772 0.2772 0.103 0.002769
## Call:
## VAR(y = var_data_longrate, p = 1, type = "const")
##
##
## Estimation results for equation d_log_wage_gap:
## ===============================================
## d_log_wage_gap = d_log_wage_gap.l1 + d_log_treasury_gdp.l1 + d_log_trade_balance.l1 + d_log_long_rate.l1 + const
##
## Estimate Std. Error t value Pr(>|t|)
## d_log_wage_gap.l1 -0.119081 0.066242 -1.798 0.0736 .
## d_log_treasury_gdp.l1 0.002666 0.007797 0.342 0.7327
## d_log_trade_balance.l1 -0.009661 0.016074 -0.601 0.5484
## d_log_long_rate.l1 -0.006977 0.004345 -1.606 0.1097
## const 0.001961 0.000474 4.137 4.94e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.006914 on 228 degrees of freedom
## Multiple R-Squared: 0.02522, Adjusted R-squared: 0.008116
## F-statistic: 1.475 on 4 and 228 DF, p-value: 0.2107
##
##
## Estimation results for equation d_log_treasury_gdp:
## ===================================================
## d_log_treasury_gdp = d_log_wage_gap.l1 + d_log_treasury_gdp.l1 + d_log_trade_balance.l1 + d_log_long_rate.l1 + const
##
## Estimate Std. Error t value Pr(>|t|)
## d_log_wage_gap.l1 -1.148063 0.552571 -2.078 0.0389 *
## d_log_treasury_gdp.l1 0.292282 0.065043 4.494 1.11e-05 ***
## d_log_trade_balance.l1 0.196686 0.134083 1.467 0.1438
## d_log_long_rate.l1 -0.019116 0.036241 -0.527 0.5984
## const 0.009409 0.003954 2.380 0.0181 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.05767 on 228 degrees of freedom
## Multiple R-Squared: 0.1058, Adjusted R-squared: 0.09012
## F-statistic: 6.744 on 4 and 228 DF, p-value: 3.797e-05
##
##
## Estimation results for equation d_log_trade_balance:
## ====================================================
## d_log_trade_balance = d_log_wage_gap.l1 + d_log_treasury_gdp.l1 + d_log_trade_balance.l1 + d_log_long_rate.l1 + const
##
## Estimate Std. Error t value Pr(>|t|)
## d_log_wage_gap.l1 0.162598 0.268836 0.605 0.5459
## d_log_treasury_gdp.l1 -0.042167 0.031645 -1.333 0.1840
## d_log_trade_balance.l1 0.143892 0.065234 2.206 0.0284 *
## d_log_long_rate.l1 -0.022669 0.017632 -1.286 0.1999
## const -0.001244 0.001924 -0.647 0.5184
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.02806 on 228 degrees of freedom
## Multiple R-Squared: 0.03559, Adjusted R-squared: 0.01867
## F-statistic: 2.104 on 4 and 228 DF, p-value: 0.08121
##
##
## Estimation results for equation d_log_long_rate:
## ================================================
## d_log_long_rate = d_log_wage_gap.l1 + d_log_treasury_gdp.l1 + d_log_trade_balance.l1 + d_log_long_rate.l1 + const
##
## Estimate Std. Error t value Pr(>|t|)
## d_log_wage_gap.l1 4.217837 0.963103 4.379 1.81e-05 ***
## d_log_treasury_gdp.l1 -0.035799 0.113366 -0.316 0.752
## d_log_trade_balance.l1 -0.186613 0.233699 -0.799 0.425
## d_log_long_rate.l1 0.340377 0.063166 5.389 1.77e-07 ***
## const -0.007907 0.006891 -1.147 0.252
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.1005 on 228 degrees of freedom
## Multiple R-Squared: 0.1647, Adjusted R-squared: 0.1501
## F-statistic: 11.24 on 4 and 228 DF, p-value: 2.431e-08
##
##
##
## Covariance matrix of residuals:
## d_log_wage_gap d_log_treasury_gdp d_log_trade_balance
## d_log_wage_gap 4.780e-05 2.561e-05 -3.254e-06
## d_log_treasury_gdp 2.561e-05 3.326e-03 -1.109e-04
## d_log_trade_balance -3.254e-06 -1.109e-04 7.873e-04
## d_log_long_rate -7.324e-05 -1.257e-03 1.275e-04
## d_log_long_rate
## d_log_wage_gap -7.324e-05
## d_log_treasury_gdp -1.257e-03
## d_log_trade_balance 1.275e-04
## d_log_long_rate 1.010e-02
##
## Correlation matrix of residuals:
## d_log_wage_gap d_log_treasury_gdp d_log_trade_balance
## d_log_wage_gap 1.00000 0.06424 -0.01677
## d_log_treasury_gdp 0.06424 1.00000 -0.06854
## d_log_trade_balance -0.01677 -0.06854 1.00000
## d_log_long_rate -0.10539 -0.21675 0.04520
## d_log_long_rate
## d_log_wage_gap -0.1054
## d_log_treasury_gdp -0.2167
## d_log_trade_balance 0.0452
## d_log_long_rate 1.0000
serial.test(var_longrate, lags.pt = 16, type = "PT.asymptotic")
##
## Portmanteau Test (asymptotic)
##
## data: Residuals of VAR object var_longrate
## Chi-squared = 253.07, df = 240, p-value = 0.2689
arch.test(var_longrate, lags.multi = 4)
##
## ARCH (multivariate)
##
## data: Residuals of VAR object var_longrate
## Chi-squared = 798.5, df = 400, p-value < 2.2e-16
roots(var_longrate)
## [1] 0.2771978 0.2771978 0.1030264 0.0027685
var_data_imports <- na.omit(data.frame(
d_log_wage_gap,
d_log_treasury_gdp,
d_log_trade_balance,
d_log_imports_ind_real_gdp
))
VARselect(var_data_imports, lag.max = 8, type = "const")
## $selection
## AIC(n) HQ(n) SC(n) FPE(n)
## 4 1 1 4
##
## $criteria
## 1 2 3 4 5
## AIC(n) -2.787851e+01 -2.791926e+01 -2.794509e+01 -2.802787e+01 -2.801697e+01
## HQ(n) -2.775636e+01 -2.769937e+01 -2.762748e+01 -2.761253e+01 -2.750390e+01
## SC(n) -2.757581e+01 -2.737440e+01 -2.715807e+01 -2.699868e+01 -2.674562e+01
## FPE(n) 7.807786e-13 7.497091e-13 7.308383e-13 6.732003e-13 6.812691e-13
## 6 7 8
## AIC(n) -2.797594e+01 -2.800538e+01 -2.800994e+01
## HQ(n) -2.736515e+01 -2.729687e+01 -2.720369e+01
## SC(n) -2.646243e+01 -2.624971e+01 -2.601210e+01
## FPE(n) 7.108584e-13 6.916515e-13 6.903860e-13
var_imports <- VAR(var_data_imports, p = 1, type = "const")
summary(var_imports)
##
## VAR Estimation Results:
## =========================
## Endogenous variables: d_log_wage_gap, d_log_treasury_gdp, d_log_trade_balance, d_log_imports_ind_real_gdp
## Deterministic variables: const
## Sample size: 233
## Log Likelihood: 1932.949
## Roots of the characteristic polynomial:
## 0.2583 0.2122 0.2122 0.07998
## Call:
## VAR(y = var_data_imports, p = 1, type = "const")
##
##
## Estimation results for equation d_log_wage_gap:
## ===============================================
## d_log_wage_gap = d_log_wage_gap.l1 + d_log_treasury_gdp.l1 + d_log_trade_balance.l1 + d_log_imports_ind_real_gdp.l1 + const
##
## Estimate Std. Error t value Pr(>|t|)
## d_log_wage_gap.l1 -0.1084483 0.0662459 -1.637 0.103
## d_log_treasury_gdp.l1 0.0055043 0.0076058 0.724 0.470
## d_log_trade_balance.l1 -0.0082362 0.0163274 -0.504 0.614
## d_log_imports_ind_real_gdp.l1 -0.0034263 0.0055251 -0.620 0.536
## const 0.0019508 0.0004806 4.059 6.78e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.006947 on 228 degrees of freedom
## Multiple R-Squared: 0.01585, Adjusted R-squared: -0.001416
## F-statistic: 0.918 on 4 and 228 DF, p-value: 0.4542
##
##
## Estimation results for equation d_log_treasury_gdp:
## ===================================================
## d_log_treasury_gdp = d_log_wage_gap.l1 + d_log_treasury_gdp.l1 + d_log_trade_balance.l1 + d_log_imports_ind_real_gdp.l1 + const
##
## Estimate Std. Error t value Pr(>|t|)
## d_log_wage_gap.l1 -1.114168 0.550286 -2.025 0.0441 *
## d_log_treasury_gdp.l1 0.300315 0.063179 4.753 3.54e-06 ***
## d_log_trade_balance.l1 0.198845 0.135627 1.466 0.1440
## d_log_imports_ind_real_gdp.l1 -0.005366 0.045895 -0.117 0.9070
## const 0.009328 0.003992 2.336 0.0203 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.05771 on 228 degrees of freedom
## Multiple R-Squared: 0.1048, Adjusted R-squared: 0.08906
## F-statistic: 6.67 on 4 and 228 DF, p-value: 4.294e-05
##
##
## Estimation results for equation d_log_trade_balance:
## ====================================================
## d_log_trade_balance = d_log_wage_gap.l1 + d_log_treasury_gdp.l1 + d_log_trade_balance.l1 + d_log_imports_ind_real_gdp.l1 + const
##
## Estimate Std. Error t value Pr(>|t|)
## d_log_wage_gap.l1 0.207310 0.268530 0.772 0.4409
## d_log_treasury_gdp.l1 -0.032395 0.030830 -1.051 0.2945
## d_log_trade_balance.l1 0.144799 0.066184 2.188 0.0297 *
## d_log_imports_ind_real_gdp.l1 -0.002548 0.022396 -0.114 0.9095
## const -0.001392 0.001948 -0.714 0.4758
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.02816 on 228 degrees of freedom
## Multiple R-Squared: 0.02866, Adjusted R-squared: 0.01162
## F-statistic: 1.682 on 4 and 228 DF, p-value: 0.1551
##
##
## Estimation results for equation d_log_imports_ind_real_gdp:
## ===========================================================
## d_log_imports_ind_real_gdp = d_log_wage_gap.l1 + d_log_treasury_gdp.l1 + d_log_trade_balance.l1 + d_log_imports_ind_real_gdp.l1 + const
##
## Estimate Std. Error t value Pr(>|t|)
## d_log_wage_gap.l1 1.385012 0.768036 1.803 0.072659 .
## d_log_treasury_gdp.l1 -0.217382 0.088179 -2.465 0.014431 *
## d_log_trade_balance.l1 0.044583 0.189295 0.236 0.814016
## d_log_imports_ind_real_gdp.l1 0.248827 0.064056 3.885 0.000134 ***
## const 0.007287 0.005572 1.308 0.192279
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.08054 on 228 degrees of freedom
## Multiple R-Squared: 0.09718, Adjusted R-squared: 0.08134
## F-statistic: 6.136 on 4 and 228 DF, p-value: 0.0001048
##
##
##
## Covariance matrix of residuals:
## d_log_wage_gap d_log_treasury_gdp
## d_log_wage_gap 4.826e-05 2.697e-05
## d_log_treasury_gdp 2.697e-05 3.330e-03
## d_log_trade_balance -1.557e-06 -1.062e-04
## d_log_imports_ind_real_gdp -4.609e-05 -5.165e-05
## d_log_trade_balance d_log_imports_ind_real_gdp
## d_log_wage_gap -1.557e-06 -4.609e-05
## d_log_treasury_gdp -1.062e-04 -5.165e-05
## d_log_trade_balance 7.930e-04 3.153e-04
## d_log_imports_ind_real_gdp 3.153e-04 6.487e-03
##
## Correlation matrix of residuals:
## d_log_wage_gap d_log_treasury_gdp
## d_log_wage_gap 1.000000 0.06727
## d_log_treasury_gdp 0.067272 1.00000
## d_log_trade_balance -0.007961 -0.06535
## d_log_imports_ind_real_gdp -0.082373 -0.01111
## d_log_trade_balance d_log_imports_ind_real_gdp
## d_log_wage_gap -0.007961 -0.08237
## d_log_treasury_gdp -0.065354 -0.01111
## d_log_trade_balance 1.000000 0.13902
## d_log_imports_ind_real_gdp 0.139016 1.00000
serial.test(var_imports, lags.pt = 16, type = "PT.asymptotic")
##
## Portmanteau Test (asymptotic)
##
## data: Residuals of VAR object var_imports
## Chi-squared = 336.45, df = 240, p-value = 3.896e-05
arch.test(var_imports, lags.multi = 4)
##
## ARCH (multivariate)
##
## data: Residuals of VAR object var_imports
## Chi-squared = 733.87, df = 400, p-value < 2.2e-16
roots(var_imports)
## [1] 0.25827270 0.21216369 0.21216369 0.07997633