R/forest.wrapper.R

#' 
#' Create forest to compute difft
#' 
#' \code{vt.forest} is a wrapper of \code{\link{VT.forest.one}}, 
#' \code{\link{VT.forest.double}} and \code{\link{VT.forest.fold}}. With 
#' parameter forest.type, any of these class can be used with its own parameter.
#' 
#' @param forest.type must be a character. "one" to use VT.forest.one class. 
#'   "double" to use VT.forest.double. "fold" to use VT.forest.fold.
#' @param vt.data \code{\link{VT.object}}. Can be return of \code{vt.data()} 
#'   function
#' @param interactions logical. If running VirtualTwins with treatment's 
#'   interactions, set to TRUE (default value)
#' @param method character c("absolute", "relative", "logit"). See 
#'   \code{\link{VT.difft}}.
#' @param model allows to give a model you build outside this function. Can be 
#'   randomForest, train or cforest. Is only used with forest.type = "one". If 
#'   NULL, a randomForest model is grown inside the function. NULL is default.
#' @param model_trt0 works the same as model parameter. Is only used with 
#'   forest.type = "double". If NULL, a randomForest model is grown inside the 
#'   function. NULL is default. See \code{\link{VT.forest.double}} for details.
#' @param model_trt1 see model_trt0 explanation and 
#'   \code{\link{VT.forest.double}} details.
#' @param fold number of fold you want to construct forest with k-fold method. 
#'   Is only used with forest.type = "fold". Default to 5. See 
#'   \code{\link{VT.forest.fold}}
#' @param ratio numeric value that allow sampsize to be a bit controlled.
#'   Default to 1. See \code{\link{VT.forest.fold}}.
#' @param ... randomForest() function parameters. Can be used for any forest.type.
#'   
#' @return \code{VT.difft}
#'  
#' @examples
#' 
#' data(sepsis)
#' vt.o <- vt.data(sepsis, "survival", "THERAPY", T)
#' # inside model :
#' vt.f <- vt.forest("one", vt.o)
#' # ...
#' # your model :
#' # library(randomForest)
#' # rf <- randomForest(y = vt.o$getY(),
#' #                    x = vt.o$getX(int = T),
#' #                    mtry = 3,
#' #                    nodesize = 15)
#' # vt.f <- vt.forest("one", vt.o, model = rf)
#' # ...
#' # Can also use ... parameters
#' vt.f <- vt.forest("one", vt.o, mtry = 3, nodesize = 15)
#' # ...
#'    
#' 
#' @include forest.R difft.R
#'   
#' @name vt.forest
#'   
#' @export vt.forest
vt.forest <- function(forest.type = "one", vt.data, interactions = T, method = "absolute", 
                      model = NULL, model_trt1 = NULL, model_trt0 = NULL, ratio = 1, fold = 10, ...){
  if(!inherits(vt.data, "VT.object"))
    stop("vt.data must be VT.object class")
  
  params <- list(...)
  if (forest.type == "one"){
    if(is.null(model)){
      model <- randomForest::randomForest(x = vt.data$getX(interactions = interactions, trt = NULL),
                         y = vt.data$getY(), 
                         ...)       
    }
    rf <- model
    
    vt.difft <- VT.forest.one(vt.object = vt.data, model = rf, interactions = interactions, method = method)
  } else if (forest.type == "double"){
    if(is.null(model_trt1)){
      model_trt1 <- randomForest::randomForest(x = vt.data$getX(trt = 1),
                                  y = vt.data$getY(1),
                                 ...)
    }
    rf_trt1 <- model_trt1
    
    if(is.null(model_trt0)){
      model_trt0 <- randomForest::randomForest(x = vt.data$getX(trt = 0),
                                  y = vt.data$getY(0),
                                  ...)
    }
    rf_trt0 <- model_trt0
    
    vt.difft  <- VT.forest.double(vt.object = vt.data, model_trt1 = rf_trt1, model_trt0 = rf_trt0, method = method)
  } else if (forest.type == "fold"){
    vt.difft <- VT.forest.fold(vt.object = vt.data, fold = fold, ratio = ratio, 
                                               interactions = interactions, method = method)
    
  } else
    stop("forest.type must be one, double or fold")
  if(forest.type %in% c("one", "double"))
    vt.difft$run()
  else
    vt.difft$run(...)
  return(vt.difft)
} 
prise6/aVirtualTwins documentation built on May 8, 2019, 6:50 p.m.