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

## ----setup, message=FALSE-----------------------------------------------------
# MISTy
library(mistyR)
library(future)

# data manipulation
library(dplyr)
library(purrr)
library(distances)

# plotting
library(ggplot2)

plan(multisession)

## ----fig.height=2.5, fig.width=3.5--------------------------------------------
data("synthetic")

ggplot(synthetic[[1]], aes(x = col, y = row, color = type)) +
  geom_point(shape = 15, size = 0.7) +
  scale_color_manual(values = c("#e9eed3", "#dcc38d", "#c9e2ad", "#a6bab6")) +
  theme_void()

str(synthetic[[1]], give.attr = FALSE)

## -----------------------------------------------------------------------------
expr <- synthetic[[1]] %>% select(-c(row, col, type, starts_with("lig")))

misty.intra <- create_initial_view(expr)

summary(misty.intra)
summary(misty.intra$intraview)

## -----------------------------------------------------------------------------
pos <- synthetic[[1]] %>% select(row, col)

misty.views <- misty.intra %>% add_paraview(pos, l = 10)

summary(misty.views)

## -----------------------------------------------------------------------------
# find the 10 nearest neighbors
neighbors <- nearest_neighbor_search(distances(as.matrix(pos)), k = 11)[-1, ]

# calculate the mean expression of the nearest neighbors for all markers
# for each cell in expr
nnexpr <- seq_len(nrow(expr)) %>%
  map_dfr(~ expr %>%
    slice(neighbors[, .x]) %>%
    colMeans())

nn.view <- create_view("nearest", nnexpr, "nn")

nn.view

## -----------------------------------------------------------------------------
extended.views <- misty.views %>% add_views(nn.view)

summary(extended.views)

## -----------------------------------------------------------------------------
extended.views %>%
  remove_views("nearest") %>%
  summary()

extended.views %>%
  remove_views("intraview") %>%
  summary()

## -----------------------------------------------------------------------------
misty.views %>% run_misty()

## -----------------------------------------------------------------------------
result.folders <- synthetic %>% imap_chr(function(sample, name) {
  sample.expr <- sample %>% select(-c(row, col, type, starts_with("lig")))
  sample.pos <- sample %>% select(row, col)
  
  create_initial_view(sample.expr) %>% add_paraview(sample.pos, l = 10) %>%
    run_misty(results.folder = paste0("results", .Platform$file.sep, name))
})

result.folders

## -----------------------------------------------------------------------------
misty.results <- collect_results(result.folders)

summary(misty.results)

## ---- warning=FALSE-----------------------------------------------------------
misty.results %>%
  plot_improvement_stats("gain.R2") %>%
  plot_improvement_stats("gain.RMSE")

## -----------------------------------------------------------------------------
misty.results$improvements %>%
  filter(measure == "p.R2") %>%
  group_by(target) %>% 
  summarize(mean.p = mean(value)) %>%
  arrange(mean.p)

## -----------------------------------------------------------------------------
misty.results %>% plot_view_contributions()

## -----------------------------------------------------------------------------
misty.results %>% plot_interaction_heatmap(view = "intra", cutoff = 0.8)

## -----------------------------------------------------------------------------
misty.results %>% plot_interaction_heatmap(view = "para.10", cutoff = 0.5)

## -----------------------------------------------------------------------------
misty.results %>% plot_contrast_heatmap("intra", "para.10", cutoff = 0.5)

## -----------------------------------------------------------------------------
misty.results %>% plot_interaction_communities("intra")

## -----------------------------------------------------------------------------
misty.results %>% plot_interaction_communities("para.10", cutoff = 0.5)

## ----info, echo=FALSE---------------------------------------------------------
sessionInfo()

## ----cleanup, include=FALSE---------------------------------------------------
unlink("results", recursive = TRUE)