---
title: "Integration with dreamlet / SingleCellExperiment"
subtitle: ''
author: "Developed by [Gabriel Hoffman](http://gabrielhoffman.github.io/)"
date: "Run on `r Sys.time()`"
documentclass: article
output:
BiocStyle::html_document
vignette: >
%\VignetteIndexEntry{crumblr_treeTest}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
%\usepackage[utf8]{inputenc}
---
```{r setup, echo=FALSE, results="hide"}
knitr::opts_chunk$set(
tidy = FALSE,
cache = TRUE,
echo = TRUE,
dev = c("png", "pdf"),
package.startup.message = FALSE,
message = FALSE,
error = FALSE,
warning = FALSE
)
options(width = 100)
```
# Load and process single cell data
Here we perform analysis of PBMCs from 8 individuals stimulated with interferon-β [Kang, et al, 2018, Nature Biotech](https://www.nature.com/articles/nbt.4042). We perform standard processing with [dreamlet](https://gabrielhoffman.github.io/dreamlet/index.html) to compute pseudobulk before applying `crumblr`.
Here, single cell RNA-seq data is downloaded from [ExperimentHub](https://bioconductor.org/packages/ExperimentHub/).
```{r preprocess.data}
library(dreamlet)
library(muscat)
library(ExperimentHub)
library(scater)
# Download data, specifying EH2259 for the Kang, et al study
eh <- ExperimentHub()
sce <- eh[["EH2259"]]
sce$ind <- as.character(sce$ind)
# only keep singlet cells with sufficient reads
sce <- sce[rowSums(counts(sce) > 0) > 0, ]
sce <- sce[, colData(sce)$multiplets == "singlet"]
# compute QC metrics
qc <- perCellQCMetrics(sce)
# remove cells with few or many detected genes
ol <- isOutlier(metric = qc$detected, nmads = 2, log = TRUE)
sce <- sce[, !ol]
# set variable indicating stimulated (stim) or control (ctrl)
sce$StimStatus <- sce$stim
```
## Aggregate to pseudobulk
Dreamlet creates the pseudobulk dataset:
```{r aggregate}
# Since 'ind' is the individual and 'StimStatus' is the stimulus status,
# create unique identifier for each sample
sce$id <- paste0(sce$StimStatus, sce$ind)
# Create pseudobulk data by specifying cluster_id and sample_id for aggregating cells
pb <- aggregateToPseudoBulk(sce,
assay = "counts",
cluster_id = "cell",
sample_id = "id",
verbose = FALSE
)
```
## Process data
Here we evaluate whether the observed cell proportions change in response to interferon-β.
```{r crumblr}
library(crumblr)
# use dreamlet::cellCounts() to extract data
cellCounts(pb)[1:3, 1:3]
# Apply crumblr transformation
# cobj is an EList object compatable with limma workflow
# cobj$E stores transformed values
# cobj$weights stores precision weights
cobj <- crumblr(cellCounts(pb))
```
## Analysis
Now continue on with the downstream analysis
```{r vp}
library(variancePartition)
fit <- dream(cobj, ~ StimStatus + ind, colData(pb))
fit <- eBayes(fit)
topTable(fit, coef = "StimStatusstim", number = Inf)
```
Given the results here, we see that CD8 T cells at others change relative abundance following treatment with interferon-β.
# Session Info
```{r session, echo=FALSE}
sessionInfo()
```