Domanda:
Comprensione del design, del contrasto e dei risultati di DESeq2
bli
2017-05-19 19:40:14 UTC
view on stackexchange narkive permalink

Ho una serie di esperimenti ad alto rendimento con 2 genotipi ("WT" e "prg1") e 3 trattamenti ("RT", "HS30" e "HS30RT120") e ci sono 2 repliche per ciascuno dei combinazioni di trattamento genotipo x.

I conteggi di lettura per i geni sono riassunti in un file che carico come segue in R:

  > counts_data <- read.table (" path / to / my / file ", header = TRUE, row.names =" gene ") > colnames (counts_data) [1]" WT_RT_1 "" WT_HS30_1 "" WT_HS30RT120_1 "" prg1_RT_1 "[5]" prg1_HS30_1 "" prg120 "WT_RT_2" "WT_HS30_2" [9] "WT_HS30RT120_2" "prg1_RT_2" "prg1_HS30_2" "prg1_HS30RT120_2"  

Descrivo gli esperimenti come segue:

  > col_data <- DataFrame (geno = c (rep ("WT", times = 3), rep ("prg1", times = 3), rep ("WT", times = 3), rep ("prg1", times = 3)), treat = rep (c ("RT", "HS30", "HS30RT120"), times = 4), rep = c (rep ("1", times = 6), rep ("2", times = 6) ), Row.names = colnames (counts_data)) > col_dataDataFrame con 12 righe e 3 colonne Geno ossequio rep <character> <character> <character>WT_RT_1 WT RT 1WT_HS30_1 WT HS30 1WT_HS30RT120_1 WT HS30RT120 1prg1_RT_1 PRG1 RT 1prg1_HS30_1 PRG1 HS30 1 ... ... .... ..WT_HS30_2 WT HS30 2WT_HS30RT120_2 WT HS30RT120 2prg1_RT_2 prg1 RT 2prg1_HS30_2 prg1 HS30 2prg1_HS30RT120_2 prg1 HS30RT120 2  

