Generate Pseudo-Responses Based on Conditional Quantile Regression Models
Generate Pseudo-Responses Based on Conditional Quantile Regression Models
This function supports the DR_Qopt function. For every observation, we generate pseudo-observations corresponding to treatment 0 and 1 respectively based on working conditional quantile models.
raw.data: A data frame, must contain all the variables that appear in moCondQuant_0 and moCondQuant_1.
length.out: an integer greater than 1. If one of the conditional quantile model is set to be nonlinear, this argument will be triggered and we will fit length.out models across quantiles equally spaced between 0.001 and 0.999. The larger this value, the more refined the performance of this method. Default is 200.
txVec: a numeric vector of observed treatment levels coded 0L and 1L.
moCondQuant_0: A formula, used to specify the formula for the conditional quantile function when treatment = 0.
moCondQuant_1: A formula, used to specify the formula for the conditional quantile function when treatment = 1.
nlCondQuant_0: logical. When nlCondQuant_0 = TRUE, it is indicated that moCondQuant_0 is nonlinear. The default value of this variable is FALSE.
nlCondQuant_1: logical. When nlCondQuant_1 = TRUE, it is indicated that moCondQuant_1 is nonlinear. The default value of this variable is FALSE.
start_0: either a list object, providing the starting value in estimating the parameters in the nonlinear conditional quantile model, given that treatment=0. Default is NULL, corresponding to the case when nlCondQuant_0=FALSE.
start_1: either a list object, providing the starting value in estimating the parameters in the nonlinear conditional quantile model, given that treatment=0. Default is NULL, corresponding to the case when nlCondQuant_1=FALSE.
clnodes: Either a cluster object to enable parallel computation or NULL. If NULL, no parallel computation will be used.
Returns
It returns a list object, consisting of the following elements:
y.a.0, the vector of estimated individual level pseudo outcomes, given the treatment is 0;
y.a.1, the vector of estimated individual level pseudo outcomes, given the treatment is 1;
nlCondQuant_0, logical, indicating whether the y.a.0
is generated based on a nonlinear conditional quantile model.
nlCondQuant_1, logical, indicating whether the y.a.1
is generated based on a nonlinear conditional quantile model.
Details
This function implements the algorithm to generate individual level pseudo responses for two treatment levels respectively.
For each observation, two independent random variables from unif[0,1] are generated. Denote them by u0
and u1. Approximately, this function then estimates the u0th quantile of this observation were treatment level 0 is applied via the conditional u0th quantile regression. This estimated quantile will be the pseudo-response for treatment 0. Similarly, this function the pseudo-response for treatment 1 will be estimated and returned.
See the reference paper for a more formal explanation.
Examples
ilogit <-function(x) exp(x)/(1+ exp(x))GenerateData.DR <-function(n){ x1 <- runif(n,min=-1.5,max=1.5) x2 <- runif(n,min=-1.5,max=1.5) tp <- ilogit(1-1*x1^2-1* x2^2) a <-rbinom(n,1,tp) y <- a * exp(0.11- x1- x2)+ x1^2+ x2^2+ a*rgamma(n, shape=2*x1+3, scale =1)+(1-a)*rnorm(n, mean =2*x1 +3, sd =0.5) return(data.frame(x1=x1,x2=x2,a=a,y=y))}regimeClass = as.formula(a ~ x1+x2)moCondQuant_0 = as.formula(y ~ x1+x2+I(x1^2)+I(x2^2))moCondQuant_1 = as.formula(y ~ exp(0.11- x1 - x2)+ x1^2+ p0 + p1*x1
+ p2*x1^2+ p3*x1^3+p4*x1^4)start_1 = list(p0=0, p1=1.5, p2=1, p3 =0,p4=0)## Not run:n<-200testdata <- GenerateData.DR(n)fit1 <- augX(raw.data=testdata, txVec = testdata$a, moCondQuant_0=moCondQuant_0, moCondQuant_1=moCondQuant_1, nlCondQuant_0=FALSE, nlCondQuant_1=TRUE, start_1=start_1, clnodes=NULL)# How to use parallel computing in AugX(): ### on Mac OSX/linux clnodes <- parallel::makeForkCluster(nnodes =getOption("mc.cores",2)) fit2 <- augX(raw.data=testdata, length.out =5, txVec = testdata$a, moCondQuant_0=moCondQuant_0, moCondQuant_1=moCondQuant_1, nlCondQuant_0=FALSE, nlCondQuant_1=TRUE, start_1=start_1, clnodes=clnodes)# on Windows clnodes <- parallel::makeCluster(2, type="PSOCK") fit3 <- augX(raw.data=testdata, length.out =5, txVec = testdata$a, moCondQuant_0=moCondQuant_0, moCondQuant_1=moCondQuant_1, nlCondQuant_0=FALSE, nlCondQuant_1=TRUE, start_1=start_1, clnodes=clnodes)## End(Not run)