R/ass.tile_Function.R

ass.tile <- function (df = ds, df_train = ds1, df_test = ds2, prob = "p_", 
                      tile_name = "p_Tile", model = NULL, model_var = "X1", assign_data = "all", 
                      n = 10, TrainIndex = "TrainIndex") 
{
  all <- deparse(substitute(df))
  
  df <- as.data.frame(df)  

  # Assign Predictions
  if (class(model) == "NULL") {
    train <- df[df[, TrainIndex] == 1, ]
    test <- df[df[, TrainIndex] == 0, ]
  }
  else if (class(model)[1] == "glm") {
    df[, prob] <- predict(model, df, type = "response")
    train <- df[df[, TrainIndex] == 1, ]
    test <- df[df[, TrainIndex] == 0, ]
  }
  else if (class(model)[1] == "train") {
    if (is.null(model_var)) {
      df[, prob] <- predict(model, df)
    }
    else {
      df[, prob] <- predict(model, df, type = "prob")[, model_var]
    }
    train <- df[df[, TrainIndex] == 1, ]
    test <- df[df[, TrainIndex] == 0, ]
  }
  
  #================================================================================#
  
  # Assign Tiles
  train[, tile_name] <- ntile(train[, prob], n = n)
  df[, tile_name] <- 0
  df[between(df[, prob], -Inf, max(train[train[, tile_name] == 
                                           1, prob])), tile_name] <- 1
  for (i in 2:(n - 1)) {
    df[between(df[, prob], max(train[train[, tile_name] == 
                                       i - 1, prob]) + 1e-08, max(train[train[, tile_name] == 
                                                                          i, prob])), tile_name] <- i
  }
  df[between(df[, prob], (max(train[train[, tile_name] == n - 
                                      1, prob]) + 1e-08), Inf), tile_name] <- n
  
  #================================================================================#
  
  train <- df[df[, TrainIndex] == 1, ]
  test <- df[df[, TrainIndex] == 0, ]
  
  # Assign to Datasets
  if (assign_data == "all") {
    assign(all, df, envir = .GlobalEnv)
    
    assign(deparse(substitute(df_train)), train, envir = .GlobalEnv)
    assign(deparse(substitute(df_test)), test, envir = .GlobalEnv)
    
    list(Train = table(train[, tile_name]), Test = table(test[, tile_name]))
    
  }
  else if (assign_data == "main_only") {
    assign(all, df, envir = .GlobalEnv)
    
    list(All = table(df[, tile_name]))  
    
  }
  else if (assign_data == "none") {
    df[, tile_name] 
    
  }
}
Ehsan-F/R-Mixtape documentation built on June 24, 2020, 12:22 a.m.