DEG para Insights Funcionais: Um Fluxo de Trabalho prático do clusterProfiler (com Esqueleto de Script em R)

Uma tabela de expressão diferencial (DEG) é um ponto de partida útil—mas raramente é o fim da história. A maioria das pessoas enfrenta a mesma pergunta seguinte: o que significam essas alterações a nível de genes em termos de vias e funções biológicas? É aí que entra a análise de enriquecimento funcional.

Este guia de estilo de recurso mostra um fluxo de trabalho completo e repetível em R: QC → normalização → expressão diferencial → enriquecimento (ORA e GSEA) → visualização, utilizando o clusterProfiler (um pacote R do Bioconductor) para enriquecimento e gráficos amigáveis ao enriquecimento. Está escrito de forma a que possa copiar a estrutura para o seu próprio caderno de análise ou adaptá-la para um pequeno script. Também encontrará um esqueleto compacto de script R perto do final.

Ao longo do caminho, iremos focar-nos nos detalhes práticos que tendem a ser mais importantes em projetos reais: formatos de entrada, IDs de genes, o universo genético de fundo, como escolher entre ORA e GSEA, e como fazer os três gráficos que as pessoas realmente utilizam (vulcão + barra + ponto).

Se ainda está a decidir como definir limiares, interpretar log2FC e FDR, ou estruturar a sua tabela de DEG para análise posterior, pode achar útil esta visão geral da expressão diferencial: Análise de Expressão Génica Diferencial.

End-to-end steps from QC and normalization through differential expression, enrichment (ORA/GSEA), and visualization.Visão geral do fluxo de trabalho do pipeline de enriquecimento DEG baseado em clusterProfiler.

O que Você Irá Produzir (Resultados)

Quando terminar este fluxo de trabalho, deverá ter um pequeno conjunto de resultados que são fáceis de reutilizar e partilhar:

  • Uma tabela DEG com pelo menos:
    • ID do gene (o seu ID original e um ID mapeado)
    • log2MudançaDeDobro
    • valor p
    • padj (valor p ajustado pelo FDR)
    • estat opcional (útil para classificação em GSEA)
  • Tabelas de resultados de enriquecimento (amigável para CSV) para:
    • enriquecimento GO (por exemplo, Processo Biológico)
    • Enriquecimento KEGG (opcional, dependendo do organismo e dos IDs)
    • Resultados do GSEA (opcional, mas recomendado quando prefere uma análise baseada em classificação)
  • Três figuras principais:
    1. Gráfico de vulcão (visão geral de DE)
    2. Gráfico de barras de enriquecimento (Principais termos, análise rápida)
    3. Gráfico de pontos/bolhas de enriquecimento (resumo compacto de termos)
  • Um "esqueleto de script" reutilizável isso
    • lê entradas
    • executa DE (ou carrega resultados de DEG)
    • executa enriquecimento
    • exporta tabelas e gráficos para pastas previsíveis

Se estiver a escrever um post de blog no estilo de métodos ou um SOP interno, estas saídas mapeiam-se bem para uma estrutura de pastas simples:

  • tabelas/ (DEG + enriquecimento)
  • gráficos/ (vulcão + barra + ponto)
  • logs/ (informação de sessão opcional, notas de execução)

Entradas e Configuração (Dados, IDs, Pacotes)

Dois pontos de partida comuns

Opção A: Começar a partir das contagens (recomendado)

Você tem:

  • uma matriz de contagem bruta (genes × amostras, contagens inteiras)
  • uma tabela de metadados de exemplo (IDs de amostra + condição + covariáveis opcionais)

Esta é a rota mais limpa porque você controla toda a cadeia.

Opção B: Começar a partir de uma tabela DEG (mais rápida)

Já tem resultados do DESeq2/edgeR/limma:

  • ID do gene
  • log2FC
  • valor-p e/ou FDR

Isto é bom para enriquecimento desde que a tabela DEG esteja bem formada e que você possa reconstruir uma classificação para GSEA se desejar.

IDs de genes: decide cedo, poupe-te mais tarde

Nos fluxos de enriquecimento, o momento mais comum de "por que isto está vazio?" é uma incompatibilidade de ID.

IDs típicos que você verá:

  • SÍMBOLO (ex.: TP53)
  • ENSEMBLE (por exemplo, ENSG00000141510)
  • ENTREZID (ex. 7157)

