IPWE_Mopt
aims at estimating the treatment regime which
maximizes the marginal mean of the potential outcomes.
IPWE_Mopt(data, regimeClass, moPropen = "BinaryRandom", max = TRUE,
s.tol = 1e-04, cl.setup = 1, p_level = 1, it.num = 10,
hard_limit = FALSE, pop.size = 3000)
a data frame, containing variables in the moPropen
and RegimeClass
and
a component y
as the response.
a formula specifying the class of treatment regimes to search,
e.g. if regimeClass = a~x1+x2
, and then this function will search the class of treatment regimes
of the form
$$d(x)=I\left(\beta_0 +\beta_1 x_1 + \beta_2 x_2 > 0\right).
$$
Polynomial arguments are also supported.
See also 'Details'.
The propensity score model for the probability of receiving
treatment level 1.
When moPropen
equals the string "BinaryRandom", the proportion of observations
receiving treatment level 1 in the sample will be employed
as a good estimate of the probability for each observation.
Otherwise, this argument should be a formula/string, based on which this function
will fit a logistic regression on the treatment level. e.g. a1~x1
.
logical. If max=TRUE
, it indicates we wish to maximize the marginal
mean; If max=FALSE
, we wish to minimize the marginal mean. The default is TRUE
.
This is the tolerance level used by genoud
.
Default is \(10^{-5}\) times the difference between
the largest and the smallest value in the observed responses.
This is particularly important when it comes to evaluating it.num
.
the number of nodes. >1 indicates choosing parallel computing option in
rgenoud::genoud
. Default is 1.
choose between 0,1,2,3 to indicate different levels of output from the genetic function. Specifically, 0 (minimal printing), 1 (normal), 2 (detailed), and 3 (debug.)
integer > 1. This argument will be used in rgeound::geound
function.
If there is no improvement in the objective function in this number of generations,
rgenoud::genoud
will think that it has found the optimum.
logical. When it is true the maximum number of generations
in rgeound::geound
cannot exceed 100. Otherwise, in this function, only
it.num
softly controls when genoud
stops. Default is FALSE
.
an integer with the default set to be 3000. This is the population number for the first generation
in the genetic algorithm (rgenoud::genoud
).
This function returns an object with 6 objects. Both coefficients
and coef.orgn.scale
were normalized to have unit euclidean norm.
coefficients
the parameters indexing the estimated mean-optimal treatment regime for standardized covariates.
coef.orgn.scale
the parameter indexing the estimated mean-optimal treatment regime for the original input covariates.
hatM
the estimated marginal mean when a treatment regime indexed by
coef.orgn.scale
is applied on everyone. See the 'details' for
connection between coef.orgn.scale
and
coefficient
.
call
the user's call.
moPropen
the user specified propensity score model
regimeClass
the user specified class of treatment regimes
Note that all estimation functions in this package use the same type of standardization on covariates. Doing so would allow us to provide a bounded domain of parameters for searching in the genetic algorithm.
This functions returns the estimated parameters indexing the mean-optimal treatment regime under two scales.
The returned coefficients
is the set of parameters when covariates are
all standardized to be in the interval [0, 1] by subtracting the smallest observed
value and divided by the difference between the largest and the smallest value.
While the returned coef.orgn.scale
corresponds to the original covariates,
so the associated decision rule can be applied directly to novel observations.
In other words, let \(\beta\) denote the estimated parameter in the original
scale, then the estimated treatment regime is:
$$ d(x)= I\{\hat{\beta}_0 + \hat{\beta}_1 x_1 + ... + \hat{\beta}_k x_k > 0\}.$$
The estimated \(\bm{\hat{\beta}}\) is returned as coef.orgn.scale
.
If, for every input covariate, the smallest observed value is exactly 0 and the range
(i.e. the largest number minus the smallest number) is exactly 1, then the estimated
coefficients
and coef.orgn.scale
will render identical.
zhang2012robustquantoptr
# NOT RUN {
GenerateData.test.IPWE_Mopt <- function(n)
{
x1 <- runif(n)
x2 <- runif(n)
tp <- exp(-1+1*(x1+x2))/(1+exp(-1+1*(x1+x2)))
error <- rnorm(length(x1), sd=0.5)
a <- rbinom(n = n, size = 1, prob=tp)
y <- 1+x1+x2 + a*(3 - 2.5*x1 - 2.5*x2) +
(0.5 + a*(1+x1+x2)) * error
return(data.frame(x1=x1,x2=x2,a=a,y=y))
}
# }
# NOT RUN {
n <- 500
testData <- GenerateData.test.IPWE_Mopt(n)
fit <- IPWE_Mopt(data=testData, regimeClass = a~x1+x2,
moPropen=a~x1+x2,
pop.size=1000)
fit
# }
# NOT RUN {
# }
Run the code above in your browser using DataLab