# \donttest{
p_cont_mu <- 5
p_cat_mu <- 5
p_mu <- p_cont_mu + p_cat_mu
p_cont_tau <- 5
p_cat_tau <- 5
p_tau <- p_cont_tau + p_cat_tau
mu_func <- function(X_cont_mu, X_cat_mu){
scaled_X_cont <- (X_cont_mu + 1)/2 # moves it to [0,1]
tmp1 <- sin(pi * scaled_X_cont[,1] * scaled_X_cont[,2])
tmp2 <- (scaled_X_cont[,3] - 0.5)^2
tmp3 <- scaled_X_cont[,4]
tmp4 <- scaled_X_cont[,5]
return(1 * tmp1 +
2 * (X_cat_mu[,1] %in% c(0, 2, 4,6,8)) * tmp2 +
1 * (X_cat_mu[,2] %in% c(1,2,3,6,7,8)) * tmp3 +
0.5 * (X_cat_mu[,1] %in% c(1,2,3,4,5)) * tmp4)
}
tau_func <- function(X_cont_tau, X_cat_tau){
scaled_X_cont <- (X_cont_tau + 1)/2 # moves it to [0,1]
z1 <- scaled_X_cont[,1]
z2 <- 1*(X_cat_tau[,1] %in% c(0,1,2,8,9))
return(3 * z1 + (2 - 5*z2)*sin(pi * z1) - 2 * (z2))
}
n_control <- 20000
n_treat <- 10000
n <- n_control+ n_treat
treated <- c(rep(0, times = n_control), rep(1, times = n_treat))
# controls first and then treated
set.seed(129)
X_cont_mu <- matrix(runif(n * p_cont_mu, -1, 1), nrow = n, ncol = p_cont_mu)
X_cat_mu <- matrix(NA, nrow = n, ncol = p_cat_mu)
cat_levels_list_mu <- list()
for(j in 1:p_cat_mu){
X_cat_mu[,j] <- as.integer(sample(0:9), size = n, replace = TRUE)
cat_levels_list_mu[[j]] <- 0:9
}
# only contains stuff for treated subjects
X_cont_tau <- matrix(runif(n_treat * p_cont_tau, -1, 1), nrow = n_treat, ncol = p_cont_tau)
X_cat_tau <- matrix(NA, nrow = n_treat, ncol = p_cat_tau)
cat_levels_list_tau <- list()
for(j in 1:p_cat_mu){
X_cat_tau[,j] <- as.integer(sample(0:9), size = n_treat, replace = TRUE)
cat_levels_list_tau[[j]] <- 0:9
}
mu_true <- mu_func(X_cont_mu, X_cat_mu)
tau_true <- tau_func(X_cont_tau, X_cat_tau)
mean_response <- mu_true + c(rep(0, times = n_control), tau_true)
set.seed(328)
sigma <- 0.1
Y <- mean_response + sigma * rnorm(n = n, mean = 0, sd = 1)
fit <-
flexBCF(Y_train = Y,
treated = treated,
X_cont_mu = X_cont_mu,
X_cat_mu = X_cat_mu,
X_cont_tau = X_cont_tau,
X_cat_tau = X_cat_tau,
cat_levels_list_mu = cat_levels_list_mu,
cat_levels_list_tau = cat_levels_list_tau,
sparse = TRUE, M_mu = 50, M_tau = 50)
# Get posterior evaluations of mu
mu_samples <-
get_tree_fits(fit = fit, type = c("mu"),
X_cont = X_cont_mu,
X_cat = X_cat_mu)
plot(mu_true, colMeans(mu_samples), pch = 16, cex = 0.2)
tau_samples <-
get_tree_fits(fit = fit, type = c("tau"),
X_cont = X_cont_tau,
X_cat = X_cat_tau)
plot(tau_true, colMeans(tau_samples), pch = 16, cex = 0.2)
# }
Run the code above in your browser using DataLab