Análise do Pan-genoma: Perfil Estatístico e Visualização de Quatro Categorias de Genes

Este artigo apresenta um quadro abrangente para análise do pan-genoma, enfatizando a classificação de genes em categorias núcleo, softcore, dispensável e privada com base na frequência de presença/ausência entre genomas. Usando o pipeline PSVCP e o OrthoFinder, construímos um pan-genoma linear, detetamos variantes estruturais e identificamos famílias de genes ortólogos. Um fluxo de trabalho estatístico é implementado para atribuir categorias de genes e quantificar a sua distribuição. Técnicas de visualização - incluindo gráficos de setores, histogramas, gráficos de barras e mapas de calor - destacam a diversidade genómica e a estrutura populacional. Esta abordagem permite uma compreensão mais profunda da evolução do genoma, diferenciação funcional e características adaptativas, apoiando aplicações em melhoramento de plantas, estudos microbianos e genómica de doenças.

1. Visão Geral do Pan-genoma

O que é um Pan-genoma?

O pan-genoma representa o conjunto completo de genes em um grupo definido de organismos, abrangendo tanto o conteúdo genómico partilhado como o variável entre indivíduos ou espécies. Ao contrário da abordagem tradicional de analisar um único genoma de referência, o pan-genoma abraça a diversidade genómica intraespécies, permitindo uma compreensão mais abrangente da variação estrutural, da variação de presença/ausência de genes (PAV) e das dinâmicas evolutivas.

Originalmente proposto na genómica bacteriana, o conceito de pan-genoma evoluiu desde então para um paradigma central na melhoramento de plantas, adaptação microbiana e genómica do cancro.

Contexto Histórico e Relevância

O termo "pan-genoma" foi cunhado pela primeira vez em 2005 por Tettelin et al. durante a análise comparativa de múltiplas estirpes de Streptococcus agalactiae. O seu trabalho iluminou as limitações da análise apenas com base em referências, defendendo um modelo mais inclusivo do conteúdo genómico. Desde então, o conceito revolucionou:

  • Genómica de culturas: Revelando genes em falta a partir de montagens de referência
  • Estudos microbianos: Mapeamento da aquisição de genes, transferência horizontal de genes
  • Oncologia: Compreender a heterogeneidade tumoral e os pontos quentes de mutação

Por que classificar os genes em quatro categorias?

A análise do pan-genoma revela que nem todos os genes estão distribuídos de forma igual entre os indivíduos. A estratificação dos genes em categorias de núcleo, núcleo suave, dispensáveis e privados fornece uma estrutura quantitativa para:

  • Priorização de estudos genómicos funcionais
  • Ligação entre genótipo e fenótipo
  • Desentrelaçando a seleção evolutiva da variação estocástica

2. Classificação das Categorias de Genes na Análise do Pan-genoma

2.1 Definições e Critérios

Em estudos pan-genómicos, as famílias de genes são tipicamente categorizadas com base na sua presença em diferentes amostras. Os genes centrais são universalmente conservados e aparecem em todos os indivíduos da população, sugerindo os seus papéis biológicos essenciais. Os genes softcore, embora não sejam estritamente universais, são encontrados em mais de 90% dos indivíduos e podem refletir uma forte conservação evolutiva com variabilidade específica da população. Os genes dispensáveis estão presentes em um subconjunto de indivíduos, tipicamente mais de um, mas menos de 90%, e frequentemente correspondem a genes envolvidos na resposta ambiental, imunidade ou adaptação ao stress. Finalmente, os genes privados são exclusivos de um único genoma dentro do conjunto de dados, indicando possíveis inserções recentes, variantes estruturais ou artefatos de anotação. Esta classificação serve como base para análises estatísticas e funcionais subsequentes.

Composition of the syntenic pan-genome.Figura 1. Composição do pan-genoma sinténico.Li, X. et al, 2024)

2.2 Implicações Biológicas

Os genes centrais frequentemente codificam funções essenciais relacionadas à manutenção celular, desenvolvimento e reprodução.

Os genes softcore podem refletir adaptações específicas ao ambiente ou conservação específica de subpopulações.

Genes dispensáveis impulsionam a diversidade fenotípica e são frequentemente enriquecidos em resposta ao stress, imunidade e metabolismo secundário.

