It hard to figure out what sort of data you have. qPCR? Let me give you an example with tools involved on how I get differential genes for RNAseq data, that is whole transcriptom and for mouse that transcriptom that's about 23000 genes.
- Step 1. Map raw reads to the reference genome.
- Step 2. Count number of reads within the feature. Feature can be several things, but lets just take protein coding feature (feature == gene).
- Step 3. Do differential expressions analysis
From step 2 you get a matrix of counts.
sampleA_rep1 sampleA_rep2 sampleB_rep1 sampleB_rep2
gene1 2 5 20 23
gene2 10 12 50 50
gene3 20 23 4 6
..
geneN
The packages that I use are limma
and/or edgeR
. You can find them on bioconductor Both packages take raw counts and give you topTable
of DEG, default is top 100 genes.
I recommend reading edgeR
or limma
manuals, there come with great explanations as well as examples. Also A scaling normalization method for differential expression analysis of RNA-seq data is original paper that explains TMM normalisation (mention a bit more in depth below)
Two things; one you need to filter genes with low counts, convert to cpm()
counts per million before filtering as this takes library size (depth of sequencing) into consideration. two calcNormFactors()
will do TMM
The hardest thing (I understand) in RNAseq is to get total RNA output for each sample. Because a treatment will effect the number of transcripts expressed in that sample, increasing or decreasing amount of transcript, which give you unbalanced counts. You won't know just by looking at raw counts if geneA has less counts because it's been down regulated OR because that sample after treatment has more transcripts present in the cell and geneA simply has less coverage, due to other transcripts also getting reads now. I can't really explain that too technically because I don't understand this myself, but TMM normalisation takes care of this and gives you an estimate of degree of variability.
I know that I'm not giving that much info on actual differential testing, which was your question. edgeR
has exactTest()
which is Exact Tests for Differences between Two Groups of Negative-Binomial Counts , which might help you, but you might have normalise your counts differently as mentioned above. The general idea (I understand) is you need to fit a model (lmFit()
) and then do the test eBayes()
Other
- Degust this is very nice tool that uses
limma
and edgeR
in the backend, but simplifies a lot of things as well as gives you nice interface to work with your data. You upload raw counts! in the format shown above
- DESeq one of the other rather popular R packages that can also do differential gene testing