inst/doc/mxnorm-vignette.R

## ---- include = FALSE---------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  message=FALSE,
  warning=FALSE
)

## ----setup, warning=FALSE,message=FALSE---------------------------------------
library(mxnorm)
library(dplyr)
library(reticulate)

## -----------------------------------------------------------------------------
if(reticulate::py_module_available("skimage")){
  knitr::knit_engines$set(python = reticulate::eng_python)
  skimage_available = TRUE
} else{
  ## set boolean for CRAN builds
  skimage_available = FALSE
  
  ## install if running locally
  #py_install("scikit-image")
}

## -----------------------------------------------------------------------------
head(mx_sample, 3)

## ----example------------------------------------------------------------------
mx_data = mx_dataset(data=mx_sample,
                        slide_id="slide_id",
                        image_id="image_id",
                        marker_cols=c("marker1_vals","marker2_vals","marker3_vals"),
                        metadata_cols=c("metadata1_vals"))

## ----norm---------------------------------------------------------------------
mx_data = mx_normalize(mx_data = mx_data,
                       transform = "mean_divide",
                       method="None",
                       method_override=NULL,
                       method_override_name=NULL)

## ----norm_data----------------------------------------------------------------
head(mx_data$norm_data,3)

## ----otsu---------------------------------------------------------------------
if(skimage_available){
  thold_override = NULL
} else{
  thold_override = function(thold_data){quantile(thold_data, 0.5)}
}

mx_data = run_otsu_discordance(mx_data,
                        table="both",
                        threshold_override = thold_override,
                        plot_out = FALSE)

## ----otsu_data----------------------------------------------------------------
head(mx_data$otsu_data, 3)

## ----mx_dens------------------------------------------------------------------
plot_mx_density(mx_data)

## ----mx_misc------------------------------------------------------------------
plot_mx_discordance(mx_data)

## ----umap---------------------------------------------------------------------
set.seed(1234)
mx_data = run_reduce_umap(mx_data,
                        table="both",
                        marker_list = c("marker1_vals","marker2_vals","marker3_vals"),
                        downsample_pct = 0.5,
                        metadata_cols = c("metadata1_vals"))

## ----umap_data----------------------------------------------------------------
head(mx_data$umap_data, 3)

## ----mx_umap------------------------------------------------------------------
plot_mx_umap(mx_data,
             metadata_col = "metadata1_vals")

## ----mx_umap_slide------------------------------------------------------------
plot_mx_umap(mx_data,
             metadata_col = "slide_id")

## ----var,warning=FALSE,message=FALSE------------------------------------------
mx_data = run_var_proportions(mx_data,
                             table="both",
                             metadata_cols = NULL,
                             formula_override = NULL,
                             save_models = FALSE
                             )

## ----var_data-----------------------------------------------------------------
head(mx_data$var_data, 4)

## ----mx_var-------------------------------------------------------------------
plot_mx_proportions(mx_data)

## ----ex_str-------------------------------------------------------------------
summary(mx_data)

## ----out.width="100%",fig.cap="Basic structure of the `mxnorm` package and associated functions",echo=FALSE----
knitr::include_graphics("mxnorm_structure.png")

## ----flex_example-------------------------------------------------------------
mx_flex = mx_dataset(data=mx_sample,
                        slide_id="slide_id",
                        image_id="image_id",
                        marker_cols=c("marker1_vals","marker2_vals","marker3_vals"),
                        metadata_cols=c("metadata1_vals"))

## ----udf----------------------------------------------------------------------
quantile_divide <- function(mx_data, ptile=0.5){
    ## data to normalize
    ndat = mx_data$data
    
    ## marker columns
    cols = mx_data$marker_cols
    
    ## slide id
    slide = mx_data$slide_id
    
    ## get column length slide medians
    y = ndat %>%
        dplyr::group_by(.data[[slide]]) %>%
        dplyr::mutate(dplyr::across(all_of(cols),quantile,ptile))
    
    ## divide to normalize
    ndat[,cols] = ndat[,cols]/y[,cols]
    
    ## rescale
    ndat = ndat %>%
        dplyr::mutate(dplyr::across(all_of(cols),function(a){a + -min(a)}))

    ## set normalized data
    mx_data$norm_data = ndat

    ## return object
    mx_data
}

## ----q_div--------------------------------------------------------------------
mx_flex_q50 = mx_normalize(mx_flex,
                           method_override = quantile_divide, 
                           method_override_name = "median_divide")

mx_flex_q75 = mx_normalize(mx_flex,
                           method_override = quantile_divide,
                           ptile=0.75, 
                           method_override_name = "75th_percentile")

## ----q_div_res----------------------------------------------------------------
summary(mx_flex_q50)
summary(mx_flex_q75)

## ----q50_iso------------------------------------------------------------------
if(skimage_available){
  thold_override = "isodata"
} else{
  thold_override = function(thold_data){quantile(thold_data, 0.5)}
}

mx_flex_q50 = run_otsu_discordance(mx_flex_q50,table = "both",threshold_override = thold_override)
summary(mx_flex_q50)

## ----q50_iso_plots------------------------------------------------------------
plot_mx_density(mx_flex_q50)
plot_mx_discordance(mx_flex_q50)

## ----q10_thold----------------------------------------------------------------
q10_threshold = function(thold_data,ptile=0.10){
    quantile(thold_data, ptile)
}

## ----q75_q10------------------------------------------------------------------
mx_flex_q75 = run_otsu_discordance(mx_flex_q75,table = "both",threshold_override = q10_threshold)
summary(mx_flex_q75)

## ----q75_q10__plots-----------------------------------------------------------
plot_mx_density(mx_flex_q75)
plot_mx_discordance(mx_flex_q75)

## ----mx_sample_cols-----------------------------------------------------------
head(mx_sample,0)

## ----reff_mod-----------------------------------------------------------------
new_RHS = "metadata1_vals + (1 | image_id) + (1 | slide_id)"

## ----var_prop_flex------------------------------------------------------------
mx_flex_q50 = run_var_proportions(mx_flex_q50,
                                  table="both",
                                  formula_override = new_RHS,
                                  save_models=TRUE)

## ----m1_vals------------------------------------------------------------------
summary(mx_flex_q50$var_models[[1]])

## ----q50_varprops_summ--------------------------------------------------------
summary(mx_flex_q50)
plot_mx_proportions(mx_flex_q50)

Try the mxnorm package in your browser

Any scripts or data that you put into this service are public.

mxnorm documentation built on May 1, 2023, 5:20 p.m.