Type: | Package |
Title: | Causal Analysis for Macroeconomic Time Series (ECM-MARS, BSTS, Bayesian GLM-AR(1)) |
Version: | 1.0.2 |
Description: | Implements three complementary pipelines for causal analysis on macroeconomic time series: (1) Error-Correction Models with Multivariate Adaptive Regression Splines (ECM-MARS), (2) Bayesian Structural Time Series (BSTS), and (3) Bayesian GLM with AR(1) errors validated with Leave-Future-Out (LFO). Heavy backends (Stan) are optional and never used in examples or tests. |
VignetteBuilder: | knitr |
License: | MIT + file LICENSE |
Encoding: | UTF-8 |
Depends: | R (≥ 4.1) |
Imports: | brms, readxl, dplyr, tidyr, tibble, purrr, bsts, BoomSpikeSlab, tseries, urca, vars, progressr, future.apply, rlang, magrittr, parallel, stats, utils |
Suggests: | knitr, cmdstanr, rstan, future, RhpcBLASctl, rmarkdown, testthat (≥ 3.0.0) |
URL: | https://github.com/IsadoreNabi/EconCausal |
BugReports: | https://github.com/IsadoreNabi/EconCausal/issues |
Additional_repositories: | https://stan-dev.r-universe.dev |
RoxygenNote: | 7.3.3 |
Config/testthat/edition: | 3 |
Language: | en-US |
NeedsCompilation: | no |
Packaged: | 2025-10-01 21:20:48 UTC; ROG |
Author: | José Mauricio Gómez Julián [aut, cre] |
Maintainer: | José Mauricio Gómez Julián <isadore.nabi@pm.me> |
Repository: | CRAN |
Date/Publication: | 2025-10-08 08:40:24 UTC |
Bayesian Generalized Linear Model with AR(1) Errors
Description
Implements a Bayesian GLM with autoregressive errors of order 1 for causal inference between economic variables, with emphasis on temporal stability through Leave-Future-Out cross-validation.
Usage
bglmar1(
data_path,
circ_vars,
prod_vars,
max_lag = 3,
initial_frac = 0.7,
initial_min = 90,
test_h = 12,
step_h = 12,
lfo_window = "sliding",
chains = 4,
parallel_chains = 4,
iter = 1500,
warmup = 750,
adapt_delta = 0.95,
trees = 12,
seed = 2025,
support_min = 0.6,
folds_min = 5,
sup_hi = 0.7,
sup_lo = 0.6,
backend = c("auto", "rstan", "cmdstanr")
)
Arguments
data_path |
Path to Excel file containing the data |
circ_vars |
Character vector of circulation variable names |
prod_vars |
Character vector of production variable names |
max_lag |
Maximum number of lags for independent variables (default: 3) |
initial_frac |
Initial fraction of data for training (default: 0.7) |
initial_min |
Minimum number of observations for initial training (default: 90) |
test_h |
Test horizon in months (default: 12) |
step_h |
Step size between folds in months (default: 12) |
lfo_window |
Type of window for LFO ("sliding" or "expanding", default: "sliding") |
chains |
Number of MCMC chains (default: 4) |
parallel_chains |
Number of parallel chains (default: 4) |
iter |
Total iterations per chain (default: 1500) |
warmup |
Warmup iterations per chain (default: 750) |
adapt_delta |
Adapt delta parameter for NUTS (default: 0.95) |
trees |
Maximum tree depth for NUTS (default: 12) |
seed |
Random seed (default: 2025) |
support_min |
Minimum support threshold for stable relationships (default: 0.6) |
folds_min |
Minimum number of folds required (default: 5) |
sup_hi |
High support threshold (default: 0.7) |
sup_lo |
Low support threshold (default: 0.6) |
backend |
Backend for Stan compilation: "auto" (default), "rstan", or "cmdstanr". If "auto", the function uses 'rstan' when available, otherwise tries 'cmdstanr'. |
Details
This function implements a Bayesian GLM with AR(1) errors for assessing causal relationships between economic variables. It uses Leave-Future-Out cross-validation with sliding windows to evaluate temporal stability of relationships. The function no longer requires 'cmdstanr' at install time; if 'backend = "cmdstanr"' is requested but 'cmdstanr' (and a working CmdStan) are not available, it gracefully falls back to 'rstan'. In any case, heavy computations are not run in package examples or tests.
Value
A list containing:
bench_bayes |
Full results for all pairs |
winners_070 |
Pairs with support >= 0.70 |
winners_060 |
Pairs with support >= 0.60 |
rank_out |
Output from ranking function |
Examples
## Not run:
# Example usage
result <- bglmar1(
data_path = file.path(tempdir(), "data.xlsx"),
circ_vars = c("TC_SPOT_CAN_US", "TC_SPOT_US_CAN", "TC_SPOT_US_REMB",
"IPC", "TdI_LdelT", "TasaDescuento"),
prod_vars = c("ValorExportaciones", "Real_Net_Profit",
"RealSocialConsumptionPerWorker2017", "RealWage_PPP2017",
"CapitalStock_PPP2017", "LaborProductivity_PPP2017",
"InvestmentPerWorker_PPP2017"),
backend = "auto"
)
## End(Not run)
Bayesian Structural Time Series Model
Description
Implements Bayesian Structural Time Series models with Leave-Future-Out validation for assessing causal relationships between economic variables with temporal stability.
Usage
bsts_model(
data_path,
circ_vars,
prod_vars,
max_lag = 6,
lfo_init_frac = 0.8,
lfo_h = 6,
lfo_step = 6,
niter = 2000,
burn = 500,
seed = 123,
seasonality = NULL,
support_min = 0.6,
folds_min = 5,
sup_hi = 0.7,
sup_lo = 0.6,
out_dir = NULL
)
Arguments
data_path |
Path to Excel file containing the data |
circ_vars |
Character vector of circulation variable names |
prod_vars |
Character vector of production variable names |
max_lag |
Maximum number of lags for independent variables (default: 6) |
lfo_init_frac |
Initial fraction for LFO (default: 0.8) |
lfo_h |
Horizon for LFO (default: 6) |
lfo_step |
Step size for LFO (default: 6) |
niter |
Number of MCMC iterations (default: 2000) |
burn |
Number of burn-in iterations (default: 500) |
seed |
Random seed (default: 123) |
seasonality |
Seasonality parameter (NULL for none, 12 for monthly) |
support_min |
Minimum support threshold (default: 0.6) |
folds_min |
Minimum number of folds required (default: 5) |
sup_hi |
High support threshold (default: 0.7) |
sup_lo |
Low support threshold (default: 0.6) |
out_dir |
Output directory for results (default: "output_bsts") |
Details
This function implements Bayesian Structural Time Series models for assessing causal relationships between economic variables. It uses Leave-Future-Out cross-validation with tuning between Local Level and Local Linear Trend specifications. The methodology is described in detail in the methodological document "DETALLES METODOLOGICOS SPACESTATE MODEL.docx".
Value
A list containing:
rank_ss_all |
Full results for all pairs |
winners_ss_070 |
Pairs with support >= 0.70 |
winners_ss_060 |
Pairs with support >= 0.60 |
summaries_ss |
Summary statistics |
Examples
## Not run:
# Example usage
result <- bsts_model(
data_path = file.path(tempdir(), "data.xlsx"),
circ_vars = c("TC_SPOT_CAN_US", "TC_SPOT_US_CAN", "TC_SPOT_US_REMB",
"IPC", "TdI_LdelT", "TasaDescuento"),
prod_vars = c("ValorExportaciones", "Real_Net_Profit",
"RealSocialConsumptionPerWorker2017", "RealWage_PPP2017",
"CapitalStock_PPP2017", "LaborProductivity_PPP2017",
"InvestmentPerWorker_PPP2017")
)
## End(Not run)
Error Correction Model with Multivariate Adaptive Regression Splines
Description
Implements a robust ECM benchmark with MARS enhancement for analyzing cointegration relationships between economic variables with temporal stability validation.
Usage
ecm_mars(
data_path,
circ_vars,
prod_vars,
cointeg_rule = "either",
eg_p_cutoff = 0.05,
ecm_p_cutoff = 0.05,
lag_max_ecm = 4,
min_tr = 20,
min_te = 8,
rolling_cv_enable = TRUE,
rolling_cv_window = "sliding",
rolling_cv_initial_frac = 0.8,
rolling_cv_initial_min = 40,
rolling_cv_test = 12,
rolling_cv_step = 12,
nested_tune = TRUE,
nested_initial_f = 0.6,
nested_test = 6,
nested_step = 3,
mars_grid = expand.grid(degree = c(1, 2), nk = c(15, 25, 35, 50, 65)),
support_min = 0.75,
folds_min_abs = 5,
parallel_enable = TRUE,
parallel_workers = max(1, parallel::detectCores() - 1)
)
Arguments
data_path |
Path to Excel file containing the data |
circ_vars |
Character vector of circulation variable names |
prod_vars |
Character vector of production variable names |
cointeg_rule |
Cointegration rule ("either" for EG or Johansen, "both" for both) |
eg_p_cutoff |
Significance level for EG/Phillips-Ouliaris test (default: 0.05) |
ecm_p_cutoff |
Significance level for lambda<0 test in linear ECM (default: 0.05) |
lag_max_ecm |
Maximum lags in DeltaY and DeltaX for linear ECM (default: 4) |
min_tr |
Minimum training rows for MARS (default: 20) |
min_te |
Minimum test rows (default: 8) |
rolling_cv_enable |
Whether to enable rolling CV (default: TRUE) |
rolling_cv_window |
Type of window for rolling CV ("sliding" or "expanding", default: "sliding") |
rolling_cv_initial_frac |
Initial fraction for rolling CV (default: 0.8) |
rolling_cv_initial_min |
Minimum initial observations (default: 40) |
rolling_cv_test |
Test horizon for rolling CV (default: 12) |
rolling_cv_step |
Step size for rolling CV (default: 12) |
nested_tune |
Whether to enable nested tuning (default: TRUE) |
nested_initial_f |
Initial fraction for nested tuning (default: 0.6) |
nested_test |
Test horizon for nested tuning (default: 6) |
nested_step |
Step size for nested tuning (default: 3) |
mars_grid |
Data frame with MARS tuning parameters |
support_min |
Minimum proportion of valid folds (default: 0.75) |
folds_min_abs |
Minimum absolute number of valid folds (default: 5) |
parallel_enable |
Whether to enable parallel processing (default: TRUE) |
parallel_workers |
Number of parallel workers (default: detectCores() - 1) |
Details
This function implements an Error Correction Model enhanced with Multivariate Adaptive Regression Splines for analyzing cointegration relationships between economic variables. It includes comprehensive temporal validation through rolling-origin cross-validation and nested tuning for MARS parameters. The methodology is described in detail in the methodological document "DETALLES METODOLOGICOS DE ECM-MARS2.docx".
Value
A data frame with evaluation results for all pairs
Examples
## Not run:
# Example usage
result <- ecm_mars(
data_path = file.path(tempdir(), "data.xlsx"),
circ_vars = c("ER.SPOT.CAN.US", "ER.SPOT.US.CAN", "ER.SPOT.US.REMB",
"CPI", "TreasuryBonds10y", "FedDiscountRate"),
prod_vars = c("Exports", "RealNetProfit", "RealSocialConsumptionPerWorker2017",
"RealWagePPP2017", "CapitalStockPPP2017",
"LaborProductivityPPP2017", "InvestmentPerWorkerPPP2017")
)
## End(Not run)