O clusterProfiler pode trabalhar com múltiplos tipos, mas muitos fluxos de trabalho GO/KEGG são mais simples se converter para ENTREZID para enriquecimento. A abordagem prática é:

  1. Mantenha o seu identificador de gene original na tabela DEG (para rastreabilidade).
  2. Criar uma tabela de mapeamento (original → ENTREZID).
  3. Executar enriquecimento usando ENTREZID.
  4. Exporte tanto os resultados de enriquecimento como a tabela de mapeamento.

Essa tabela de mapeamento torna-se a sua "cola" quando precisa interpretar os resultados ou construir listas de genes para análises de acompanhamento.

Pacotes mínimos que provavelmente precisará

Uma pilha comum e estável parece assim:

  • Expressão diferencialDESeq2 (ou edgeR/limma-voom)
  • EnriquecimentoclusterProfiler
  • Anotação: org.Hs.eg.db / org.Mm.eg.db / etc + AnnotationDbi
  • Visualizaçãoggplot2
  • Gráficos de enriquecimento: enrichplot (funciona sem problemas com os resultados do clusterProfiler)

Nota: A disponibilidade e o comportamento do KEGG podem variar consoante o organismo e a forma como os IDs são tratados. Se estiver a trabalhar com uma espécie menos comum, o GO pode ser mais direto do que o KEGG, a menos que tenha um forte suporte de anotação.

Passo 1 — QC (Antes de Confiar no DEG)

O QC não precisa ser complicado, mas deve ser intencional. O objetivo é simples: certifique-se de que as suas amostras se comportem como o seu desenho de estudo espera.

Três verificações cobrem muito terreno:

1) Agrupamento / correlação de amostras

  • Calcule a correlação amostra-a-amostra numa matriz de expressão estabilizada (por exemplo, VST do DESeq2).
  • Procure por:
    • replicados agrupados juntos
    • pares inesperados
    • uma amostra que "se recusa a juntar-se ao grupo"

2) PCA (ou MDS)

A PCA é rápida, visual e geralmente informativa.

  • Pinte os pontos por condição, lote, dador, data de preparação da biblioteca—o que tiver.
  • Se um fator indesejado dominar os primeiros componentes, não o ignore. Muitas vezes, a solução é adicionar uma covariável à fórmula de design DE em vez de eliminar amostras.

Sample clustering pattern showing separation by condition and overall similarity among replicates.Visualização de QC de amostras baseada em PCA.

3) Verificações de sanidade do tamanho / distribuição da biblioteca

  • Contagens totais por amostra
  • Distribuição de contagens / número de genes detectados

Diferenças pequenas são normais. Diferenças grandes podem ser um sinal de problemas técnicos.

Uma nota prática sobre outliers:

Se remover uma amostra, escreva. porquê Em uma frase e mantenha um registo. Mesmo para trabalho interno, o seu eu futuro ficará grato.

Passo 2 — Normalização (Para Expressão Diferencial)

A normalização é uma daquelas palavras que significa coisas diferentes em contextos diferentes.

Para a expressão diferencial, a maioria dos métodos estabelecidos espera contagens brutas e realiza a normalização como parte do modelo:

  • O DESeq2 utiliza fatores de tamanho.
  • O edgeR utiliza TMM.
  • limma-voom utiliza pesos de precisão (após a transformação das contagens)

Um desvio frequente é usar TPM/FPKM para DE. O TPM é útil para certos tipos de comparações, mas para DE baseado em contagens geralmente cria mais perguntas do que responde. Se o seu objetivo é um teste diferencial fiável, mantenha-se na via baseada em contagens.

Filtragem de genes com baixa contagem

Algum filtragem é útil:

  • remover genes que estão essencialmente ausentes em todas as amostras
  • use uma regra independente de rótulos de condição (por exemplo, "pelo menos X contagens em pelo menos Y amostras")

A filtragem melhora a potência e reduz o ruído, especialmente em estudos pequenos.

Passo 3 — Expressão Diferencial (Gerar uma Tabela de DEG)

