The limma user's guide states that:
The linear model and differential expression functions are applicable to data from any quantitative gene expression technology including microarrays, RNA-seq and quantitative PCR.
However, that's the only time qPCR gets mentioned, and I haven't found examples on how to work with this type of data.
For background, qPCR data comes in the form of cycle threshold (Ct) values, which are inversely correlated to the gene expression (the more the gene is expressed, the fewer cycles it will need to reach the threshold).
These Ct values are then typically normalized by subtracting the Ct values of reference/housekeeping genes to derive ∆Ct values:
∆Ct = Ct (gene of interest) – Ct (housekeeping gene)
Then one can calculate the difference across conditions of interest as ∆∆Ct values:
∆∆Ct = ∆Ct (treated sample) – ∆Ct (untreated sample)
And fold changes are calculated as:
But this only works for very simple experimental designs/contrasts (e.g.: treated vs untreated), while I have a more complex study design that would benefit from the statistical modelling capabilities of limma.
So, here's my question: how should I process the qPCR Ct data for use in limma? Ultimately I'd like to transform the Ct values in expression values that I can fit into an ExpressionSet object and feed to lmFit() and downstream functions.