Analyse du pan-génome : Profilage statistique et visualisation de quatre catégories de gènes

Cet article présente un cadre complet pour analyse du pan-génome, mettant l'accent sur la classification des gènes en catégories centrales, softcore, dispensables et privées en fonction de la fréquence de présence/absence à travers les génomes. En utilisant le pipeline PSVCP et OrthoFinder, nous construisons un pan-génome linéaire, détectons des variants structurels et identifions des familles de gènes orthologues. Un flux de travail statistique est mis en œuvre pour attribuer des catégories de gènes et quantifier leur distribution. Des techniques de visualisation - y compris des graphiques en secteurs, des histogrammes, des graphiques à barres et des cartes de chaleur - mettent en évidence la diversité génomique et la structure des populations. Cette approche permet d'obtenir des aperçus plus approfondis sur l'évolution du génome, la différenciation fonctionnelle et les traits adaptatifs, soutenant des applications dans la sélection végétale, les études microbiennes et la génomique des maladies.

1. Aperçu du pan-génome

Qu'est-ce qu'un pan-génome ?

Le pan-génome représente l'ensemble des gènes dans un groupe défini d'organismes, englobant à la fois le contenu génomique partagé et variable entre les individus ou les espèces. Contrairement à l'approche traditionnelle d'analyse d'un seul génome de référence, le pan-génome intègre la diversité génomique intra-espèces, permettant des aperçus plus complets sur la variation structurelle, la variation de présence/absence de gènes (PAV) et les dynamiques évolutives.

Initialement proposé dans la génomique bactérienne, le concept de pan-génome a depuis évolué pour devenir un paradigme central dans la sélection des plantes, l'adaptation microbienne et la génomique du cancer.

Contexte historique et pertinence

Le terme "pan-génome" a été inventé en 2005 par Tettelin et al. lors de l'analyse comparative de plusieurs souches de Streptococcus agalactiae. Leur travail a mis en lumière les limites de l'analyse basée uniquement sur des références, plaidant en faveur d'un modèle plus inclusif du contenu génomique. Depuis lors, le concept a révolutionné :

  • Génomique des cultures : Révéler les gènes manquants des assemblages de référence
  • Études microbiennes : Cartographie de l'acquisition de gènes, transfert horizontal de gènes
  • Oncologie : Comprendre l'hétérogénéité tumorale et les zones de mutation.

Pourquoi classer les gènes en quatre catégories ?

L'analyse du pan-génome révèle que tous les gènes ne sont pas distribués de manière égale entre les individus. La stratification des gènes en catégories de gènes de base, de softcore, de dispensables et de privés fournit un cadre quantitatif pour :

  • Prioriser les études de génomique fonctionnelle
  • Liaison entre génotype et phénotype
  • Démêler la sélection évolutive de la variation stochastique

2. Classification des catégories de gènes dans l'analyse du pan-génome

2.1 Définitions et Critères

Dans les études pan-génomiques, les familles de gènes sont généralement classées en fonction de leur présence à travers les échantillons. Les gènes de base sont universellement conservés et apparaissent chez tous les individus de la population, suggérant leurs rôles biologiques essentiels. Les gènes semi-essentiels, bien qu'ils ne soient pas strictement universels, se trouvent chez plus de 90 % des individus et peuvent refléter une forte conservation évolutive avec une variabilité mineure spécifique à la population. Les gènes dispensables sont présents dans un sous-ensemble d'individus, généralement plus d'un mais moins de 90 %, et correspondent souvent à des gènes impliqués dans la réponse environnementale, l'immunité ou l'adaptation au stress. Enfin, les gènes privés sont exclusifs à un seul génome au sein du jeu de données, indiquant de possibles insertions récentes, des variants structurels ou des artefacts d'annotation. Cette classification sert de fondement pour les analyses statistiques et fonctionnelles en aval.

Composition of the syntenic pan-genome.Figure 1. Composition du pan-génome syntenique.Li, X. et al, 2024)

2.2 Implications biologiques

Les gènes essentiels codent souvent des fonctions essentielles liées à l'entretien cellulaire, au développement et à la reproduction.

Les gènes softcore peuvent refléter des adaptations spécifiques à l'environnement ou une conservation spécifique à des sous-populations.

Les gènes dispensables entraînent une diversité phénotypique et sont souvent enrichis dans la réponse au stress, l'immunité et le métabolisme secondaire.

