## ----chunk-01, include = FALSE------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  warning = FALSE,
  message = FALSE,
  fig.retina = 1
)
library(BiocStyle)

## ----chunk-02, eval = FALSE---------------------------------------------------
# if (!require("BiocManager")) {
#   install.packages("BiocManager")
# }
# BiocManager::install("spicyR", version = "devel")   # spicyR 2.0, until the next Bioconductor release

## ----chunk-03, warning=FALSE, message=FALSE-----------------------------------
# load required packages
library(SummarizedExperiment)


library(spicyR)
library(ggplot2)
library(SpatialExperiment)
library(SpatialDatasets)
library(dplyr)
library(survival)

## ----chunk-04, warning=FALSE, message=FALSE-----------------------------------
kerenSPE <- SpatialDatasets::spe_Keren_2018()

## ----chunk-05-----------------------------------------------------------------
spicyTestPair <- spicy(method = "image", 
  kerenSPE,
  condition = "tumour_type",
  from = "CD8_T_cell",
  to = "Neutrophils"
)

topPairs(spicyTestPair)

## ----chunk-06-----------------------------------------------------------------
spicyTest <- spicy(method = "image", 
  kerenSPE,
  condition = "tumour_type"
)

topPairs(spicyTest)

## ----chunk-07-----------------------------------------------------------------
bind(spicyTest)[1:5, 1:5]

## ----chunk-08-----------------------------------------------------------------
signifPlot(
  spicyTest,
  breaks = c(-3, 3, 1),
  marksToPlot = c("Macrophages", "DC_or_Mono", "dn_T_CD3", "Neutrophils",
                  "CD8_T_cell", "Keratin_Tumour")
)

## ----chunk-09-----------------------------------------------------------------
spicyBoxPlot(results = spicyTest, rank = 1)

## ----chunk-10-----------------------------------------------------------------
kerenSPE <- buildKnnGraph(kerenSPE, k = 20)

pairAbundances <- convPairs(kerenSPE,
                  colPair = "knn_interaction_graph")

head(pairAbundances["B_cell__B_cell"])

## ----chunk-11-----------------------------------------------------------------
spicyTestColPairs <- spicy(method = "image", 
  kerenSPE,
  condition = "tumour_type",
  alternateResult = pairAbundances,
  weights = FALSE
)

topPairs(spicyTestColPairs)

## ----chunk-12-----------------------------------------------------------------
signifPlot(
  spicyTestColPairs,
  breaks = c(-3, 3, 1),
  marksToPlot = c("Macrophages", "dn_T_CD3", "CD4_T_cell", 
                  "B_cell", "DC_or_Mono", "Neutrophils", "CD8_T_cell")
)

## ----chunk-13-----------------------------------------------------------------
kerenSPE$event = 1 - kerenSPE$Censored
kerenSPE$survival = Surv(kerenSPE$`Survival_days_capped*`, kerenSPE$event)

## ----chunk-14-----------------------------------------------------------------
# Running survival analysis
spicySurvival = spicy(method = "image", kerenSPE,
                      condition = "survival")

# top 10 significant pairs
head(spicySurvival$survivalResults, 10)

## ----chunk-15-----------------------------------------------------------------
# filter SPE object to obtain image 24 data
kerenSubset = kerenSPE[, colData(kerenSPE)$imageID == "24"]

pairwiseAssoc = getPairwise(kerenSubset, 
                            sigma = NULL, 
                            Rs = 100) |>
  as.data.frame()

pairwiseAssoc[["Keratin_Tumour__Neutrophils"]]

## ----chunk-16-----------------------------------------------------------------
pairwiseAssoc = getPairwise(kerenSubset, 
                            sigma = 20, 
                            Rs = 100) |>
  as.data.frame()

pairwiseAssoc[["Keratin_Tumour__Neutrophils"]]

## ----chunk-17-----------------------------------------------------------------
plotImage(kerenSPE, "24", from = "Keratin_Tumour", to = "Neutrophils")

## ----chunk-18-----------------------------------------------------------------
data("diabetesData")
spicyMixedTest <- spicy(method = "image",
  diabetesData,
  condition = "stage",
  subject = "case"
)
topPairs(spicyMixedTest)

## ----chunk-19-----------------------------------------------------------------
sessionInfo()

