# generate some personalized dose scenario
exampleset <- function(size, ncov) {
X <- matrix(runif(size * ncov, -1, 1), ncol = ncov)
A <- runif(size, 0, 2)
Edr <- as.matrix(c(0.5, -0.5))
D_opt <- X %*% Edr + 1
mu <- 2 + 0.5 * (X %*% Edr) - 7 * abs(D_opt - A)
R <- rnorm(length(mu), mu, 1)
R <- R - min(R)
datainfo <- list(X = X, A = A, R = R, D_opt = D_opt, mu = mu)
return(datainfo)
}
# generate data
set.seed(123)
n <- 150
p <- 2
ndr <- 1
train <- exampleset(n, p)
test <- exampleset(500, p)
# the direct learning method
orthofit <- orthoDr_pdose(train$X, train$A, train$R,
ndr = ndr, lambda = 0.1,
method = "direct", K = sqrt(n), keep.data = TRUE,
maxitr = 150, verbose = FALSE, ncore = 2
)
dose <- predict(orthofit, test$X)
# ` # compare with the optimal dose
dosedistance <- mean((test$D_opt - dose$pred)^2)
print(dosedistance)
# the pseudo direct learning method
orthofit <- orthoDr_pdose(train$X, train$A, train$R,
ndr = ndr, lambda = seq(0.1, 0.2, 0.01),
method = "pseudo_direct", K = as.integer(sqrt(n)), keep.data = TRUE,
maxitr = 150, verbose = FALSE, ncore = 2
)
dose <- predict(orthofit, test$X)
# compare with the optimal dose
dosedistance <- mean((test$D_opt - dose$pred)^2)
print(dosedistance)
Run the code above in your browser using DataLab