Os genes privados podem representar inserções recentes, eventos de transferência horizontal ou artefatos de montagem ou anotação.

3. Construção do Pan-genoma e Chamada de SV com PSVCP

O pipeline psvcp_v1.01 facilita a construção de um pan-genoma linear e identifica variações estruturais (SVs) em escala populacional a partir de dados de leituras curtas.

Passos Chave:

Genomas montados em FASTAs, anotações (GFF) e dados de sequenciação populacional

Passo 1: Descarregue o pipeline psvcp_v1.01

git clone https://github.com/wjian8/psvcp_v1.01.git

Passo 2: Fundir genomas de referência através do Genome_construct_Pangenome.py

#construindo um pan-genoma linear por dois genomas
bash $caminho_do_pipeline/Atualizacao_refgenoma_por_quest.sh ref.fa query.fa > job.sh && bash job.sh
#construindo pan-genoma por vários (mais de 2) genomas
python3 $caminho_do_pipeline/1Genoma_construir_Pangenoma.py diretório_exemplo_genoma lista_genomas
 

Passo 3: Mapear leituras para o pan-genoma usando Map_fq_to_Pan.py

python3 $caminho_do_pipeline/2Map_fq_to_Pan.py -t 4 -fqd fq_dir -r FicheiroReferencia -br dir_bam

Passo 4: Chamar SVs (PAVs, inversões, translocações) e gerar matriz de genótipos com Call_sv_to_genotype.py

python3 $caminho_do_pipeline/3Chamar_sv_para_genotipar.py -br diretorio_bam -o prefixo_hmp

o ficheiro de saída é o prefixo de um ficheiro de genótipo que está no formato hapmap.

4. Detecção de Ortólogos do Pan-genoma com OrthoFinder

Para rastrear de forma fiável famílias de genes entre indivíduos, utiliza-se o OrthoFinder para detectar ortogrupos em múltiplos genomas, agrupando assim genes que evoluíram a partir de um ancestral comum. Também resolve duplicações e perdas de genes, oferecendo insights sobre a evolução das famílias de genes e expansões ou contrações específicas de linhagens. Além disso, o OrthoFinder identifica blocos sintrénicos, que são ordens de genes conservadas entre genomas, facilitando a análise de colinearidade e melhorando a precisão da atribuição de genes ortólogos em estudos de pan-genoma.

Passo 1: Instalar o OrthoFinder

conda instalar orthofinder -c bioconda

Passo 2: Executar o OrthoFinder

"OrthoFinder/DadosExemplo" com o diretório que contém os seus ficheiros fasta de entrada, com um ficheiro por espécie.

OrthoFinder/orthofinder -f OrthoFinder/ExemploDados

Uma execução típica do OrthoFinder gera uma coleção abrangente de ficheiros de saída, incluindo informações sobre ortogrupos, relações ortólogas, árvores genealógicas, árvores genealógicas resolvidas, a árvore das espécies enraizada, eventos de duplicação de genes e estatísticas genómicas comparativas entre as espécies analisadas. Todos os resultados estão organizados dentro de um layout de diretório bem estruturado e fácil de usar para uma navegação e interpretação simples.

5. Perfilagem Estatística do Pan-genoma de Categorias de Genes

5.1 Requisitos de Dados de Entrada

A análise requer uma matriz de presença/ausência de ortogrupos binários na qual cada linha representa um ortogrupo (família de genes) e cada coluna representa uma amostra (genoma). As entradas indicam se um determinado ortogrupo está presente (1) ou ausente (0) em cada amostra. Opcionalmente, podem ser integrados metadados, como origem da amostra, fenótipo ou contexto ecológico, para análises estratificadas subsequentes.

5.2 Fluxo de Trabalho para Atribuição de Categoria de Gene

Para estratificar os genes em categorias de núcleo, núcleo suave, dispensáveis e privados, são implementados os seguintes passos:

Passo 1: Calcular a Frequência da Presença do Gene

A frequência de cada ortogrupo entre as amostras é calculada como a proporção de genomas em que o gene está presente.

biblioteca(tidyverse)