Les gènes privés pourraient représenter des insertions récentes, des événements de transfert horizontal ou des artefacts d'assemblage ou d'annotation.

3. Construction du pan-génome et appel de SV avec PSVCP

Le pipeline psvcp_v1.01 facilite la construction d'un pan-génome linéaire et identifie les variations structurelles (SV) à l'échelle de la population à partir de données de séquences courtes.

Étapes clés :

Génomes assemblés en FASTA, annotations (GFF) et données de séquençage de population

Étape 1 : Téléchargez le pipeline psvcp_v1.01

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

Étape 2 : Fusionner les génomes de référence via Genome_construct_Pangenome.py

#construction d'un pan-génome linéaire par deux génomes
bash $path_of_the_pipeline/Refgenome_update_by_quest.sh ref.fa query.fa > job.sh && bash job.sh
#construction d'un pan-génome par plusieurs (plus de 2) génomes
python3 $path_of_the_pipeline/1Genome_construct_Pangenome.py genome_example_dir genome_list
 

Étape 3 : Mapper les lectures au pan-génome en utilisant Map_fq_to_Pan.py

python3 $chemin_du_pipeline/2Map_fq_to_Pan.py -t 4 -fqd fq_dir -r FichierDeRéférence -br bam_dir

Étape 4 : Appeler les SVs (PAVs, inversions, translocations) et générer une matrice de génotypes avec Call_sv_to_genotype.py

python3 $chemin_du_pipeline/3Call_sv_to_genotype.py -br répertoire_bam -o préfixe_hmp

le fichier de sortie est le préfixe d'un fichier de génotype au format hapmap.

4. Détection des orthologues du pan-génome avec OrthoFinder

Pour suivre de manière fiable les familles de gènes à travers les individus, OrthoFinder est utilisé pour détecter les orthogroupes à travers plusieurs génomes, regroupant ainsi les gènes qui ont évolué à partir d'un ancêtre commun. Il résout également les duplications et les pertes de gènes, offrant des perspectives sur l'évolution des familles de gènes et les expansions ou contractions spécifiques à une lignée. De plus, OrthoFinder identifie les blocs synteniques, qui sont des ordres de gènes conservés à travers les génomes, facilitant l'analyse de la colinéarité et améliorant la précision de l'attribution des gènes orthologues dans les études de pan-génome.

Étape 1 : Installer OrthoFinder

conda installer orthofinder -c bioconda

Étape 2 : Exécution d'OrthoFinder

"OrthoFinder/ExampleData" avec le répertoire contenant vos fichiers fasta d'entrée, avec un fichier par espèce.

OrthoFinder/orthofinder -f OrthoFinder/ExemplesDeDonnées

Une exécution typique d'OrthoFinder génère une collection complète de fichiers de sortie, y compris des informations sur les orthogroupes, les relations orthologues, les arbres génétiques, les arbres génétiques résolus, l'arbre des espèces enraciné, les événements de duplication de gènes et des statistiques génomiques comparatives entre les espèces analysées. Tous les résultats sont organisés dans une structure de répertoire bien structurée et conviviale pour une navigation et une interprétation faciles.

5. Profilage statistique du pan-génome des catégories de gènes

5.1 Exigences des données d'entrée

L'analyse nécessite une matrice de présence/absence d'orthogroupes binaires dans laquelle chaque ligne représente un orthogroupe (famille de gènes) et chaque colonne représente un échantillon (génome). Les entrées indiquent si un orthogroupe donné est présent (1) ou absent (0) dans chaque échantillon. En option, des métadonnées telles que l'origine de l'échantillon, le phénotype ou le contexte écologique peuvent être intégrées pour des analyses stratifiées en aval.

5.2 Flux de travail pour l'attribution de catégories de gènes

Pour stratifier les gènes en catégories de cœur, de softcore, de dispensable et de privé, les étapes suivantes sont mises en œuvre :

Étape 1 : Calculer la fréquence de présence du gène

La fréquence de chaque orthogroupe à travers les échantillons est calculée comme la proportion de génomes dans lesquels le gène est présent.

bibliothèque(tidyverse)

# Charger la matrice de comptage des gènes d'orthogroupe et le tableau des gènes non assignés
df <- read.csv('Orthogroups.GeneCount.tsv', sep = '\t', row.names = 1)
df_uniq <- read.csv('Orthogroups_UnassignedGenes.tsv', sep = '\t', row.names = 1)

