Limma/voom analysis of time-series data (with only 1 condition)
Entering edit mode
Last seen 4 months ago

I'm entirely new to limma/voom and the wider differential gene expression analysis field.

I have an experiment consisting of 20 patients, 7 time-points for each patient, and all 20 patients are undergoing the same biological process i.e. there is only 1 condition. There are no replicates for each time point.

I'm interested in determining which genes are differentially expressed as a function of time. For example, the contrast could be TimePoint 7 vs. TimePoint 1.

A high degree of inter-individual variability is expected, including different baselines (defined by the first time-point).

My design so far is:

mm <- model.matrix(~0 + timepoint)

But it's not clear to me from the limma manual how to use duplicateCorrelation() or exactly what it is doing. I assume it's needed in order to account for the variability among patients.

How should I use it? What is the best possible design for my experiment?

Many thanks.

limma DifferentialExpression • 337 views
Entering edit mode
Last seen 1 hour ago
United States

In this situation you just fit an additive model. As an example,

## example fake data
> d.f <- data.frame(Patient = rep(LETTERS[1:20], each = 7), time = factor(rep(1:7, 20)))

> design <- model.matrix(~time+Patient, d.f)
> colnames(design)
 [1] "(Intercept)" "time2"       "time3"       "time4"       "time5"      
 [6] "time6"       "time7"       "PatientB"    "PatientC"    "PatientD"   
[11] "PatientE"    "PatientF"    "PatientG"    "PatientH"    "PatientI"   
[16] "PatientJ"    "PatientK"    "PatientL"    "PatientM"    "PatientN"   
[21] "PatientO"    "PatientP"    "PatientQ"    "PatientR"    "PatientS"   
[26] "PatientT"

And here the time coefficients all compare to the baseline (e.g., time2 is actually time2 - time1). And by blocking on patient we account for any patient-specific differences.

Entering edit mode

Awesome, thank you. I'm used to using makeContrasts in order to specify 'time2-time1' etc. but if everything in this model is already relative to baseline, how do I access the data? Simply time2-(Intercept)? What would be the change necessary to make everything not relative to baseline? i.e. to obtain time2-time, time3-time2, time4-time3 and so forth?

Entering edit mode

No, time2 is already time2 - Intercept. You just use topTable to extract data for each comparison to baseline. And any other comparison you use makeContrasts. So time3 - time2 is still what you think it is (it's actually EDIT (time3 - time1) - (time2 - time1), which collapses to the comparison you want).


Login before adding your answer.

Traffic: 418 users visited in the last hour
Help About
Access RSS

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6