A sua tabela DEG é o ponto de articulação entre estatísticas a nível de genes e enriquecimento. Uma tabela DEG "boa" para enriquecimento a montante inclui:

  • uma coluna de ID de gene estável (gene, SYMBOL ou ENSEMBL)
  • log2MudançaDeDobro
  • valor p
  • padj (FDR)
  • opcional: uma estatística de teste (estat) para classificação

Limiares: mantê-los utilizáveis, não dogmáticos

Um ponto de partida comum é:

  • padj < 0,05
  • opcionalmente |log2FC| >= 1

Mas muitas análises beneficiam de ser um pouco mais flexíveis:

  • Para a ORA, os limiares são importantes porque está a selecionar um subconjunto de genes.
  • Para GSEA, os limiares importam menos porque se utiliza uma lista ordenada de todos os genes.

Se souber que o seu sinal é subtil (ou que o seu tamanho de amostra é modesto), considere optar mais pela GSEA baseada em classificações em vez de tentar "forçar" uma grande lista de DEG.

Dividir para cima e para baixo?

Para a ORA, é frequentemente informativo realizar a enriquecimento separadamente para:

  • genes regulados para cima
  • genes regulados para baixo

Isso mantém a direcionalidade clara. Caso contrário, pode acabar com um conjunto de genes misto onde um termo está "enriquecido", mas os genes nele se movem em ambas as direções.

Passo 4 — Enriquecimento com clusterProfiler (ORA e GSEA)

Este é o núcleo do guia. O clusterProfiler suporta várias abordagens de enriquecimento, mas duas são especialmente comuns para RNA-seq interpretação:

  • ORA (Análise de Sobrerrepresentação): O que está sobre-representado entre os genes significativos?
  • GSEA (Análise de Enriquecimento de Conjuntos de Genes): Quais caminhos mudam em toda a lista classificada?

ORA: enrichGO / enrichKEGG

Entradas de que precisa

  • Uma lista de genes (geralmente DEGs significativos, opcionalmente divididos em up/down)
  • Um universo de fundo (fortemente recomendado)

Sobre o universo (conjunto de genes de fundo)

Se não definir um universo, a sua enriquecimento é frequentemente comparado a um amplo fundo padrão da base de dados de anotações. Em muitos casos, um universo mais prático e defensável é:

  • Universo = todos os genes que foram testados em expressão diferencial.
    (i.e., após filtragem e configuração do modelo)

Isto alinha o fundo de enriquecimento com o que o seu experimento poderia detetar realisticamente.

Enriquecimento GO (ponto de partida recomendado)

  • O GO tem três ontologias comuns: BP, MF, CC.
  • O Processo Biológico (BP) é frequentemente o mais intuitivo para a interpretação inicial.

Enriquecimento KEGG (opcional)

O KEGG pode ser muito útil, mas também é onde problemas de ID e organismo surgem com mais frequência. Se o KEGG retornar resultados vazios:

  • confirme os seus IDs (o ENTREZID é geralmente esperado)
  • confirmar apoio ao organismo
  • tente GO primeiro para validar que o pipeline está a funcionar

GSEA: gseGO / gseKEGG

A GSEA altera a questão. Em vez de selecionar um "subconjunto de genes significativos", classifica todos os genes por uma estatística e pergunta se os genes de uma via tendem a aparecer perto do topo ou do fundo.

O que precisa para GSEA

  • um vetor numérico nomeado:
    • os nomes são IDs de genes (frequentemente ENTREZID)
    • os valores são estatísticas de classificação (maior = mais associado à condição A, por exemplo)
  • ordenado em ordem decrescente

Classificação de escolhas que são fáceis de explicar

  • Estatística de Wald do DESeq2 (stat) se disponível
  • assinado -log10(valor p) escalado pela direção:
    • sinal(log2FC) * -log10(valor-p)

Se optar pela abordagem do valor p log assinado, proteja-se contra zeros e NAs (por exemplo, limite os valores p a um mínimo como 1e-300).

Passo 5 — Visualização (Vulcão / Barra / Ponto)

Este fluxo de trabalho foca intencionalmente em três gráficos porque eles cobrem a maioria das necessidades sem transformar a sua redação numa coleção de figuras.

Gráfico de vulcão (visão geral de DE)

Um gráfico de volcano mostra:

  • magnitude (log2FC)
  • significância (frequentemente -log10(padj))

Bons hábitos:

  • rotular apenas um punhado de genes (principais resultados ou marcadores conhecidos)
  • mantenha os limiares visíveis, mas não esmagadores