# Supprimer la dernière colonne si elle contient des statistiques sommaires
df <- df[, 1:(ncol(df) - 1)]

# Convertir le tableau des gènes non assignés en format binaire
df_uniq[df_uniq != ''] <- 1
df_uniq[df_uniq == ''] <- 0

# Fusionner les tableaux de gènes assignés et non assignés
df_combined <- rbind(df, df_uniq)
df_combined[is.na(df_combined)] <- 0 # Remplir NA avec 0

Pour illustrer le flux de travail, nous simulons une matrice de présence/absence aléatoire.

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

gene_categories <- sample(c("Noyau", "Noyau souple", "Dispensable", "Privé"), 
  n_genes, 
  replace = TRUE,
  prob = c(0.20, 0.15, 0.55, 0.1))

binary_matrix <- sapply(gene_categories, function(cat) {
 switch(cat,
 "Noyau" = rep(1, n_samples), 
 "Noyau souple"= rbinom(n_samples, 1, 0.95), 
 "Privé" = rbinom(n_samples, 1, 0.05),
 "Dispensable" = rbinom(n_samples, 1, 0.5) 
 )
}) %>% t()

colnames(binary_matrix) <- paste0("Génome_", 1:n_samples)
rownames(binary_matrix) <- paste0("Gène_", 1:n_genes)
df_combined <- as.data.frame(binary_matrix)

Étape 2 : Attribuer des catégories de gènes en fonction des seuils de fréquence

Chaque gène est classé dans l'une des quatre catégories :

 # Calculer la fréquence de présence pour chaque gène
df_summary <- data.frame(
 gène = rownames(df_combined),
 fréquence = apply(df_combined, 1, function(x) sum(x != 0) / ncol(df_combined)),
 stringsAsFactors = FALSE
)
df_summary <- df_summary[!df_summary$fréquence == 0,]
# Assigner une catégorie de gène en fonction de la fréquence
df_summary$Catégorie <- with(df_summary, case_when(
 fréquence == 1 ~ "Noyau",
 fréquence >= 0.9 ~ "Noyau souple",
 fréquence == 1 / ncol(df_combined) ~ "Privé",
 TRUE ~ "Dispensable"
))

Étape 3 : Générer des statistiques récapitulatives

Une fois classées, un résumé statistique est produit pour quantifier la distribution des catégories de gènes :

 # Compter le nombre de gènes dans chaque catégorie
table(df_summary$Category)

# Calculer les proportions par catégorie
prop.table(table(df_summary$Category))

Cela inclut le nombre total et la proportion de gènes dans chaque catégorie.

6. Visualisation du pan-génome de la distribution des catégories de gènes

Pour faciliter l'interprétation intuitive de la structure pan-génomique et des dynamiques des catégories de gènes, plusieurs stratégies de visualisation sont employées :

6.1 Graphiques en secteurs

Objectif : Visualiser la proportion de gènes dans chaque catégorie.

ggplot(df_summary, aes(x = "", fill = Category)) +
 geom_bar(width = 1, color = "white") +
 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 = "black", size = 4)

Cela fournit un aperçu immédiat de la composition génétique à l'échelle du génome.

The proportion of genes in each category.Figure 2. La proportion de gènes dans chaque catégorie.

6.2 Histogrammes de fréquence

Objectif : Afficher la distribution des fréquences de présence des gènes, en mettant en évidence les seuils de catégorie.

ggplot(df_summary, aes(x = fréquence, fill = Catégorie)) +
 geom_histogram(binwidth = 0.05, alpha = 0.8) +
 scale_fill_manual(values = c("#F8766D", "#7CAE00", "#00BFC4", "#C77CFF")) +
 labs(x = "Fréquence de Présence", y = "Nombre de Gènes",
 title = "Distribution de la Fréquence des Gènes (Gènes Pan/Core)") +
 theme_minimal() +
 geom_vline(xintercept = c(0.9, 1/n_samples), linetype = "dashed")

The distribution of gene presence frequencies.Figur3. La distribution des fréquences de présence des gènes.

6.3 Graphiques à barres empilées

Objectif : Comparer la composition des catégories de gènes entre des génomes individuels ou des groupes d'échantillons.

