Pooled CRISPR perturbations screens employ a library of guide RNAs (gRNAs) that is transduced into a pool of cells with the aim to induce a single genetic perturbation in each cell. The perturbation effect is assessed by measuring the abundance of each gRNA after the screen selection phase and comparing it to its abundance in the plasmid library. The main goal of the following analysis is the detection of essential genes, i.e. genes whose knockout reduces the cell fitness. The package gscreend provides a method to rank genes based on count tables.
In order to identify essential genes starting from raw gRNA count data, gscreend performs the following analysis steps:
Input of raw gRNA counts at T0 (sequencing of library) and T1 (at the end of the screen). Normalization and calculation of log fold changes.
Split log fold changes into intervals dependent on the initial count at T0.
For every interval fit a skew-normal distribution to the data to model the null hypothesis (via least quantile regression).
Based on the null model calculate p-values for every gRNA.
Rank gRNAs according to p-value and perform robust ranking aggregation to calculate p-values on gene level.
Perform quality control of data and statistical model.
if(!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("gscreend")
library(gscreend)
library(SummarizedExperiment)
The simulated data used in this example has been generated using the simulation method available at https://github.com/imkeller/simulate_pooled_screen
Raw count data consists of gRNA counts in the library sequencing and different replicates after the screen proliferation phase. In order to estimate the effect of a specific gRNA on cell fitness, the relative abundances of the gRNA before and after the proliferation phase will be compares
raw_counts <- read.table(
system.file("extdata", "simulated_counts.txt", package = "gscreend"),
header=TRUE)
Generate a summarized experiment from the count data. gscreend currently uses SummarizedExperiment objects as an input format.
The count matrix contains raw gRNA counts. Each row represents one gRNA, each column represents one sample (T0, T1, replicates, …).
counts_matrix <- cbind(raw_counts$library0,
raw_counts$R0_0,
raw_counts$R1_0)
rowData <- data.frame(sgRNA_id = raw_counts$sgrna_id,
gene = raw_counts$Gene)
colData <- data.frame(samplename = c("library", "R1", "R2"),
# timepoint naming convention:
# T0 -> reference,
# T1 -> after proliferation
timepoint = c("T0", "T1", "T1"))
se <- SummarizedExperiment(assays=list(counts=counts_matrix),
rowData=rowData, colData=colData)
In this step a gscreend experiment object is generated that will after the analysis contain all data related to gRNAs, genes and model parameters.
pse <- createPoolScreenExp(se)
## Creating PoolScreenExp object from a SummarizedExperiment object.
## References and samples are named correctly.
## Data concerning sgRNA and genes is provided.
Run gscreend with default parameters.
pse_an <- RunGscreend(pse)
## Size normalized count data.
## Calculated LFC.
## Fitted null distribution.
## Calculated p-values at gRNA level.
## Ranking genes...
## ... for positive fold changes
## ... for negative fold changes
## gscreend analysis has been completed.
gscreend provides basic quality control functions for inspection of replicate correlation for example.
plotReplicateCorrelation(pse_an)
The plotModelParameters()
function can be used to inspect
the values of the parameters estimated for the
skew normal distribution of the logarithmic fold change data.
plotModelParameters(pse_an)
The ResultsTable function can be used to extract a table listing for each gene the p-value and fdr. These values correspond to the results from the statistical test indicting whether upon perturbation a specific gene reduces (direction = “negative”), or increasing (direction = “positive”) cell viability.
res <- ResultsTable(pse_an, direction = "negative")
head(res)
## Name fdr pval lfc
## essential_0 essential_0 0.0006097561 0.00004 -1.421372
## essential_1 essential_1 0.0000000000 0.00000 -1.984253
## essential_10 essential_10 0.0004789272 0.00003 -1.605037
## essential_100 essential_100 0.0000000000 0.00000 -3.075151
## essential_1000 essential_1000 0.0000000000 0.00000 -2.023614
## essential_1001 essential_1001 0.0577354260 0.00515 -1.032688
sessionInfo()
## R version 4.1.1 (2021-08-10)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 20.04.3 LTS
##
## Matrix products: default
## BLAS: /home/biocbuild/bbs-3.14-bioc/R/lib/libRblas.so
## LAPACK: /home/biocbuild/bbs-3.14-bioc/R/lib/libRlapack.so
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_GB LC_COLLATE=C
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats4 stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] SummarizedExperiment_1.24.0 Biobase_2.54.0
## [3] GenomicRanges_1.46.0 GenomeInfoDb_1.30.0
## [5] IRanges_2.28.0 S4Vectors_0.32.0
## [7] BiocGenerics_0.40.0 MatrixGenerics_1.6.0
## [9] matrixStats_0.61.0 gscreend_1.8.0
## [11] BiocStyle_2.22.0
##
## loaded via a namespace (and not attached):
## [1] Rcpp_1.0.7 highr_0.9 nloptr_1.2.2.2
## [4] bslib_0.3.1 compiler_4.1.1 BiocManager_1.30.16
## [7] jquerylib_0.1.4 XVector_0.34.0 timeSeries_3062.100
## [10] bitops_1.0-7 tools_4.1.1 zlibbioc_1.40.0
## [13] digest_0.6.28 lattice_0.20-45 jsonlite_1.7.2
## [16] evaluate_0.14 rlang_0.4.12 fGarch_3042.83.2
## [19] Matrix_1.3-4 DelayedArray_0.20.0 magick_2.7.3
## [22] parallel_4.1.1 yaml_2.2.1 xfun_0.27
## [25] fastmap_1.1.0 GenomeInfoDbData_1.2.7 stringr_1.4.0
## [28] knitr_1.36 sass_0.4.0 grid_4.1.1
## [31] R6_2.5.1 BiocParallel_1.28.0 spatial_7.3-14
## [34] rmarkdown_2.11 bookdown_0.24 magrittr_2.0.1
## [37] fBasics_3042.89.1 htmltools_0.5.2 timeDate_3043.102
## [40] stringi_1.7.5 RCurl_1.98-1.5