(Acest articol a fost publicat pentru prima dată pe DateAgeeekși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
Conform graficului de mai jos, sugerat de Fernando Leibovici, creșterea incertitudinii care a început la sfârșitul anului 2024 se aliniază cu o creștere a importurilor, ceea ce indică faptul că importatorii americani au accelerat achizițiile lor ca o precauție împotriva creșterilor tarifelor preconizate sau a perturbărilor lanțului de aprovizionare.

Când modelăm variabilele cu motorul GLMNET, putem vedea că acest impact este limitat și negativ. Acest lucru ar putea confirma gândul că Fernando Leibovici a sugerat că această aliniere se datorează în mare parte importurilor de aur.


Cod sursă:
library(tidyverse)
library(tidymodels)
library(tidyquant)
library(timetk)
#Imports of Goods and Services: Balance of Payments Basis (BOPTIMP)
df_imports <-
tq_get("BOPTIMP", get = "economic.data") %>%
select(date = observation_date, imports = BOPTIMP)
#Economic Policy Uncertainty Index: Categorical Index: Trade policy (EPUTRADE)
df_uncertainty <-
tq_get("EPUTRADE", get = "economic.data") %>%
select(date = observation_date, uncertainty = EPUTRADE)
#Merging the datasets
df_merged <-
df_imports %>%
left_join(df_uncertainty) %>%
drop_na()
df_merged %>%
plot_acf_diagnostics(date,
imports,
.ccf_vars = "uncertainty")
#Correlation
df_merged %>%
filter(date >= first(date) - months(3)) %>%
tq_performance(Ra = imports,
Rb = uncertainty,
performance_fun = table.Correlation)
#Data split
splits <- initial_time_split(df_merged, prop = 0.8)
df_train <- training(splits)
df_test <- testing(splits)
#Bootstrapping for tuning
set.seed(12345)
df_folds <- bootstraps(df_train,
times = 100)
#Recipe Preprocessing Specification
rec_spec <-
recipe(imports ~ ., data = training(splits)) %>%
step_fourier(date, period = 30, K = 1) %>%
step_date(date, features = c("month", "year")) %>%
step_rm(date) %>%
step_dummy(all_nominal_predictors(), one_hot = TRUE) %>%
step_normalize(all_numeric_predictors())
#Model Specification
model_spec <-
linear_reg(
mode = "regression",
penalty = tune()
) %>%
set_engine("glmnet")
#Workflow sets
wflow_ <-
workflow_set(
preproc = list(recipe = rec_spec),
models = list(model = model_spec)
)
#Tuning and evaluating all the models
grid_ctrl <-
control_grid(
save_pred = TRUE,
parallel_over = "everything",
save_workflow = TRUE
)
grid_results <-
wflow_ %>%
workflow_map(
seed = 98765,
resamples = df_folds,
grid = 10,
control = grid_ctrl
)
#Accuracy of the grid results
grid_results %>%
rank_results(select_best = TRUE,
rank_metric = "rsq") %>%
select(Models = wflow_id, .metric, mean)
# A tibble: 2 × 3
#Models .metric mean
#
#1 recipe_model rmse 18389.
#2 recipe_model rsq 0.804
#Finalizing the model with the best parameters
best_param <-
grid_results %>%
extract_workflow_set_result("recipe_model") %>%
select_best(metric = "rsq")
wflw_fit <-
grid_results %>%
extract_workflow("recipe_model") %>%
finalize_workflow(best_param) %>%
fit(df_train)
#Variable importance
library(DALEXtra)
#Processed data frame for variable importance calculation
imp_data <-
rec_spec %>%
prep() %>%
bake(new_data = NULL)
#Explainer object
explainer_ <-
explain_tidymodels(
wflw_fit %>% extract_fit_parsnip(),
data = imp_data %>% select(-imports),
y = imp_data$imports,
label = "",
verbose = FALSE
)
#Model Studio
library(modelStudio)
set.seed(1983)
modelStudio::modelStudio(explainer_,
B = 100,
viewer = "browser")
