set.seed(789)
N <- 100
x1 <- rnorm(N)
x2 <- rbinom(N, size = 1, prob = .2)
y <- x1^3 - 0.5 * x2 + rnorm(N, 0, 1)
y <- y * 10
X <- cbind(x1, x2, x1 + x2 * 3)
X <- cbind(X, "x3" = rexp(nrow(X)))
if (requireNamespace("SuperLearner", quietly = TRUE)) {
# Estimate Ensemble with SuperLearner
require(SuperLearner)
sl_m <- function(...) { SL.mgcv(formula = ~ x1 + x2 + x3, ...) }
fit_SL <- SuperLearner::SuperLearner(
Y = y, X = data.frame(X),
SL.library = "sl_m"
)
pred <- predict(fit_SL, newdata = data.frame(X))
}
# Estimate Double/Debiased Machine Learning
if (requireNamespace("DoubleML", quietly = TRUE)) {
require(DoubleML)
# Load the models; for testing *ONLY* have multiplier of 2
double_bam_1 <- LearnerRegrBam$new()
double_bam_1$param_set$values$formula <- ~ s(x1, x3, bs = "gKRLS",
xt = gKRLS(sketch_multiplier = NULL, sketch_size_raw = 2))
double_bam_2 <- LearnerClassifBam$new()
double_bam_2$param_set$values$formula <- ~ s(x1, x3, bs = "gKRLS",
xt = gKRLS(sketch_multiplier = NULL, sketch_size_raw = 2))
# Create data
dml_data <- DoubleMLData$new(
data = data.frame(X, y),
x_cols = c("x1", "x3"), y_col = "y",
d_cols = "x2"
)
# Estimate effects treatment (works for other DoubleML methods)
dml_est <- DoubleMLIRM$new(
data = dml_data,
n_folds = 2,
ml_g = double_bam_1,
ml_m = double_bam_2
)$fit()
}
Run the code above in your browser using DataLab