# Carregar a matriz de contagem de genes do ortogrupo e a tabela de genes não atribuídos
df <- read.csv('Orthogroups.GeneCount.tsv', sep = '\t', row.names = 1)
df_uniq <- read.csv('Orthogroups_UnassignedGenes.tsv', sep = '\t', row.names = 1)

# Remover a última coluna se contiver estatísticas resumidas
df <- df[, 1:(ncol(df) - 1)]

# Converter a tabela de genes não atribuídos para formato binário
df_uniq[df_uniq != ''] <- 1
df_uniq[df_uniq == ''] <- 0

# Unir as tabelas de genes atribuídos e não atribuídos
df_combined <- rbind(df, df_uniq)
df_combined[is.na(df_combined)] <- 0 # Preencher NA com 0

Para ilustrar o fluxo de trabalho, simulamos uma matriz de presença/ausência aleatória.

set.seed(123)
n_genes <- 1000 
n_samples <- 27 

gene_categories <- sample(c("Núcleo", "Semi-núcleo", "Dispensável", "Privado"), 
  n_genes, 
  replace = TRUE,
  prob = c(0.20, 0.15, 0.55, 0.1))

binary_matrix <- sapply(gene_categories, function(cat) {
 switch(cat,
 "Núcleo" = rep(1, n_samples), 
 "Semi-núcleo"= rbinom(n_samples, 1, 0.95), 
 "Privado" = rbinom(n_samples, 1, 0.05),
 "Dispensável" = rbinom(n_samples, 1, 0.5) 
 )
}) %>% t()

colnames(binary_matrix) <- paste0("Genoma_", 1:n_samples)
rownames(binary_matrix) <- paste0("Gene_", 1:n_genes)
df_combined <- as.data.frame(binary_matrix)

Passo 2: Atribuir Categorias de Genes com Base em Limiares de Frequência

Cada gene é classificado em uma das quatro categorias:

 # Calcular a frequência de presença para cada gene
df_summary <- data.frame(
 gene = rownames(df_combined),
 frequency = apply(df_combined, 1, function(x) sum(x != 0) / ncol(df_combined)),
 stringsAsFactors = FALSE
)
df_summary <- df_summary[!df_summary$frequency == 0,]
# Atribuir categoria de gene com base na frequência
df_summary$Category <- with(df_summary, case_when(
 frequency == 1 ~ "Nuclear",
 frequency >= 0.9 ~ "Semi-nuclear",
 frequency == 1 / ncol(df_combined) ~ "Privado",
 TRUE ~ "Dispensável"
))

Passo 3: Gerar Estatísticas Resumidas

Uma vez classificada, é produzido um resumo estatístico para quantificar a distribuição das categorias de genes:

 # Contar o número de genes em cada categoria
table(df_summary$Categoria)

# Calcular proporções das categorias
prop.table(table(df_summary$Categoria))

Isto inclui o número total e a proporção de genes em cada categoria.

6. Visualização do Pan-genoma da Distribuição de Categorias de Genes

Para facilitar a interpretação intuitiva da estrutura pan-genómica e da dinâmica das categorias de genes, são empregues várias estratégias de visualização:

6.1 Gráficos de Pizza

Propósito: Visualizar a proporção de genes em cada categoria.

ggplot(df_summary, aes(x = "", fill = Categoria)) +
 geom_bar(width = 1, color = "branco") +
 coord_polar("y") +
 theme_void() +
 scale_fill_manual(values = c("#F8766D", "#7CAE00", "#00BFC4", "#C77CFF")) +
 geom_text(aes(label = paste0(round(..count../sum(..count..)*100, 2), "%")),
 stat = "count", 
 position = position_stack(vjust = 0.5),
 color = "preto", size = 4)

Isto fornece uma visão imediata da composição genética em todo o genoma.

The proportion of genes in each category.Figura 2. A proporção de genes em cada categoria.

6.2 Histogramas de Frequência

Propósito: Exibir a distribuição das frequências de presença de genes, destacando os limiares de categoria.

ggplot(df_summary, aes(x = frequência, fill = Categoria)) +
 geom_histogram(binwidth = 0.05, alpha = 0.8) +
 scale_fill_manual(values = c("#F8766D", "#7CAE00", "#00BFC4", "#C77CFF")) +
 labs(x = "Frequência de Presença", y = "Número de Genes",
 title = "Distribuição de Frequência de Genes (Genes Pan/Core)") +
 theme_minimal() +
 geom_vline(xintercept = c(0.9, 1/n_amostras), linetype = "dashed")

