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

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
3
Entering edit mode
@james-w-macdonald-5106
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.

0
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?

1
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).