Vorrei creare un oggetto DESeq2 che

  • trova geni espressi in modo differenziale quando il trattamento varia per un dato genotipo fisso
  • oppure:

    • trova geni espressi in modo differenziale quando il genotipo varia per un determinato trattamento fisso

    Nel forum di assistenza di bioconduttori penso di aver trovato una situazione in qualche modo simile, e ho letto quanto segue:

    Prova un design di ~ genotype + genotype: condition

    Quindi avrai un effetto condizione per ogni livello di genotipo, incluso il livello di riferimento .

    Puoi contrastarne le coppie usando lo stile elenco dell'argomento 'contrast'.

    Tuttavia, questo non spiega come applicare questo "stile elenco "all'argomento" contrasto ". E la situazione di cui sopra sembra essere asimmetrica. Con questo intendo che genotipo e condizione non sembrano avere un ruolo intercambiabile.

    Quindi ho provato la seguente formula più simmetrica:

      > dds <- DESeqDataSetFromMatrix (countData = counts_data, colData = col_data, design = ~ geno + treat + geno: treat) > dds <- DESeq (dds)  

    Ora, posso per esempio ottenere l'espressione differenziale risultati quando si confrontano il trattamento "HS30" con "RT" come riferimento, nel genotipo "prg1" ?

    E come?

    Se ho capito bene, quanto sopra- lo "stile elenco" menzionato usa i nomi dati dalla funzione resultsNames . Nel mio caso, ho quanto segue:

      > resultsNames (dds) [1] "Intercept" "geno_WT_vs_prg1" [3] "treat_HS30RT120_vs_HS30" "treat_RT_vs_HS30" [5] "genoWT.treatHS30" "genoWT.treatRT"  

    Penso di aver bisogno di un contrasto tra "genoprg1.treatRT" e "genoprg1.treatHS30", ma questi non sono nei nomi dei risultati sopra.

    Mi sono perso.

    questo è un esempio più simile (credo): https://support.bioconductor.org/p/63201/. La conclusione è simile alla risposta di Devon: usa LRT.
    Due risposte:
    #1
    +13
    Devon Ryan
    2017-05-19 19:51:01 UTC
    view on stackexchange narkive permalink

    Il modo più semplice è non utilizzare un test di Wald, ma piuttosto un LRT con un modello ridotto privo del fattore di interesse:

      dds = DESeq (dds, test = "LRT" ridotto = ~ geno + geno: Treatment)  

    Quanto sopra darebbe risultati per il trattamento indipendentemente dal livello pur tenendo conto di una possibile interazione (cioè, un "effetto principale del trattamento, indipendentemente dal tipo di trattamento ").

    Per inciso, questo è probabilmente un caso in cui il modo preferito da edgeR di creare gruppi di combinazioni di trattamento genotipo e quindi utilizzare un modello di ~ 0 + group potrebbe semplificarti la vita. Otterrai gli stessi risultati (più o meno) a prescindere, ma probabilmente ti sarà più facile pensare in questi termini piuttosto che ricordare che il livello di base sarà treatment HS30 e geno prg1 .

    Ho provato quanto segue: `dds <- DESeqDataSetFromMatrix (countData = counts_data, colData = col_data, design = ~ geno + treat + geno: treat)` then `dds = DESeq (dds, test =" LRT ", Reduced = ~ geno + geno: treat) `ma fallisce con` Error in nbinomLRT (object, full = full, Reduced = Reduced, betaPrior = betaPrior,: meno di un grado di libertà, forse i modelli Full e Reduced non sono nell'ordine corretto`. Inoltre , quello che voglio non è "indipendentemente dal tipo di trattamento". Voglio risultati per un dato trattamento fisso o per un dato genotipo fisso. Forse la mia domanda non era chiara.
    Dovrei esaminare la matrice del modello per vedere perché sta producendo l'errore. Ad ogni modo, suggerirei di seguire la strada preferita dagli autori di edgeR e di rendere le combinazioni trattamento-genotipo in singoli gruppi. Quindi i contrasti sono più evidenti.
    "Il modo più semplice è non usare un test di Wald, ma piuttosto un LRT" - potresti spiegare perché?
    Poiché il trattamento ha più livelli, quindi con un test di Wald è necessario gestire i contrasti in modo appropriato, mentre con un LRT si possono omettere contemporaneamente tutti i livelli contemporaneamente.
    #2
    +8
    bli
    2017-05-22 17:05:18 UTC
    view on stackexchange narkive permalink

    Sembra che il trucco del "combinare fattori" descritto nella parte 3.3 dell'attuale "vignetta" DESeq2 (a partire da maggio 2017) sotto il titolo "Interazione" sia un modo per accedere ai contrasti desiderati.

    Sembra possibile farlo direttamente quando si costruisce il colData e quando si chiama DESeqDataSetFromMatrix:

    Aggiungiamo una combinazione di fattori "geno" e "treat" al futuro parametro colData :

      > col_data $ geno_treat <- as.factor (paste (col_data $ geno, col_data $ treat, sep = "_")) > col_dataDataFrame con 12 righe e 4 colonne Geno ossequio rep geno_treat <character> <character> <character> <factor>WT_RT_1 WT RT 1 WT_RTWT_HS30_1 WT HS30 1 WT_HS30WT_HS30RT120_1 WT HS30RT120 1 WT_HS30RT120prg1_RT_1 PRG1 RT 1 prg1_RTprg1_HS30_1 PRG1 HS30 1 prg1_HS30 ... ... ... ... ... WT_HS30_2 WT HS30 2 WT_HS30WT_HS30RT120_2 WT HS30RT120 2 WT_HS30RT120prg1_RT_2 PRG1 RT 2 prg1_RTprg1_HS30_2 PRG1 HS30 2 prg1_HS30prg1_HS30RT120_2 PRG1 HS30RT120 2 prg1_HS30RT120  

    Ora possiamo usare un disegno in cui l'espressione differenziale sarà spiegata da questi fattori combinati:

      > dds <- DESeqDataSetFromMatrix (countData = counts_data, colData = col_data, design = ~ geno_treat)  

    Eseguiamo l'analisi:

      > dds <- DESeq (dds)  

    Quindi possiamo interrogare i risultati per un particolare contrasto tra tali combinazioni di fattori. Ad esempio, per avere i risultati per l'effetto del trattamento "HS30" rispetto allo stato di riferimento "RT" nel genotipo "prg1":

      res <- results (dds, contrast = c (" geno_treat "," prg1_HS30 "," prg1_RT "))  


    Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
    Loading...