Roswell Park Cancer Institute, Buffalo, NY

5 - 9 October, 2015" output: BiocStyle::html_document: toc: true toc_depth: 2 vignette: > % \VignetteIndexEntry{6. RNA-Seq Differential Expression} % \VignetteEngine{knitr::rmarkdown} --- ```{r style, echo = FALSE, results = 'asis'} BiocStyle::markdown() options(width=100, max.print=1000) knitr::opts_chunk$set( eval=as.logical(Sys.getenv("KNITR_EVAL", "TRUE")), cache=as.logical(Sys.getenv("KNITR_CACHE", "TRUE"))) ``` ```{r setup, echo=FALSE, messages=FALSE, warnings=FALSE} suppressPackageStartupMessages({ library(DESeq2) library(limma) }) ``` The material in this course requires R version 3.2 and Bioconductor version 3.2 ```{r configure-test} stopifnot( getRversion() >= '3.2' && getRversion() < '3.3', BiocInstaller::biocVersion() == "3.2" ) ``` # Experimental design Keep it simple - Classical experimental designs - Time series - Without missing values, where possible - Intended analysis must be feasbile -- can the available samples and hypothesis of interest be combined to formulate a testable statistical hypothesis? Replicate - Extent of replication determines nuance of biological question. - No replication (1 sample per treatment): qualitative description with limited statistical options. - 3-5 replicates per treatment: designed experimental manipulation with cell lines or other well-defined entities; 2-fold (?) change in average expression between groups. - 10-50 replicates per treatment: population studies, e.g., cancer cell lines. - 1000's of replicates: prospective studies, e.g., SNP discovery - One resource: `r Biocpkg("RNASeqPower")` Avoid confounding experimental factors with other factors - Common problems: samples from one treatment all on the same flow cell; samples from treatment 1 processed first, treatment 2 processed second, etc. Record co-variates Be aware of _batch effects_ - Known - Phenotypic covariates, e.g., age, gender - Experimental covariates, e.g., lab or date of processing - Incorporate into linear model, at least approximately - Unknown - Or just unexpected / undetected - Characterize using, e.g., `r Biocpkg("sva")`. - Surrogate variable analysis - Leek et al., 2010, Nature Reviews Genetics 11 [733-739](http://www.nature.com/nrg/journal/v11/n10/abs/nrg2825.html), Leek & Story PLoS Genet 3(9): [e161](http://dx.doi.org/10.1371/journal.pgen.0030161). - Scientific finding: pervasive batch effects - Statistical insights: surrogate variable analysis: identify and build surrogate variables; remove known batch effects - Benefits: reduce dependence, stabilize error rate estimates, and improve reproducibility - _combat_ software / `r Biocpkg("sva")` _Bioconductor_ package ![](our_figures/nrg2825-f2.jpg) HapMap samples from one facility, ordered by date of processing. # Wet-lab Confounding factors - Record or avoid Artifacts of your _particular_ protocols - Sequence contaminants - Enrichment bias, e.g., non-uniform transcript representation. - PCR artifacts -- adapter contaminants, sequence-specific amplification bias, ... # Sequencing Axes of variation - Single- versus paired-end - Length: 50-200nt - Number of reads per sample Application-specific, e.g., - ChIP-seq: short, single-end reads are usually sufficient - RNA-seq, known genes: single- or paired-end reads - RNA-seq, transcripts or novel variants: paired-end reads - Copy number: single- or paired-end reads - Structural variants: paired-end reads - Variants: depth via longer, paired-end reads - Microbiome: long paired-end reads (overlapping ends) # Alignment Alignment strategies - _de novo_ - No reference genome; considerable sequencing and computational resources - Genome - Established reference genome - Splice-aware aligners - Novel transcript discovery - Transcriptome - Established reference genome; reliable gene model - Simple aligners - Known gene / transcript expression Splice-aware aligners (and _Bioconductor_ wrappers) - [Bowtie2](http://bowtie-bio.sourceforge.net/bowtie2) (`r Biocpkg("Rbowtie")`) - [STAR](http://bowtie-bio.sourceforge.net/bowtie2) ([doi](http://dx.doi.org/10.1093/bioinformatics/bts635)) - [subread](http://dx.doi.org/10.1093/nar/gkt214) (`r Biocpkg("Rsubread")`) - Systematic evaluation (Engstrom et al., 2013, [doi](http://dx.doi.org/10.1038/nmeth.2722)) # Reduction to 'count tables' - Use known gene model to count aligned reads overlapping regions of interest / gene models - Gene model can be public (e.g., UCSC, NCBI, ENSEMBL) or _ad hoc_ (gff file) - `GenomicAlignments::summarizeOverlaps()` - `Rsubread::featureCount()` - [HTSeq](http://www-huber.embl.de/users/anders/HTSeq/doc/overview.html), [htseq-count](http://www-huber.embl.de/users/anders/HTSeq/doc/count.html) ## (Bowtie2 / tophat / Cufflinks / Cuffdiff / etc) - [tophat](http://ccb.jhu.edu/software/tophat) uses Bowtie2 to perform basic single- and paired-end alignments, then uses algorithms to place difficult-to-align reads near to their well-aligned mates. - [Cufflinks](http://cole-trapnell-lab.github.io/cufflinks/) ([doi](http://dx.doi.org/10.1038/nprot.2012.016)) takes _tophat_ output and estimate existing and novel transcript abundance. [How Cufflinks Works](http://cufflinks.cbcb.umd.edu/howitworks.html) - [Cuffdiff](http://cole-trapnell-lab.github.io/cufflinks/cuffdiff/) assesses statistical significance of estimated abundances between experimental groups - [RSEM](http://www.biomedcentral.com/1471-2105/12/323) includes de novo assembly and quantification ## (kallisto / sailfish) - 'Next generation' differential expression tools; transcriptome alignment - E.g., [kallisto](http://pachterlab.github.io/kallisto) takes a radically different approach: from FASTQ to count table without BAM files. - Very fast, almost as accurate. # Analysis Unique statistical aspects - Large data, few samples - Comparison of each gene, across samples; _univariate_ measures - Each gene is analyzed by the _same_ experimental design, under the _same_ null hypothesis Summarization - Counts _per se_, rather than a summary (RPKM, FRPKM, ...), are relevant for analysis - For a given gene, larger counts imply more information; RPKM etc., treat all estimates as equally informative. - Comparison is across samples at _each_ region of interest; all samples have the same region of interest, so modulo library size there is no need to correct for, e.g., gene length or mapability. Normalization - Libraries differ in size (total counted reads per sample) for un-interesting reasons; we need to account for differences in library size in statistical analysis. - Total number of counted reads per sample is _not_ a good estimate of library size. It is un-necessarily influenced by regions with large counts, and can introduce bias and correlation across genes. Instead, use a robust measure of library size that takes account of skew in the distribution of counts (simplest: trimmed geometric mean; more advanced / appropriate encountered in the lab). - Library size (total number of counted reads) differs between samples, and should be included _as a statistical offset_ in analysis of differential expression, rather than 'dividing by' the library size early in an analysis. Appropriate error model - Count data is _not_ distributed normally or as a Poisson process, but rather as negative binomial. - Result of a combination Poisson (`shot' noise, i.e., within-sample technical and sampling variation in read counts) with variation between biological samples. - A negative binomial model requires estimation of an additional parameter ('dispersion'), which is estimated poorly in small samples. - Basic strategy is to moderate per-gene estimates with more robust local estimates derived from genes with similar expression values (a little more on borrowing information is provided below). Pre-filtering - Naively, a statistical test (e.g., t-test) could be applied to each row of a counts table. However, we have relatively few samples (10's) and very many comparisons (10,000's) so a naive approach is likely to be very underpowered, resulting in a very high _false discovery rate_ - A simple approach is perform fewer tests by removing regions that could not possibly result in statistical significance, regardless of hypothesis under consideration. - Example: a region with 0 counts in all samples could not possibly be significant regradless of hypothesis, so exclude from further analysis. - Basic approaches: 'K over A'-style filter -- require a minimum of A (normalized) read counts in at least K samples. Variance filter, e.g., IQR (inter-quartile range) provides a robust estimate of variability; can be used to rank and discard least-varying regions. - More nuanced approaches: `r Biocpkg("edgeR")` vignette; work flow today. Borrowing information - Why does low statistical power elevate false discovery rate? - One way of developing intuition is to recognize a t-test (for example) as a ratio of variances. The numerator is treatment-specific, but the denominator is a measure of overall variability. - Variances are measured with uncertainty; over- or under-estimating the denominator variance has an asymmetric effect on a t-statistic or similar ratio, with an underestimate _inflating_ the statistic more dramatically than an overestimate deflates the statistic. Hence elevated false discovery rate. - Under the typical null hypothesis used in microarray or RNA-seq experiments, each gene may respond differently to the treatment (numerator variance) but the overall variability of a gene is the same, at least for genes with similar average expression - The strategy is to estimate the denominator variance as the between-group variance for the gene, _moderated_ by the average between-group variance across all genes. - This strategy exploits the fact that the same experimental design has been applied to all genes assayed, and is effective at moderating false discovery rate. ## Statistical Issues In-depth ### Normalization `r Biocpkg("DESeq2")` `estimateSizeFactors()`, Anders and Huber, [2010](http://genomebiology.com/2010/11/10/r106) - For each gene: geometric mean of all samples. - For each sample: median ratio of the sample gene over the geometric mean of all samples - Functions other than the median can be used; control genes can be used instead `r Biocpkg("edgeR")` `calcNormFactors()` TMM method of Robinson and Oshlack, [2010](http://genomebiology.com/2010/11/3/r25) - Identify reference sample: library with upper quartile closest to the mean upper quartile of all libraries - Calculate M-value of each gene (log-fold change relative to reference) - Summarize library size as weighted trimmed mean of M-values. ### Dispersion `r Biocpkg("DESeq2")` `estimateDispersions()` - Estimate per-gene dispersion - Fit a smoothed relationship between dispersion and abundance `r Biocpkg("edgeR")` `estimateDisp()` - Common: single dispersion for all genes; appropriate for small experiments (<10? samples) - Tagwise: different dispersion for all genes; appropriate for larger / well-behaved experiments - Trended: bin based on abundance, estimate common dispersion within bin, fit a loess-smoothed relationship between binned dispersion and abundance # Comprehension Placing differentially expressed regions in context - Gene names associated with genomic ranges - Gene set enrichment and similar analysis - Proximity to regulatory marks - Integrate with other analyses, e.g., methylation, copy number, variants, ... ![Copy number / expression QC](our_figures/copy_number_QC_2.png) Correlation between genomic copy number and mRNA expression identified 38 mis-labeled samples in the TCGA ovarian cancer Affymetrix microarray dataset.