Questão:
Compreender o design, contraste e resultados do DESeq2
bli
2017-05-19 19:40:14 UTC
view on stackexchange narkive permalink

Eu tenho um conjunto de experimentos de alto rendimento com 2 genótipos ("WT" e "prg1") e 3 tratamentos ("RT", "HS30" e "HS30RT120"), e há 2 repetições para cada combinações genótipo x tratamento.

As contagens de leitura para os genes são resumidas em um arquivo que carrego da seguinte forma em 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 "prg1_RT30_1" prg1_g30_1 "prg1_g30_1" prg1_g30_1 " "WT_RT_2" "WT_HS30_2" [9] "WT_HS30RT120_2" "prg1_RT_2" "prg1_HS30_2" "prg1_HS30RT120_2"  

Eu descrevo os experimentos da seguinte maneira:

  > col_data <- DataFrame (geno = c (rep ("WT", times = 3), rep ("prg1", times = 3), rep ("WT", times = 3), rep ("prg1", times = 3)), tratar = rep (c ("RT", "HS30", "HS30RT120"), vezes = 4), rep = c (rep ("1", vezes = 6), rep ("2", vezes = 6) ), Row.names = COLNAMES (counts_data)) > col_dataDataFrame com 12 linhas e 3 colunas geno rep mimo <character> <character> <character>WT_RT_1 WT RT 1WT_HS30_1 WT WT HS30 1WT_HS30RT120_1 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  

Eu quero construir um objeto DESeq2 que eu poderia usar:

  • encontre genes expressos diferencialmente quando o tratamento varia para um determinado genótipo fixo
  • ou:

    • encontre genes diferencialmente expressos quando o genótipo varia para um determinado tratamento fixo

    No fórum de ajuda do biocondutor, acho que encontrei uma situação semelhante, e eu li o seguinte:

    Tente um desenho de ~ genótipo + genótipo: condição

    Então você terá um efeito de condição para cada nível de genótipo, incluindo o nível de referência .

    Você pode construir pares deles usando o estilo de lista do argumento 'contraste'.

    No entanto, isso não explica como aplicar este "estilo de lista "ao argumento do" contraste ". E a situação acima parece ser assimétrica. Com isso quero dizer que o genótipo e a condição não parecem ter um papel intercambiável.

    Então, tentei a seguinte fórmula mais simétrica:

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

    Agora, posso por exemplo obter a expressão diferencial resultados ao comparar o tratamento "HS30" contra "RT" como referência, no genótipo "prg1" ?

    E como?

    Se bem entendi, o acima- O "estilo de lista" mencionado usa nomes dados pela função resultsNames . No meu caso, tenho o seguinte:

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

    Acho que precisaria de um contraste entre "genoprg1.treatRT" e "genoprg1.treatHS30", mas eles não estão nos nomes dos resultados acima.

    Estou perdido.

    este é um exemplo mais semelhante (eu acho): https://support.bioconductor.org/p/63201/. A conclusão é semelhante à resposta de Devon - use LRT.
    Dois respostas:
    #1
    +13
    Devon Ryan
    2017-05-19 19:51:01 UTC
    view on stackexchange narkive permalink

    A maneira mais simples é não usar um teste de Wald, mas um LRT com um modelo reduzido sem o fator de interesse:

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

    O acima forneceria resultados para o tratamento, independentemente do nível, embora ainda contasse para uma possível interação (ou seja, um "efeito principal do tratamento, independentemente do tipo de tratamento ").

    Como um aparte, este é provavelmente um caso em que a forma preferida pelo edgeR de criar grupos de combinações genótipo-tratamento e então usar um modelo de ~ 0 + grupo pode tornar sua vida um pouco mais fácil. Você obterá os mesmos resultados (mais ou menos) independentemente, mas provavelmente será mais fácil para você pensar nesses termos, em vez de lembrar que o nível básico será tratamento HS30 e geno prg1 .

    Tentei o seguinte: `dds <- DESeqDataSetFromMatrix (countData = counts_data, colData = col_data, design = ~ geno + treat + geno: treat)` then `dds = DESeq (dds, test =" LRT ", reduzido = ~ geno + geno: treat) `, mas isso falha com` Erro em nbinomLRT (objeto, completo = completo, reduzido = reduzido, betaPrior = betaPrior,: menos de um grau de liberdade, talvez os modelos completos e reduzidos não estejam na ordem correta`. , o que eu quero não é "independente do tipo de tratamento". Eu quero resultados para um determinado tratamento fixo ou para um determinado genótipo fixo. Talvez minha pergunta não tenha sido clara.
    Eu teria que revisar a matriz do modelo para ver por que está produzindo o erro. De qualquer forma, eu sugeriria seguir o caminho que os autores do edgeR preferem e fazer as combinações de tratamento-genótipo em grupos individuais. Então, os contrastes são mais óbvios.
    “A maneira mais simples é não usar o teste de wald, mas sim um LRT” - você poderia explicar por quê?
    Como o tratamento tem vários níveis, com um teste de Wald seria necessário lidar com os contrastes de forma adequada, enquanto com um LRT seria possível omitir todos os níveis simultaneamente.
    #2
    +8
    bli
    2017-05-22 17:05:18 UTC
    view on stackexchange narkive permalink

    Parece que o truque da "combinação de fatores" descrito na parte 3.3 da "vinheta" atual do DESeq2 (em maio de 2017) sob o título "Interação" é uma forma de acessar os contrastes desejados.

    Parece possível fazer isso diretamente ao construir o colData e ao chamar DESeqDataSetFromMatrix:

    Vamos adicionar uma combinação de fatores "geno" e "tratar" para o parâmetro colData futuro:

      > col_data $ geno_treat <- as.factor (paste (col_data $ geno, col_data $ treat, sep = "_")) > col_dataDataFrame com 12 linhas e colunas 4 geno mimo 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  

    Agora podemos usar um design onde a expressão diferencial será explicada por estes fatores combinados:

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

    Executamos a análise:

      > dds <- DESeq (dds)  

    Então, podemos consultar os resultados para um contraste particular entre essas combinações de fatores. Por exemplo, para ter os resultados do efeito do tratamento "HS30" contra o estado de referência "RT" no genótipo "prg1":

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


    Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 3.0 sob a qual é distribuído.
    Loading...