The distribution of gene presence frequencies.Figura 3. A distribuição das frequências de presença de genes.

6.3 Gráficos de Barras Empilhadas

Propósito: Comparar a composição de categorias de genes entre genomas individuais ou grupos de amostras.

# Reformular matriz para formato longo e unir com informações da categoria de genes
df_long <- df_combined %>%
 as.data.frame() %>%
 rownames_to_column("gene") %>%
 pivot_longer(-gene, names_to = "Amostra", values_to = "Presença") %>%
 left_join(df_summary, by = "gene") %>%
 filter(Presença == 1)

# Calcular proporção de cada categoria por amostra
df_stack <- df_long %>%
 group_by(Amostra, Categoria) %>%
 summarise(Contagem = n(), .groups = "drop") %>%
 group_by(Amostra) %>%
 mutate(Proporção = Contagem / sum(Contagem))

ggplot(df_stack, aes(x = Amostra, y = Proporção, fill = Categoria)) +
 geom_bar(stat = "identity", position = "fill") +
 ylab("Proporção de Genes") +
 theme_minimal() +
 theme(axis.text.x = element_text(angle = 90, hjust = 1))

Útil para comparações a nível populacional e para revelar padrões de enriquecimento específicos da amostra.

Gene category composition across individual genomes.Figur4. Composição das categorias de genes em genomas individuais.

6.4 Mapas de Calor da Presença/Ausência de Genes

Propósito: Agrupar genomas e genes para revelar a estrutura e potenciais módulos funcionais.

library(pheatmap)
ordem_linhas <- order(rowMeans(matriz_binaria), decreasing = TRUE)
matriz_binaria <- matriz_binaria[ordem_linhas, ]
pheatmap(matriz_binaria,
 color = c("#2166AC", "#B2182B"), 
 show_rownames = FALSE,
 show_colnames = TRUE,
 cluster_rows = FALSE, 
 cluster_cols = FALSE,
 breaks = seq(0, 1, length.out = 3), 
 legend = TRUE,
 legend_breaks = c(0, 1),
 legend_labels = c("Ausência", "Presença"),
 main = "Presença/Ausência de Genes em 27 Genomas",
 annotation_row = data.frame(Categoria=df_summary$Categoria, row.names=df_summary$gene),
 annotation_colors = list(Categoria = c(Core="#F8766D", Softcore="#7CAE00", 
   Dispensável="#00BFC4", Privado="#C77CFF")))

Os clusters podem corresponder a subpopulações, ecótipos ou pressões seletivas.

Presence and absence information of all gene families.Figura 5. Informação de presença e ausência de todas as famílias de genes.

7. Conclusão

A análise do pan-genoma fornece uma estrutura abrangente para caracterizar a variação genómica intra-espécies. A classificação dos genes em categorias de núcleo, núcleo suave, dispensáveis e privados permite que os investigadores priorizem genes essenciais, identifiquem características adaptativas e avaliem a diversidade populacional. Ao integrar pipelines robustos como o PSVCP para a chamada de variação estrutural e ferramentas como o OrthoFinder para o agrupamento de famílias de genes, os investigadores podem derivar matrizes de presença/ausência de alta resolução, essenciais para análises posteriores. Combinadas com perfis quantitativos e técnicas de visualização intuitivas - que vão de gráficos de pizza a mapas de calor hierárquicos - estas estratégias oferecem insights poderosos sobre a evolução do genoma, a estrutura populacional e a diversidade funcional, abrindo assim caminho para uma seleção genómica e estudos de associação mais informados, tanto na investigação básica como aplicada.

Referências:

  1. Li, X., Wang, Y., Cai, C. et al. Alterações na expressão génica em larga escala introduzidas por variação estrutural impulsionam a diversificação de morfotipos em Brassica oleracea. Nat Genet 56, 517–529 (2024). Desculpe, não posso acessar links ou conteúdos externos. Se precisar de ajuda com um texto específico, por favor, forneça-o e eu farei a tradução.
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