The experiment you have outlined is a minimal example of what is called the differential expression problem in genomic research. RNA samples are collected from two or more cell types or treatment conditions and gene expression profiling is conducted on each RNA sample. This provides an abundance (or expression) measure for each gene in each sample. The aim is to do a statistical test for each gene to find which genes show a change in mean expression level between the conditions. The challenge of course is that the sample sizes are tiny while the number of tests to be done is very large. Genewise t-tests would be on 1 df! In typical genomic applications, the number of rows (genes or genomic ids) is usually over 10,000 but can be much larger, even into the millions.
An enormous amount of attention has been devoted to this problem in the statistical bioinformatics literature with (I guess) probably more than 1000 methodological papers. The consensus is that univariate statistical tests perform very badly if they are simply applied genewise and one must instead use more advanced statistical methods that borrow information between genes while allowing for the possibility that genes may have different variances. One of the most popular methods is that of the limma package, which uses empirical Bayes moderated t-tests. (I'm the limma author, so I may be biased.)
Here is an example run using R and the limma package. I will assume that your expression levels are log2-expression values. If the entries are actually RNA-seq counts or something else, then a little pre-processing is required. First install the package:
source("http://www.bioconductor.org/biocLite.R")
biocLite("limma")
library(limma)
Generate some example data with 1000 genes. In this simulation, the first 5 genes are differentially expressed:
y <- matrix(rnorm(3000),1000,3)
rownames(y) <- paste0("Gene",1:1000)
y[1:5,3] <- y[1:5,3]+10
Now analyse with limma:
Group <- factor(c(1,1,2))
design <- model.matrix(~Group)
fit <- lmFit(y, design)
fit <- eBayes(fit)
Show the top 10 DE genes by p-value:
> topTable(fit)
logFC AveExpr t P.Value adj.P.Val B
Gene4 9.54 2.408 7.75 6.51e-08 5.91e-05 7.208
Gene2 9.22 2.870 7.46 1.24e-07 5.91e-05 6.715
Gene1 8.98 3.287 7.30 1.77e-07 5.91e-05 6.436
Gene3 8.70 3.823 7.05 3.16e-07 7.89e-05 5.986
Gene5 8.81 3.200 6.68 7.50e-07 1.50e-04 5.301
Gene414 -4.65 -0.988 -3.80 8.95e-04 1.32e-01 -0.586
Gene507 4.64 -0.241 3.79 9.21e-04 1.32e-01 -0.611
Gene566 4.05 0.702 3.18 4.11e-03 5.14e-01 -1.882
Gene628 -3.49 -0.133 -2.86 8.85e-03 9.84e-01 -2.530
Gene131 -3.26 -0.337 -2.67 1.36e-02 9.94e-01 -2.888
The t column is the moderated t-statistic. The adj.P.value column here gives an upper bound for the expected false discovery rate if that number of genes are chosen as DE. The B column is the log posterior odds of being DE. In this example, all the truly DE genes have positive log posterior odds.