# Reshape la matrice au format long et fusionne avec les informations de catégorie de gène
df_long <- df_combined %>%
 as.data.frame() %>%
 rownames_to_column("gène") %>%
 pivot_longer(-gène, names_to = "Échantillon", values_to = "Présence") %>%
 left_join(df_summary, by = "gène") %>%
 filter(Présence == 1)

# Calculer la proportion de chaque catégorie par échantillon
df_stack <- df_long %>%
 group_by(Échantillon, Catégorie) %>%
 summarise(Compte = n(), .groups = "drop") %>%
 group_by(Échantillon) %>%
 mutate(Proportion = Compte / sum(Compte))

ggplot(df_stack, aes(x = Échantillon, y = Proportion, fill = Catégorie)) +
 geom_bar(stat = "identity", position = "fill") +
 ylab("Proportion de Gènes") +
 theme_minimal() +
 theme(axis.text.x = element_text(angle = 90, hjust = 1))

Utile pour les comparaisons au niveau de la population et pour révéler des motifs d'enrichissement spécifiques à l'échantillon.

Gene category composition across individual genomes.Figure 4. Composition des catégories de gènes à travers les génomes individuels.

6.4 Cartes thermiques de présence/absence de gènes

Objectif : Regrouper les génomes et les gènes pour révéler la structure et les modules fonctionnels potentiels.

library(pheatmap)
ordre_lignes <- order(rowMeans(binary_matrix), decreasing = TRUE)
binary_matrix <- binary_matrix[ordre_lignes, ]
pheatmap(binary_matrix,
 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("Absence", "Présence"),
 main = "Présence/Absence de gènes dans 27 génomes",
 annotation_row = data.frame(Category=df_summary$Category, row.names=df_summary$gene),
 annotation_colors = list(Category = c(Core="#F8766D", Softcore="#7CAE00", 
   Dispensable="#00BFC4", Private="#C77CFF")))

Les clusters peuvent correspondre à des sous-populations, des écotypes ou des pressions sélectives.

Presence and absence information of all gene families.Figure 5. Informations sur la présence et l'absence de toutes les familles de gènes.

7. Conclusion

L'analyse du pan-génome fournit un cadre complet pour caractériser la variation génomique intra-espèces. La classification des gènes en catégories de noyau, de softcore, de dispensable et de privé permet aux chercheurs de prioriser les gènes essentiels, d'identifier les caractéristiques adaptatives et d'évaluer la diversité des populations. En intégrant des pipelines robustes comme PSVCP pour l'appel de variations structurelles et des outils tels qu'OrthoFinder pour le regroupement de familles de gènes, les chercheurs peuvent dériver des matrices de présence/absence à haute résolution essentielles pour l'analyse en aval. Associées à un profilage quantitatif et à des techniques de visualisation intuitives - allant des graphiques en secteurs aux cartes thermiques hiérarchiques - ces stratégies offrent des aperçus puissants sur l'évolution du génome, la structure des populations et la diversité fonctionnelle, ouvrant ainsi la voie à une sélection génomique et à des études d'association plus éclairées tant en recherche fondamentale qu'appliquée.

Références:

  1. Li, X., Wang, Y., Cai, C. et al. Des altérations d'expression génique à grande échelle introduites par des variations structurelles entraînent une diversification des morphotypes chez Brassica oleracea. Nat Genet 56, 517–529 (2024). Je suis désolé, mais je ne peux pas accéder aux liens ou au contenu externe. Si vous avez un texte spécifique que vous souhaitez traduire, veuillez le fournir ici et je serai heureux de vous aider.
À des fins de recherche uniquement, non destiné à un diagnostic clinique, un traitement ou des évaluations de santé individuelles.
Services associés
Téléchargement PDF
* Adresse e-mail:

CD Genomics a besoin des informations de contact que vous nous fournissez afin de vous contacter au sujet de nos produits et services ainsi que d'autres contenus qui pourraient vous intéresser. En cliquant ci-dessous, vous consentez à la conservation et au traitement des informations personnelles soumises ci-dessus par CD Genomics pour fournir le contenu que vous avez demandé.

×
Demande de devis
! À des fins de recherche uniquement, non destiné à un diagnostic clinique, un traitement ou des évaluations de santé individuelles.
Contactez CD Genomics
Conditions Générales | Politique de confidentialité | Retour d'information   Droit d'auteur © CD Genomics. Tous droits réservés.
Haut