Volcano plot summarizing differential expression results.Gráfico de vulcão resumindo os resultados da expressão diferencial.

Gráfico de barras de enriquecimento (Principais termos)

Utilize gráficos de barras para mostrar uma lista curta dos principais termos enriquecidos. Mantenha-a concisa:

  • 10–20 termos é geralmente suficiente.
  • ordenar por p.adjust a menos que tenha uma razão clara para não o fazer

Gráfico de pontos/bolhas de enriquecimento (resumo compacto)

Os dotplots são um ótimo resumo "de um painel":

  • cor: significância (p.adjust)
  • tamanho: Contagem ou GeneRatio

Se publicar gráficos de pontos, mantenha a legenda legível e evite mostrar muitos termos.

Functional categories compared by enrichment magnitude and statistical significance using dot size and color. Gráfico de pontos resumindo termos funcionais enriquecidos com codificação de tamanho e cor.

Escolhas Chave & Armadilhas Comuns (Lista de Verificação)

Esta secção destina-se a ser uma lista de verificação rápida "antes de exportar resultados".

Qualidade de mapeamento de ID

  • Quantos genes foram mapeados com sucesso?
  • Existem duplicados (mapeamento muitos-para-um)?
  • Deixou cair uma grande fração involuntariamente?

Dica: exporte uma tabela de mapeamento e mantenha-a com os seus resultados. Isso evita confusões mais tarde.

2) Universo de fundo em ORA

Se os resultados da ORA parecerem estranhos (demasiado amplos, demasiado vazios, demasiado genéricos), reverta ao universo.

Um padrão prático:

  • universo = genes testados em DE

3) Escolha entre ORA e GSEA

  • ORA é sensível a limiares.
  • A GSEA é sensível à definição de classificação.

Se não está satisfeito com os resultados do ORA, experimente o GSEA antes de reescrever os seus limiares cinco vezes.

4) Muitos termos GO semelhantes

O GO é hierárquico e redundante por natureza. Se os seus principais resultados parecerem repetições:

  • reduzir o número de categorias exibidas
  • considerar a redução de redundância (por exemplo, simplificação baseada na similaridade semântica)
  • agrupem os resultados por tema em vez de listar 40 quase duplicados

"Resultados KEGG vazios"

Razões comuns:

  • tipo de ID errado
  • questões de suporte a organismos
  • genes demasiado poucos (ORA)
    Tente:
  • confirmar mapeamento de ENTREZID
  • executar primeiro a enriquecimento GO
  • usar GSEA com uma lista ordenada

6) Legibilidade do enredo

Um gráfico que é tecnicamente correto pode ainda ser difícil de ler.

  • termos limitados
  • usar ordenação consistente
  • mantenha as legendas e rótulos curtos
  • escreva legendas que expliquem o que o tamanho/cor representa

Baixar: Esqueleto de Script R

Abaixo está um esqueleto de script compacto que você pode adaptar. Presume-se que:

  • matriz de contagens + metadados
  • DESeq2 para DE
  • clusterProfiler para enriquecimento GO (ORA) e GSEA opcional
  • exporta tabelas + gráficos

É intencionalmente minimalista para que possa ser incluído num download de recursos de blog e permitir que os leitores modifiquem algumas linhas.

suppressPackageStartupMessages({

biblioteca(DESeq2)

biblioteca(clusterProfiler)

biblioteca(enrichplot)

biblioteca(AnnotationDbi)

biblioteca(org.Hs.eg.db) # substitua pelo seu organismo

biblioteca(ggplot2)

biblioteca(dplyr)

})

# ---- Entradas (editar) ----

counts_file <- "counts.csv" # genes x amostras, contagens brutas

meta_file <- "meta.csv" # amostra, condição (e lote opcional)

id_type_in <- "SÍMBOLO" # SÍMBOLO ou ENSEMBL

cond_a <- "tratado"

cond_b <- "controlo"

dir.create("tabelas", showWarnings = FALSE)

dir.create("plots", showWarnings = FALSE)

# ---- Carregar ----

counts <- read.csv(counts_file, row.names = 1, check.names = FALSE)

meta <- read.csv(meta_file, stringsAsFactors = FALSE)

counts <- counts[, meta$amostra]

