Limma/voom analysis of time-series data (with only 1 condition)
1
0
Entering edit mode
@752e6b78
Last seen 2.8 years 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 • 1.4k views
ADD COMMENT
3
Entering edit mode
@james-w-macdonald-5106
Last seen 6 hours 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.

ADD COMMENT
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?

ADD REPLY
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).

ADD REPLY

Login before adding your answer.

Traffic: 644 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

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

Powered by the version 2.3.6