#' Estimate treatment-group-specific response means and (optionally)
#' treatment group contrasts.
#'
#' @param df A data.frame with the required columns
#' @param treat_col Name of column in df with treatment variable
#' @param response_col Name of the column in df with response variable
#' @param strata_cols Names of columns in df with strata variables
#' @param covariate_cols Names of columns in df with covariate variables
#' @param car_scheme Name of the type of covariate-adaptive randomization scheme
#' @param adj_method Name of linear adjustment method to use
#' @param vcovHC Type of heteroskedasticity-consistent variance estimates
#' @param covariate_to_include_strata Whether to include strata variables in covariate adjustment. Defaults to F for ANOVA and ANCOVA; defaults to T for ANHECOVA. User may override by passing in this argument.
#' @param conf_level Level for confidence intervals
#' @param contrast An optional function to specify a desired contrast
#'
#' @import dplyr
#' @export
#' @examples
#' data<-RobinCar:::data_sim
#' data$A<-as.factor(data$A)
#' fit.anova<-robincar_linear(df = data,
#' response_col="y",
#' treat_col="A",
#' strata_cols=c("z1", "z2"),
#' covariate_cols=c("x1", "x3"),
#' car_scheme="biased-coin",
#' adj_method="ANCOVA",
#' vcovHC="HC0",
#' covariate_to_include_strata=TRUE)
#' fit.ancova<-robincar_linear(df = data,
#' response_col="y",
#' treat_col="A",
#' strata_cols=c("z1", "z2"),
#' covariate_cols=c("x1", "x3"),
#' car_scheme="biased-coin",
#' adj_method="ANHECOVA",
#' vcovHC="HC0",
#' covariate_to_include_strata=TRUE)
#' fit.anhecova<-robincar_linear(df = data,
#' response_col="y",
#' treat_col="A",
#' strata_cols=c("z1", "z2"),
#' covariate_cols=c("x1", "x3"),
#' car_scheme="biased-coin",
#' adj_method="ANHECOVA",
#' vcovHC="HC0",
#' covariate_to_include_strata=TRUE)
#'
#' fit.anova<-robincar_linear(df = data,
#' response_col="y",
#' treat_col="A",
#' strata_cols=c("z1", "z2"),
#' covariate_cols=c("x1", "x3"),
#' car_scheme="simple",
#' adj_method="ANOVA",
#' vcovHC="HC0",
#' contrast_h="diff")
#' odds.ratio<-function(theta){
#' theta0<-theta[1]
#' theta1<-theta[2]
#' theta2<-theta[3]
#' OR01<-theta1/(1-theta1)/(theta0/(1-theta0))
#' OR02<-theta2/(1-theta2)/(theta0/(1-theta0))
#' return(c(OR01,OR02))
#'}
#' robincar_contrast(fit.anova$main, contrast_h=odds.ratio)
#'
#' n <- 1000
#' df <- data.frame(A=rbinom(n, size=1, prob=0.5),
#' y=rnorm(n),
#' x1=rnorm(n),
#' x2=rnorm(n),
#' x3=as.factor(rbinom(n, size=1, prob=0.5)),
#' z1=rbinom(n, size=1, prob=0.5),
#' z2=rbinom(n, size=1, prob=0.5))
#' df$A <- as.factor(df$A)
#'
#' fit.ancova<-robincar_linear(df = df,
#' response_col="y",
#' treat_col="A",
#' strata_cols=c("z1", "z2"),
#' covariate_cols=c("x1", "x2"),
#' car_scheme="biased-coin",
#' adj_method="ANCOVA",
#' vcovHC="HC3")
#' fit.anhecova<-robincar_linear(df = df,
#' response_col="y",
#' treat_col="A",
#' strata_cols=c("z1", "z2"),
#' covariate_cols=c("x1"),
#' car_scheme="biased-coin",
#' adj_method="ANHECOVA",
#' vcovHC="HC0")
robincar_linear <- function(df,
treat_col, response_col, strata_cols=NULL, covariate_cols=NULL,
car_scheme="simple", adj_method="ANOVA", vcovHC="HC0",
covariate_to_include_strata=NULL,
conf_level=0.95,
contrast_h=NULL, contrast_dh=NULL){
.check.car_scheme(car_scheme)
.check.adj_method.linear(adj_method)
.check.vcovHC(vcovHC)
# Create data object and validate
data <- .make.data(
df=df, classname="RoboDataLinear",
treat_col=treat_col,
response_col=response_col,
strata_cols=strata_cols,
covariate_cols=covariate_cols
)
validate(data)
# Create model object
model <- .make.model(
data=data,
adj_method=adj_method,
car_scheme=car_scheme,
vcovHC=vcovHC,
covariate_to_include_strata=covariate_to_include_strata
)
# Perform linear adjustment
result <- adjust(model, data)
# Create transformation object
if(!is.null(contrast_h)){
c_result <- robincar_contrast(
result=result,
contrast_h=contrast_h,
contrast_dh=contrast_dh
)
result <- list(
main=result, contrast=c_result
)
}
print(result)
return(result)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.