# ---- PT ----

dds <- DESeqDataSetFromMatrix(

countData = round(as.matrix(contagens)),

colData = data.frame(meta, row.names = meta$sample),

design = ~ condição

)

# Filtragem simples

dds <- dds[rowSums(counts(dds) >= 10) >= 2, ]

dds <- DESeq(dds)

res <- resultados(dds, contraste = c("condição", cond_a, cond_b))

res <- as.data.frame(res) %>%

mutar(gene = nomes_linhas(.)) %>%

filtrar(!é.na(padj))

escrever.csv(res, "tabelas/DEG_resultados.csv", row.names = FALSE)

# ---- Vulcão ----

vol <- res %>% mutate(sig = padj < 0.05 & abs(log2FoldChange) >= 1)

p_vol <- ggplot(vol, aes(log2FoldChange, -log10(padj))) +

geom_point(aes(alpha = sig), size = 1) +

scale_alpha_manual(values = c(`TRUE` = 0.8, `FALSE` = 0.2), guide = "nenhum") +

theme_bw() +

labs(x = "Mudança de Fold log2", y = "-log10(FDR)", title = "Gráfico de Vulcão")

ggsave("plots/volcano.pdf", p_vol, largura = 6.5, altura = 5)

# ---- Mapeamento de ID ----

mapeado <- bitr(res$gene,

fromType = id_tipo_em,

toType = "ENTREZID",

OrgDb = org.Hs.eg.db)

res_entrez <- res %>%

inner_join(mapeado, por = c("gene" = tipo_id_em)) %>%

distinct(ENTREZID, .keep_all = TRUE)

escrever.csv(res_entrez, "tabelas/DEG_com_ENTREZID.csv", nomes.linhas = FALSE)

write.csv(mapped, "tabelas/ID_mapping.csv", row.names = FALSE)

# ---- ORA (VAI BP) ----

deg_up <- res_entrez %>% filtrar(padj < 0.05, log2FoldChange >= 1) %>% puxar(ENTREZID)

deg_dn <- res_entrez %>% filtrar(padj < 0.05, log2FoldChange <= -1) %>% puxar(ENTREZID)

universo <- res_entrez$ENTREZID

ego_up <- enrichGO(gene = deg_up, universo = universe,

OrgDb = org.Hs.eg.db, tipoChave = "ENTREZID",

ont = "BP", pAdjustMethod = "BH", qvalueCutoff = 0.05)

ego_dn <- enrichGO(gene = deg_dn, universo = universo,

OrgDb = org.Hs.eg.db, tipoChave = "ENTREZID",

ont = "BP", pAdjustMethod = "BH", qvalueCutoff = 0.05)

escrever.csv(as.data.frame(ego_up), "tabelas/GO_ORA_up.csv", row.names = FALSE)

write.csv(as.data.frame(ego_dn), "tabelas/GO_ORA_para_baixo.csv", row.names = FALSE)

# ---- Gráficos: barra + ponto ----

ggsave("plots/GO_ORA_up_bar.pdf", barplot(ego_up, showCategory = 15), largura = 7, altura = 5)

ggsave("plots/GO_ORA_up_dot.pdf", dotplot(ego_up, showCategory = 15), largura = 7, altura = 5)

# ---- Opcional: GSEA ----

rank_vec <- res_entrez$estat

se (todos(is.na(rank_vec))) {

p <- pmax(res_entrez$pvalue, 1e-300)

rank_vec <- sign(res_entrez$log2FoldChange) * -log10(p)

}

names(rank_vec) <- res_entrez$ENTREZID

rank_vec <- sort(rank_vec, decreasing = TRUE)

gse_bp <- gseGO(geneList = rank_vec,

OrgDb = org.Hs.eg.db, tipoChave = "ENTREZID",

ont = "BP", pAdjustMethod = "BH", verbose = FALSE)

write.csv(as.data.frame(gse_bp), "tabelas/GO_GSEA_BP.csv", row.names = FALSE)

ggsave("plots/GO_GSEA_dot.pdf", dotplot(gse_bp, showCategory = 15), largura = 7, altura = 5)

