Running DESeq2

For comprehensive tutorials, see here: http://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html

Running edgeR

For the user guide, see here: https://www.bioconductor.org/packages/release/bioc/vignettes/edgeR/inst/doc/edgeRUsersGuide.pdf

Running simple/wilcox based DE

calc_DE <- function(X, f.a, filt, group){
	X = X[f.a,filt]
	group = group[filt]
  	if( sum(group==1) < 2  ) {
           	m.X1 = (X[,group==1])
	} else {
		m.X1 = rowMeans(X[,group==1])
 	}
  	if( sum(group==2) < 2  ) {
           	m.X2 = (X[,group==2])
	} else {
		m.X2 = rowMeans(X[,group==2])
 	}
        m.X = rowMeans(X)
	fc = log2(m.X1/m.X2)
	X.ps_g = sapply(1:dim(X)[1], function(k) wilcox.test(X[k,group==1], X[k,group==2], alt="g")$p.val)
	X.padj_g = p.adjust(X.ps_g , method = "BH")

	X.ps_l = sapply(1:dim(X)[1], function(k) wilcox.test(X[k,group==1], X[k,group==2], alt="l")$p.val)
	X.padj_l = p.adjust(X.ps_l , method = "BH")

	X.ps = sapply(1:dim(X)[1], function(k) wilcox.test(X[k,group==1], X[k,group==2])$p.val)
	X.padj = p.adjust(X.ps , method = "BH")

	de = cbind(m.X, fc, X.ps_g, X.padj_g, X.ps_l, X.padj_l, X.ps, X.padj, m.X1, m.X2)
	return(de)
}

deg = calc_DE(cpm, keep, subset, groups  )

DE between cases and controls

Cases are codified as 1, contols as 0.

DE with low sample numbers

Don’t do it! But if you must, DESeq2 is probably best.

DE between multiple conditions

DESeq2 does this automatically. Pairwise analysis below.

DE with unbalanced samples

Downsample, repeat and average.