Introduction
R-studio helps greatly in doing reproducable research via the R markdown language. In a Rmd document you can r code, r results and plain text in one document that then can be exported in many different formats.
Code blocks can be created both inline with text 4 + 2 = 6 or in blocks of code:
4 + 2
[1] 6
RNA seq NBIS report
In this document I will create two plots that one often creates in analysing RNA sequence data.
The data is from a recent paper on YAP and TAZ control of peripheral myelination and the expression of laminin receptors in Schwann cells (Poitelon et al. Nature Neurosci. 2016). In the study the genes YAP and TAZ were knocked-down in Schwann cells.
The material for RNA-seq was collected from three biological replicates of both knockdowns and controls.
Both read mapping and read counting has been done outside R and the code below reads in the read counts per gene and create an object for analysis of differential gene expression.
library(edgeR)
## Preparing samples group labels
sample.groups <- rep(c('KO','Wt'), each = 3)
## Reading in data
data.counts <- read.table("tableCounts.txt", header = TRUE)
#colnames(data.counts) <- sample.groups
## edgeR
## building edgeR object
data.cds <- DGEList(data.counts, group = sample.groups)
## filtering low count reads (keeping rads with at least 1 read per milion in at least 2 samples)
data.cds <- data.cds[rowSums(cpm(data.cds)> 1) > 2,]
## normalizing data
data.cds <- calcNormFactors(data.cds)
MDS plot
Multidimensional scaling plots can be used to visualize distances between samples in a gene expression experiment. Note that there are a seperation of sample along the major axis of differentiation indicating that there like are genes showing differential gene expression between knockdown and wildtype.
plotMDS(data.cds, labels = sample.groups)

Detection of differentially expressed genes
my.design <- model.matrix(~0+sample.groups)
colnames(my.design) <- levels(data.cds$samples$group)
data.cds <- estimateDisp(data.cds, my.design, trend.method='movingave')
my.contrasts <- makeContrasts(KOvsWt = KO-Wt, levels = my.design)
fit <- glmFit(data.cds, my.design)
lrt <- glmLRT(fit, contrast=my.contrasts[,"KOvsWt"])
lrt.top <- topTags(lrt, n=Inf, adjust.method='BH')
lrt.table <- lrt.top$table
de <- decideTestsDGE(lrt, lfc=0)
detags <- rownames(data.cds)[as.logical(de)]
summary(de)
[,1]
-1 920
0 11939
1 672
MA-plot
plotSmear(lrt, de.tags = detags)

