Mercurial > repos > iuc > limma_voom
comparison limma_voom.R @ 7:e6a4ff41af6b draft
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/limma_voom commit cf399638ebca4250bcc15f468238a9964de97b33
author | iuc |
---|---|
date | Wed, 09 May 2018 13:27:14 -0400 |
parents | 39fa12a6d885 |
children | 00a42b66e522 |
comparison
equal
deleted
inserted
replaced
6:39fa12a6d885 | 7:e6a4ff41af6b |
---|---|
20 # pAdjOpt", "d", 1, "character" -String specifying the p-value adjustment method | 20 # pAdjOpt", "d", 1, "character" -String specifying the p-value adjustment method |
21 # normOpt", "n", 1, "character" -String specifying type of normalisation used | 21 # normOpt", "n", 1, "character" -String specifying type of normalisation used |
22 # robOpt", "b", 0, "logical" -String specifying if robust options should be used | 22 # robOpt", "b", 0, "logical" -String specifying if robust options should be used |
23 # trend", "t", 1, "double" -Float for prior.count if limma-trend is used instead of voom | 23 # trend", "t", 1, "double" -Float for prior.count if limma-trend is used instead of voom |
24 # weightOpt", "w", 0, "logical" -String specifying if voomWithQualityWeights should be used | 24 # weightOpt", "w", 0, "logical" -String specifying if voomWithQualityWeights should be used |
25 # volhiOpt", "v", 1, "integer" -Integer specifying number of genes to highlight in volcano plot | 25 # topgenes", "G", 1, "integer" -Integer specifying no. of genes to highlight in volcano and heatmap |
26 # treatOpt", "T", 0, "logical" -String specifying if TREAT function shuld be used | 26 # treatOpt", "T", 0, "logical" -String specifying if TREAT function shuld be used |
27 # | 27 # |
28 # OUT: | 28 # OUT: |
29 # Density Plots (if filtering) | |
30 # Box Plots (if normalising) | |
29 # MDS Plot | 31 # MDS Plot |
30 # Voom/SA plot | 32 # Voom/SA plot |
31 # MD Plot | 33 # MD Plot |
34 # Volcano Plot | |
35 # Heatmap | |
32 # Expression Table | 36 # Expression Table |
33 # HTML file linking to the ouputs | 37 # HTML file linking to the ouputs |
34 # Optional: | 38 # Optional: |
35 # Normalised counts Table | 39 # Normalised counts Table |
36 # RData file | 40 # RData file |
37 # | 41 # |
38 # | 42 # |
39 # Author: Shian Su - registertonysu@gmail.com - Jan 2014 | 43 # Author: Shian Su - registertonysu@gmail.com - Jan 2014 |
40 # Modified by: Maria Doyle - Jun 2017, Jan 2018 | 44 # Modified by: Maria Doyle - Jun 2017, Jan 2018, May 2018 |
41 | 45 |
42 # Record starting time | 46 # Record starting time |
43 timeStart <- as.character(Sys.time()) | 47 timeStart <- as.character(Sys.time()) |
44 | 48 |
45 # Load all required libraries | 49 # Load all required libraries |
48 library(splines, quietly=TRUE, warn.conflicts=FALSE) | 52 library(splines, quietly=TRUE, warn.conflicts=FALSE) |
49 library(edgeR, quietly=TRUE, warn.conflicts=FALSE) | 53 library(edgeR, quietly=TRUE, warn.conflicts=FALSE) |
50 library(limma, quietly=TRUE, warn.conflicts=FALSE) | 54 library(limma, quietly=TRUE, warn.conflicts=FALSE) |
51 library(scales, quietly=TRUE, warn.conflicts=FALSE) | 55 library(scales, quietly=TRUE, warn.conflicts=FALSE) |
52 library(getopt, quietly=TRUE, warn.conflicts=FALSE) | 56 library(getopt, quietly=TRUE, warn.conflicts=FALSE) |
57 library(gplots, quietly=TRUE, warn.conflicts=FALSE) | |
53 | 58 |
54 ################################################################################ | 59 ################################################################################ |
55 ### Function Declaration | 60 ### Function Declaration |
56 ################################################################################ | 61 ################################################################################ |
57 # Function to sanitise contrast equations so there are no whitespaces | 62 # Function to sanitise contrast equations so there are no whitespaces |
167 "pAdjOpt", "d", 1, "character", | 172 "pAdjOpt", "d", 1, "character", |
168 "normOpt", "n", 1, "character", | 173 "normOpt", "n", 1, "character", |
169 "robOpt", "b", 0, "logical", | 174 "robOpt", "b", 0, "logical", |
170 "trend", "t", 1, "double", | 175 "trend", "t", 1, "double", |
171 "weightOpt", "w", 0, "logical", | 176 "weightOpt", "w", 0, "logical", |
172 "volhiOpt", "v", 1, "integer", | 177 "topgenes", "G", 1, "integer", |
173 "treatOpt", "T", 0, "logical"), | 178 "treatOpt", "T", 0, "logical"), |
174 byrow=TRUE, ncol=4) | 179 byrow=TRUE, ncol=4) |
175 opt <- getopt(spec) | 180 opt <- getopt(spec) |
176 | 181 |
177 | 182 |
328 mdsOutPng[i] <- makeOut(paste0("mdsplot_", names(factors)[i], ".png")) | 333 mdsOutPng[i] <- makeOut(paste0("mdsplot_", names(factors)[i], ".png")) |
329 } | 334 } |
330 | 335 |
331 mdOutPdf <- character() | 336 mdOutPdf <- character() |
332 volOutPdf <- character() | 337 volOutPdf <- character() |
338 heatOutPdf <- character() | |
333 mdvolOutPng <- character() | 339 mdvolOutPng <- character() |
334 topOut <- character() | 340 topOut <- character() |
335 for (i in 1:length(contrastData)) { | 341 for (i in 1:length(contrastData)) { |
336 mdOutPdf[i] <- makeOut(paste0("mdplot_", contrastData[i], ".pdf")) | 342 mdOutPdf[i] <- makeOut(paste0("mdplot_", contrastData[i], ".pdf")) |
337 volOutPdf[i] <- makeOut(paste0("volplot_", contrastData[i], ".pdf")) | 343 volOutPdf[i] <- makeOut(paste0("volplot_", contrastData[i], ".pdf")) |
344 heatOutPdf[i] <- makeOut(paste0("heatmap_", contrastData[i], ".pdf")) | |
338 mdvolOutPng[i] <- makeOut(paste0("mdvolplot_", contrastData[i], ".png")) | 345 mdvolOutPng[i] <- makeOut(paste0("mdvolplot_", contrastData[i], ".png")) |
339 topOut[i] <- makeOut(paste0(deMethod, "_", contrastData[i], ".tsv")) | 346 topOut[i] <- makeOut(paste0(deMethod, "_", contrastData[i], ".tsv")) |
340 } | 347 } |
341 | 348 |
342 normOut <- makeOut(paste0(deMethod, "_normcounts.tsv")) | 349 normOut <- makeOut(paste0(deMethod, "_normcounts.tsv")) |
689 pdf(volOutPdf[i]) | 696 pdf(volOutPdf[i]) |
690 if (haveAnno) { | 697 if (haveAnno) { |
691 # labels must be in second column currently | 698 # labels must be in second column currently |
692 limma::volcanoplot(fit, coef=i, | 699 limma::volcanoplot(fit, coef=i, |
693 main=paste("Volcano Plot:", unmake.names(contrastData[i])), | 700 main=paste("Volcano Plot:", unmake.names(contrastData[i])), |
694 highlight=opt$volhiOpt, | 701 highlight=opt$topgenes, |
695 names=fit$genes[, 2]) | 702 names=fit$genes[, 2]) |
696 } else { | 703 } else { |
697 limma::volcanoplot(fit, coef=i, | 704 limma::volcanoplot(fit, coef=i, |
698 main=paste("Volcano Plot:", unmake.names(contrastData[i])),, | 705 main=paste("Volcano Plot:", unmake.names(contrastData[i])), |
699 highlight=opt$volhiOpt, | 706 highlight=opt$topgenes, |
700 names=fit$genes$GeneID) | 707 names=fit$genes$GeneID) |
701 } | 708 } |
702 linkName <- paste0("VolcanoPlot_", contrastData[i], ".pdf") | 709 linkName <- paste0("VolcanoPlot_", contrastData[i], ".pdf") |
703 linkAddr <- paste0("volplot_", contrastData[i], ".pdf") | 710 linkAddr <- paste0("volplot_", contrastData[i], ".pdf") |
711 linkData <- rbind(linkData, c(linkName, linkAddr)) | |
712 invisible(dev.off()) | |
713 | |
714 # Plot Heatmap | |
715 topgenes <- rownames(top[1:opt$topgenes, ]) | |
716 if (wantTrend) { | |
717 topexp <- plotData[topgenes, ] | |
718 } else { | |
719 topexp <- plotData$E[topgenes, ] | |
720 } | |
721 | |
722 pdf(heatOutPdf[i]) | |
723 par(cex.main=0.8) | |
724 if (haveAnno) { | |
725 # labels must be in second column currently | |
726 heatmap.2(topexp, scale="row", | |
727 main=paste("Heatmap:", unmake.names(contrastData[i])), | |
728 col="bluered", trace="none", density.info="none", | |
729 margin=c(8,6), lhei=c(2,10), dendrogram="column", | |
730 cexRow=0.7, cexCol=0.7, srtCol=45, | |
731 labRow=top[topgenes, 2]) | |
732 } else { | |
733 heatmap.2(topexp, scale="row", | |
734 main=paste("Heatmap:", unmake.names(contrastData[i])), | |
735 col="bluered", trace="none", density.info="none", | |
736 margin=c(8,6), lhei=c(2,10), dendrogram="column", | |
737 cexRow=0.7, cexCol=0.7, srtCol=45) | |
738 } | |
739 linkName <- paste0("Heatmap_", contrastData[i], ".pdf") | |
740 linkAddr <- paste0("heatmap_", contrastData[i], ".pdf") | |
704 linkData <- rbind(linkData, c(linkName, linkAddr)) | 741 linkData <- rbind(linkData, c(linkName, linkAddr)) |
705 invisible(dev.off()) | 742 invisible(dev.off()) |
706 | 743 |
707 # PNG of MD and Volcano | 744 # PNG of MD and Volcano |
708 png(mdvolOutPng[i], width=1200, height=600) | 745 png(mdvolOutPng[i], width=1200, height=600) |
709 par(mfrow=c(1, 2), mar=c(5,4,2,2)+0.1, oma=c(0,0,3,0)) | 746 par(mfrow=c(1, 2), mar=c(5,4,2,2)+0.1, oma=c(0,0,3,0)) |
710 limma::plotMD(fit, status=status[, i], coef=i, main="MD Plot", | 747 limma::plotMD(fit, status=status[, i], coef=i, main="MD Plot", |
711 hl.col=alpha(c("firebrick", "blue"), 0.4), values=c(1, -1), | 748 hl.col=alpha(c("firebrick", "blue"), 0.4), values=c(1, -1), |
712 xlab="Average Expression", ylab="logFC") | 749 xlab="Average Expression", ylab="logFC") |
713 | |
714 abline(h=0, col="grey", lty=2) | 750 abline(h=0, col="grey", lty=2) |
715 | 751 |
716 # Volcano plots | 752 # Volcano plots |
717 if (haveAnno) { | 753 if (haveAnno) { |
718 # labels must be in second column currently | 754 # labels must be in second column currently |
719 limma::volcanoplot(fit, coef=i, main="Volcano Plot", | 755 limma::volcanoplot(fit, coef=i, main="Volcano Plot", |
720 highlight=opt$volhiOpt, | 756 highlight=opt$topgenes, |
721 names=fit$genes[, 2]) | 757 names=fit$genes[, 2]) |
722 } else { | 758 } else { |
723 limma::volcanoplot(fit, coef=i, main="Volcano Plot", | 759 limma::volcanoplot(fit, coef=i, main="Volcano Plot", |
724 highlight=opt$volhiOpt, | 760 highlight=opt$topgenes, |
725 names=fit$genes$GeneID) | 761 names=fit$genes$GeneID) |
726 } | 762 } |
727 | 763 |
728 imgName <- paste0("MDVolPlot_", contrastData[i]) | 764 imgName <- paste0("MDVolPlot_", contrastData[i]) |
729 imgAddr <- paste0("mdvolplot_", contrastData[i], ".png") | 765 imgAddr <- paste0("mdvolplot_", contrastData[i], ".png") |