library(miloR)
library(SingleCellExperiment)
library(scater)
library(scran)
library(dplyr)
library(patchwork)
library(MouseThymusAgeing)
library(scuttle)

1 Introduction

We have seen how Milo uses graph neighbourhoods to model cell state abundance differences in an experiment, when comparing 2 groups. However, we are often interested in testing between 2 specific groups in our analysis when our experiment has collected data from \(\gt\) 2 groups. We can focus our analysis to a 2 group comparison and still make use of all of the data for things like dispersion estimation, by using contrasts. For an in-depth use of contrasts we recommend users refer to the limma and edgeR Biostars and Bioconductor community forum threads on the subject. Here I will give an overview of how to use contrasts in the context of a Milo analysis.

2 Load data

We will use the MouseThymusAgeing data package as there are multiple groups that we can compare.

thy.sce <- MouseSMARTseqData() # this function downloads the full SCE object
## snapshotDate(): 2022-04-19
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
## see ?MouseThymusAgeing and browseVignettes('MouseThymusAgeing') for documentation
## loading from cache
thy.sce <- logNormCounts(thy.sce)
thy.sce
## class: SingleCellExperiment 
## dim: 48801 2327 
## metadata(0):
## assays(2): counts logcounts
## rownames(48801): ERCC-00002 ERCC-00003 ... ENSMUSG00000064371
##   ENSMUSG00000064372
## rowData names(6): Geneid Chr ... Strand Length
## colnames(2327): B13.B002229.1_52.1.32.1_S109
##   B13.B002297.1_32.4.52.1_S73 ... P9.B002345.5_52.1.32.1_S93
##   P9.B002450.5_4.52.16.1_S261
## colData names(11): CellID ClusterID ... SubType sizeFactor
## reducedDimNames(1): PCA
## mainExpName: NULL
## altExpNames(0):

3 Define cell neighbourhoods

thy.sce <- runUMAP(thy.sce) # add a UMAP for plotting results later

thy.milo <- Milo(thy.sce) # from the SCE object
reducedDim(thy.milo, "UMAP") <- reducedDim(thy.sce, "UMAP")

plotUMAP(thy.milo, colour_by="SubType") + plotUMAP(thy.milo, colour_by="Age")