R session
A useful command for reproducable research in R is the sessioninfo. It prints a information on all loaded packages in your the current R session and will hence be helpful if you share the code or want to rerun the code at a later time and have forgotten the packages to load.
sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.10.5 (Yosemite)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
other attached packages:
[1] edgeR_3.14.0 limma_3.28.18
loaded via a namespace (and not attached):
[1] formatR_1.4 tools_3.3.1 splines_3.3.1 knitr_1.14
LS0tCnRpdGxlOiAiUl9wcm9ncmFtbWluZzIwMTYiCmF1dGhvcjogIlRob21hcyBLw6RsbG1hbiwgTkJJUyIKZGF0ZTogIjEgRGVjIDIwMTYiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCmBgYAojIyBJbnRyb2R1Y3Rpb24KUi1zdHVkaW8gaGVscHMgZ3JlYXRseSBpbiBkb2luZyByZXByb2R1Y2FibGUgcmVzZWFyY2ggdmlhIHRoZSBSIG1hcmtkb3duIGxhbmd1YWdlLiBJbiBhIFJtZCBkb2N1bWVudCB5b3UgY2FuIHIgY29kZSwgciByZXN1bHRzIGFuZCBwbGFpbiB0ZXh0IGluIG9uZSBkb2N1bWVudCB0aGF0IHRoZW4gY2FuIGJlIGV4cG9ydGVkIGluIG1hbnkgZGlmZmVyZW50IGZvcm1hdHMuIAoKQ29kZSBibG9ja3MgY2FuIGJlIGNyZWF0ZWQgYm90aCBpbmxpbmUgd2l0aCB0ZXh0IDQgKyAyID0gYHIgNCArIDJgIG9yIGluIGJsb2NrcyBvZiBjb2RlOgpgYGB7UiB0ZXN0fQo0ICsgMgpgYGAKCiMjIFJOQSBzZXEgTkJJUyByZXBvcnQKSW4gdGhpcyBkb2N1bWVudCBJIHdpbGwgY3JlYXRlIHR3byBwbG90cyB0aGF0IG9uZSBvZnRlbiBjcmVhdGVzIGluIGFuYWx5c2luZyBSTkEgc2VxdWVuY2UgZGF0YS4KClRoZSBkYXRhIGlzIGZyb20gYSByZWNlbnQgcGFwZXIgb24gWUFQIGFuZCBUQVogY29udHJvbCBvZiBwZXJpcGhlcmFsIG15ZWxpbmF0aW9uIGFuZCB0aGUgZXhwcmVzc2lvbiBvZiBsYW1pbmluIHJlY2VwdG9ycyBpbiBTY2h3YW5uIGNlbGxzIChQb2l0ZWxvbiBldCBhbC4gTmF0dXJlIE5ldXJvc2NpLiAyMDE2KS4gSW4gdGhlIHN0dWR5IHRoZSBnZW5lcyBZQVAgYW5kIFRBWiB3ZXJlIGtub2NrZWQtZG93biBpbiBTY2h3YW5uIGNlbGxzLgoKVGhlIG1hdGVyaWFsIGZvciBSTkEtc2VxIHdhcyBjb2xsZWN0ZWQgZnJvbSB0aHJlZSBiaW9sb2dpY2FsIHJlcGxpY2F0ZXMgb2YgYm90aCBrbm9ja2Rvd25zIGFuZCBjb250cm9scy4KCkJvdGggcmVhZCBtYXBwaW5nIGFuZCByZWFkIGNvdW50aW5nIGhhcyBiZWVuIGRvbmUgb3V0c2lkZSBSIGFuZCB0aGUgY29kZSBiZWxvdyByZWFkcyBpbiB0aGUgcmVhZCBjb3VudHMgcGVyIGdlbmUgYW5kIGNyZWF0ZSBhbiBvYmplY3QgZm9yIGFuYWx5c2lzIG9mIGRpZmZlcmVudGlhbCBnZW5lIGV4cHJlc3Npb24uCgpgYGB7ciBwcmVwYXJhdGlvbn0KbGlicmFyeShlZGdlUikKCiMjIFByZXBhcmluZyBzYW1wbGVzIGdyb3VwIGxhYmVscwpzYW1wbGUuZ3JvdXBzIDwtIHJlcChjKCdLTycsJ1d0JyksIGVhY2ggPSAzKQoKIyMgUmVhZGluZyBpbiBkYXRhCmRhdGEuY291bnRzIDwtIHJlYWQudGFibGUoInRhYmxlQ291bnRzLnR4dCIsIGhlYWRlciA9IFRSVUUpCiNjb2xuYW1lcyhkYXRhLmNvdW50cykgPC0gc2FtcGxlLmdyb3VwcyAKCiMjIGVkZ2VSCiMjIGJ1aWxkaW5nIGVkZ2VSIG9iamVjdApkYXRhLmNkcyA8LSBER0VMaXN0KGRhdGEuY291bnRzLCBncm91cCA9IHNhbXBsZS5ncm91cHMpCgojIyBmaWx0ZXJpbmcgbG93IGNvdW50IHJlYWRzIChrZWVwaW5nIHJhZHMgd2l0aCBhdCBsZWFzdCAxIHJlYWQgcGVyIG1pbGlvbiBpbiBhdCBsZWFzdCAyIHNhbXBsZXMpCmRhdGEuY2RzIDwtIGRhdGEuY2RzW3Jvd1N1bXMoY3BtKGRhdGEuY2RzKT4gMSkgPiAyLF0KCiMjIG5vcm1hbGl6aW5nIGRhdGEKZGF0YS5jZHMgPC0gY2FsY05vcm1GYWN0b3JzKGRhdGEuY2RzKQpgYGAKCiMjIyBNRFMgcGxvdApNdWx0aWRpbWVuc2lvbmFsIHNjYWxpbmcgcGxvdHMgY2FuIGJlIHVzZWQgdG8gdmlzdWFsaXplIGRpc3RhbmNlcyBiZXR3ZWVuIHNhbXBsZXMgaW4gYSBnZW5lIGV4cHJlc3Npb24gZXhwZXJpbWVudC4gTm90ZSB0aGF0IHRoZXJlIGFyZSBhIHNlcGVyYXRpb24gb2Ygc2FtcGxlIGFsb25nIHRoZSBtYWpvciBheGlzIG9mIGRpZmZlcmVudGlhdGlvbiBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgbGlrZSBhcmUgZ2VuZXMgc2hvd2luZyBkaWZmZXJlbnRpYWwgZ2VuZSBleHByZXNzaW9uIGJldHdlZW4ga25vY2tkb3duIGFuZCB3aWxkdHlwZS4KYGBge1IgTURTfQpwbG90TURTKGRhdGEuY2RzLCBsYWJlbHMgPSBzYW1wbGUuZ3JvdXBzKQpgYGAKIyMjIERldGVjdGlvbiBvZiBkaWZmZXJlbnRpYWxseSBleHByZXNzZWQgZ2VuZXMKCmBgYHtSIERFfQpteS5kZXNpZ24gPC0gbW9kZWwubWF0cml4KH4wK3NhbXBsZS5ncm91cHMpCmNvbG5hbWVzKG15LmRlc2lnbikgPC0gbGV2ZWxzKGRhdGEuY2RzJHNhbXBsZXMkZ3JvdXApCmRhdGEuY2RzIDwtIGVzdGltYXRlRGlzcChkYXRhLmNkcywgbXkuZGVzaWduLCB0cmVuZC5tZXRob2Q9J21vdmluZ2F2ZScpCm15LmNvbnRyYXN0cyA8LSBtYWtlQ29udHJhc3RzKEtPdnNXdCA9IEtPLVd0LCBsZXZlbHMgPSBteS5kZXNpZ24pCmZpdCA8LSBnbG1GaXQoZGF0YS5jZHMsIG15LmRlc2lnbikKbHJ0IDwtIGdsbUxSVChmaXQsIGNvbnRyYXN0PW15LmNvbnRyYXN0c1ssIktPdnNXdCJdKQpscnQudG9wIDwtIHRvcFRhZ3MobHJ0LCBuPUluZiwgYWRqdXN0Lm1ldGhvZD0nQkgnKQpscnQudGFibGUgPC0gbHJ0LnRvcCR0YWJsZQpkZSA8LSBkZWNpZGVUZXN0c0RHRShscnQsIGxmYz0wKQpkZXRhZ3MgPC0gcm93bmFtZXMoZGF0YS5jZHMpW2FzLmxvZ2ljYWwoZGUpXQpzdW1tYXJ5KGRlKQpgYGAKCiMjIyBNQS1wbG90CgpgYGB7UiBNQX0KcGxvdFNtZWFyKGxydCwgZGUudGFncyA9IGRldGFncykKYGBgCgojIyMgUiBzZXNzaW9uCkEgdXNlZnVsIGNvbW1hbmQgZm9yIHJlcHJvZHVjYWJsZSByZXNlYXJjaCBpbiBSIGlzIHRoZSBzZXNzaW9uaW5mby4gSXQgcHJpbnRzIGEgaW5mb3JtYXRpb24gb24gYWxsIGxvYWRlZCBwYWNrYWdlcyBpbiB5b3VyIHRoZSBjdXJyZW50IFIgc2Vzc2lvbiBhbmQgd2lsbCBoZW5jZSBiZSBoZWxwZnVsIGlmIHlvdSBzaGFyZSB0aGUgY29kZSBvciB3YW50IHRvIHJlcnVuIHRoZSBjb2RlIGF0IGEgbGF0ZXIgdGltZSBhbmQgaGF2ZSBmb3Jnb3R0ZW4gdGhlIHBhY2thZ2VzIHRvIGxvYWQuCmBgYHtSIGluZm99CnNlc3Npb25JbmZvKCkKYGBg