############
# True beta functions
beta0_true <- function(Z){
tmp_Z <- (Z+1)/2
return( 3 * tmp_Z[,1] +
(2 - 5 * (tmp_Z[,2] > 0.5)) * sin(pi * tmp_Z[,1]) -
2 * (tmp_Z[,2] > 0.5))
}
beta1_true <- function(Z){
tmp_Z <- (Z+1)/2
return(sin(2*tmp_Z[,1] + 0.5)/(4*tmp_Z[,1] + 1) + (2*tmp_Z[,1] - 0.5)^3)
}
beta2_true <- function(Z){
tmp_Z <- (Z+1)/2
return( (3 - 3*cos(6*pi*tmp_Z[,1]) * tmp_Z[,1]^2) * (tmp_Z[,1] > 0.6) -
(10 * sqrt(tmp_Z[,1])) * (tmp_Z[,1] < 0.25) )
}
################
# Set problem dimensions
###############
set.seed(417)
n_all <- 500
ni_all <- rep(4, times = n_all) # 4 observations per subject
subj_id_all <- rep(1:n_all, each = 4) # give every subject an id number
N_all <- sum(ni_all) # total number of observations
p <- 2 # number of covariates
R_cont <- 20 # number of continuous modifiers
R_cat <- 0 # number of categorical modifiers
R <- R_cont + R_cat
################
# Generate covariates & modifiers
################
X_all <-
matrix(rnorm(N_all*p, mean = 0, sd = 1), nrow = N_all, ncol = p)
Z_cont_all <-
matrix(runif(N_all * R_cont, min = -1, max = 1), nrow = N_all, ncol = R_cont)
################
# Define true coefficient functions & noise level
###############
beta0_all <- beta0_true(Z_cont_all)
beta1_all <- beta1_true(Z_cont_all)
beta2_all <- beta2_true(Z_cont_all)
beta_all <- cbind(beta0_all, beta1_all, beta2_all)
sigma <- 0.1
################
# Generate response surface & outcomes
###############
mu_all <- beta0_all + X_all[,1] * beta1_all + X_all[,2] * beta2_all
Y_all <- mu_all + sigma * rnorm(n = N_all, mean = 0, sd = 1)
## Token run to ensure installation works
fit <-
VCBART_ind(Y_train = Y_all,
subj_id_train = subj_id_all,
ni_train = ni_all,
X_train = X_all,
Z_cont_train = Z_cont_all,
nd = 5, burn = 5,
verbose = FALSE)
# \donttest{
## Longer example
fit <-
VCBART_ind(Y_train = Y_all,
subj_id_train = subj_id_all,
ni_train = ni_all,
X_train = X_all,
Z_cont_train = Z_cont_all,
verbose = FALSE)
oldpar <- par(no.readonly = TRUE)
par(mar = c(3,3,2,1), mgp = c(1.8, 0.5, 0), mfrow = c(1,2))
plot(beta_all, fit$betahat.train.mean,
pch = 16, cex = 0.5,
xlab = "Actual", ylab = "Posterior Mean",
main = "Coefficients")
abline(a = 0, b = 1, col = 'blue')
plot(mu_all, fit$yhat.train.mean,
pch = 16, cex = 0.5,
xlab = "Actual", ylab = "Posterior Mean",
main = "Regression Function E[Y|X,Z]")
abline(a = 0, b = 1, col = 'blue')
par(oldpar)
# }
Run the code above in your browser using DataLab