Analyzing RNA-Seq data for differential gene expression
In this exercise, we will analyze RNA-seq data for to measure changes in gene expression levels in a between wild-type and mutant strain strains of Listeria.
Download data files
The Copy the data files for this example are in the pathinto your $SCRATCH space:
| Code Block |
|---|
cds cp -r /corral-repl/utexas/BioITeam/ngs_course/listeria_RNA_seq/data listeria_RNA_seq |
File Name | Description | Sample |
|---|---|---|
| Single-end Illumina 36-bp reads | wild-type, biological replicate 1 |
| Single-end Illumina 36-bp reads | ΔsigB mutant, biological replicate 1 |
| Single-end Illumina 36-bp reads | wild-type, biological replicate 2 |
| Single-end Illumina 36-bp reads | ΔsigB mutant, biological replicate 2 |
| Reference Genome | Listeria monocytogenes strain 10403S |
This data is from was submitted in the Short Read Archive to accompany this paper:
Oliver, H.F., et al. (2009) Deep RNA sequencing of L. monocytogenes reveals overlapping and extensive stationary phase and sigma B-dependent transcriptomes, including multiple highly transcribed noncoding RNAs. BMC Genomics 10:641. Pubmed
You can view the data in the ENA SRA here: http://www.ebi.ac.uk/ena/data/view/SRP001753
Install software
Bowtie
For RNA-seq analysis we're mainly counting the reads that align well, so we choose to use bowtie. (You could also use BWA or many other mappers).
| Code Block |
|---|
module load bowtie
|
Bioconductor modules for R statistics package
...
Installing Bioconductor modules for R
Many of the modules for doing statistical tests on NGS data have been written in the "R" language for statistical computing. If you're not familiar with R, then this section is likely to be a bit confusing. (You might be thinking "Stop with the new languages already guys! Uncle!") To orient you, we are going to run the R command, which launches the R shell inside our terminal. Like the bash shell that we were using, the R shell interprets commands, but now they are R commands rather than bash commands. The prompt changes from login1$ to > when you are in the R shell, to help clue you in to this fact.
R is the favorite language of pirates. R is a very common scripting language used in statistics. There are whole classes on it going on in other SSI classrooms as we speak! Inside the R universe, you have access to an incredibly large number of useful statistical functions (Fisher's exact test, nonlinear least-squares fitting, ANOVA ...). R also has advanced functionality for producing plots and graphs as output. We'll take advantage of all of this here. You are well on your way to becoming denizens of the polyglot bioinformatics community now.
Regrettably, R is a bit of it's own bizarro world, as far as how its commands work. (Futhermore, Googling "R" to get help can be very frustrating.) The conventions of most other programming and scripting languages seem to have been re-invented by someone who wanted to do everything their own way in R. Just like we wrote shell scripts in bash, you can write R scripts that carry out complicated analyses.
Basic rules of R:
- Don't forget: it's
q()to quit. - For help, type
?command. Try?read.table - The left arrow
\<-(less-than-dash) is the same as an equals sign\=.
Like other languages, R can be expanded by loading modules. The R equivalent of Bioperl or Biopython is Bioconductor. Bioconductor can do things for you like convert sequences, but where it really shines is in doing statistical tests (where is it second-to-none in this list of languages). Many functions for analyzing microarray data are implemented in R, and this strength has now carried over to the analysis of RNAseq data.
Here's how you install two modules that we will need for this exercise:
| Code Block |
|---|
login1$ module load R
login1$ R
R version 2.14.0 (2011-10-31)
Copyright (C) 2011 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-unknown-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
Natural language support but running in an English locale
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> source("http://bioconductor.org/biocLite.R")
...
> biocLite("DESeq")
...
> biocLite("edgeR")
...
> q()
Save workspace image? [y/n/c]: n
|
When you load start R subsequent timeslater, you can load these libraries modules with just these commands:
| Code Block |
|---|
login1$ R > library("DESeq") > library("edgeR") |
- library(edgeR)
- library(DESEQ)
Commands
Remove adaptor sequences from reads
You will need a FASTA file of adaptor sequences.
- [https://wikis.utexas.edu/display/GSAF/Illumina+-+all+flavorsIllumina Adapters Sequences (GSAF)] | [%ATTACHURL%/gsaf_illumina_adapters.fastaDownload FASTA]
For each input file you will need to run this command (single-end data): %BR%
<code>$far --source datasetX.fastq --target datasetX.noadaptor --adaptive-overlap --trim-end any --adapters gsaf_illumina_adapters.fasta --format fastq-sanger</code>
...
These commands will work for any Bioconductor modules!
Align the reads
For RNA-seq analysis we're mainly counting the reads that align well, so we choose to use bowtie. (You could also use BWA or many other mappers).
We've done this several times before, so you should be able to come up with the full command lines if you refer back to the original lesson. You will need to first build the index file, just once and in "interactive mode" is fine. Then, you will need to submit a commands file with four lines to the TACC queue.
Please give the final output files the names: SRR034450.sam, SRR034451.sam, SRR034452.sam, SRR034453.sam.
| Expand | ||||
|---|---|---|---|---|
| ||||
Remember, |
| Expand | ||||
|---|---|---|---|---|
| ||||
Now create a commands file that looks like this:
|
---+++ Align reads to reference genome
...
| Code Block | ||
|---|---|---|
| ||
login1$ R
...
> library("DESeq")
> combined = read.csv("combined.csv", header=T, row.names=1)
> design <- data.frame(
row.names = colnames( combined ),
condition = c( "Anc", "Anc", "EL", "EL", "EW", "EW"),
libType = c( "single-end", "single-end", "single-end",
"single-end", "single-end", "single-end" ) )
> design
> conds <- factor(design$condition)
> cds <- newCountDataSet( combined, conds )
> cds <- estimateSizeFactors( cds )
> sizeFactors( cds )
> res <- nbinomTest( cds, "EL", "EW" )
> write.csv(res, "EL-vs-EW.csv")
|
Additional Exercises
- In an actual RNAseq analysis, you might want to trim stray adaptor sequences from your data using a tool like the FASTX-Toolkit or FAR before aligning.