Diff of /R/defineResponseGroups.R [000000] .. [226bc8]

Switch to side-by-side view

--- a
+++ b/R/defineResponseGroups.R
@@ -0,0 +1,44 @@
+defineResponseGroups = function(lpd) {
+  
+  # quiets concerns of R CMD check "no visible binding for global variable"
+  x=NULL; ibrutinib=NULL; everolimus=NULL;
+  selumetinib=NULL
+  
+  z_factor <- qnorm(0.05, lower.tail = FALSE)
+  
+  drugnames <- c( "ibrutinib", "everolimus", "selumetinib")
+  ib  <- "D_002_4:5" 
+  ev  <- "D_063_4:5" 
+  se  <- "D_012_4:5"
+  stopifnot(identical(fData(lpd)[c(ib, ev, se), "name"], drugnames))
+  
+  df  <- Biobase::exprs(lpd)[c(ib, ev, se), lpd$Diagnosis=="CLL"] %>%
+    t %>% data.frame %>% `colnames<-`(drugnames)
+  df$PatientID=rownames(df)
+  mdf <- melt(df)
+  
+  # Determine standard deviation using mirror method
+  pmdf = mdf[mdf$value >= 1,]
+  ssd  <- mean( (pmdf$value - 1) ^ 2 ) ^ 0.5
+  
+  # Normal density
+  dn <- tibble(
+    x = seq(min(mdf$value), max(mdf$value), length.out = 100),
+    y = dnorm(x, mean = 1, sd = ssd) * 2 * nrow(pmdf) / nrow(mdf) 
+  )
+  
+  # Setting up the threshold
+  thresh   <- 1 - z_factor * ssd
+  
+  # Decision rule
+  df <- mutate(df,
+               group = ifelse(ibrutinib < thresh, "BTK",
+                              ifelse(everolimus < thresh, "mTOR",
+                                     ifelse(selumetinib < thresh, "MEK",
+                                     "none")))
+  )
+
+  
+  return(data.frame(df[,c("ibrutinib","everolimus","selumetinib","group")],
+                    row.names=df$PatientID))
+}
\ No newline at end of file