Como transformar isto num recurso descarregável.

  • Coloque todos os campos editáveis no topo (caminhos, base de dados de organismos, tipo de ID, condições).
  • Exportar sempre:
    • Tabela DEG
    • Tabela de mapeamento de IDs
    • tabelas de enriquecimento
    • enredos
  • Mantenha os nomes das pastas consistentes para que a saída seja previsível.

Perguntas Frequentes

Preciso de executar o DESeq2 para usar o clusterProfiler?

Não. Você pode usar o clusterProfiler com resultados de qualquer método de DE, desde que tenha uma lista de genes para ORA ou um vetor de genes ordenados para GSEA.

Devo usar ORA ou GSEA para enriquecimento de vias?

Use ORA quando quiser enriquecimento em um conjunto de DEG selecionado. Use GSEA quando preferir testar o enriquecimento em uma lista classificada sem depender de um limite rigoroso.

Por que é que a enriquecimento não retorna resultados?

Na maioria das vezes, é uma incompatibilidade de ID/organismo (especialmente para KEGG) ou a lista de entrada é muito pequena. Verificar a conversão de ID e mudar para GSEA são soluções comuns.

O que devo usar como conjunto de genes de fundo (universo) para ORA?

Um padrão prático é o conjunto de genes testados na sua análise DE (depois da filtragem), e não o genoma inteiro.

Quantos termos devo plotar?

Normalmente, 10 a 20 termos são suficientes para uma figura clara; mais do que isso tende a tornar-se repetitivo e difícil de ler.

Referências:

  1. Yu, Guangchuang, et al. "clusterProfiler: Um Pacote R para Comparar Temas Biológicos entre Agrupamentos de Genes." OMICS: Uma Revista de Biologia Integrativa, vol. 16, n.º 5, 2012, pp. 284–287.
  2. Amor, Michael I., Wolfgang Huber, e Simon Anders. "Estimativa Moderada da Mudança de Dobra e Dispersão para Dados de RNA-seq com DESeq2." Biologia do Genoma, vol. 15, 2014, p. 550.
  3. Robinson, Mark D., Davis J. McCarthy, e Gordon K. Smyth. "edgeR: um pacote Bioconductor para análise de expressão diferencial de dados de expressão genética digital" Bioinformática, vol. 26, n.º 1, 2010, pp. 139–140.
  4. Lei, Charity W., et al. "voom: Pesos de Precisão Desbloqueiam Ferramentas de Análise de Modelos Lineares para Contagens de Leituras de RNA-seq." Biologia do Genoma, vol. 15, 2014, p. R29.
  5. O Consórcio de Ontologia de Genes. "O Recurso de Ontologia de Genes: Enriquecendo uma Mina de Ouro." Pesquisa em Ácidos Nucleicos, vol. 49, n.º D1, 2021, pp. D325–D334.
  6. Kanehisa, Minoru, e Susumu Goto. "KEGG: Enciclopédia de Kyoto de Genes e Genomas." Pesquisa em Ácidos Nucleicos, vol. 28, n.º 1, 2000, pp. 27–30.
  7. Subramanian, Aravind, et al. "Análise de Enriquecimento de Conjuntos de Genes: Uma Abordagem Baseada em Conhecimento para Interpretar Perfis de Expressão Genómica." Atas da Academia Nacional de Ciências, 2005.
  8. Benjamini, Yoav, e Yosef Hochberg. "Controlo da Taxa de Falsas Descobertas: Uma Abordagem Prática e Poderosa para Testes Múltiplos." Revista da Royal Statistical Society: Série B (Metodológica), vol. 57, n.º 1, 1995, pp. 289–300.
Apenas para fins de investigação, não se destina a diagnóstico clínico, tratamento ou avaliações de saúde individuais.
Serviços Relacionados
Download PDF
* Endereço de Email:

A CD Genomics precisa das informações de contacto que nos fornece para poder contactá-lo sobre os nossos produtos e serviços e outros conteúdos que possam ser do seu interesse. Ao clicar abaixo, consente o armazenamento e processamento das informações pessoais submetidas acima pela CD Genomics para fornecer o conteúdo que solicitou.

×
Pedido de Cotação
! Apenas para fins de investigação, não se destina a diagnóstico clínico, tratamento ou avaliações de saúde individuais.
Contacte a CD Genomics
Termos e Condições | Política de Privacidade | Feedback   Direitos de Autor © CD Genomics. Todos os direitos reservados.
Topo