Accessibility Tools

- Le blog participatif de bioinformatique francophone depuis 2012 -

Lorsque l'on traite des données de RNA-​seq, il arrive très souvent de se retrouver avec une matrice de quantification de l'expression des gènes (un tableau avec le nombre de reads par gène) dont le nom des gènes est représenté par leur identifiant (ou ID) de chez Ensembl (ex. : "ENSG00000128573") et non par leurs symboles (ex. : "Foxp2", le gène de la parole).

Afin de donner du sens à nos résultats et faire de belles figures pour les publications, nous devons transformer les IDs en symboles de gènes.

Il y a 2 façons de faire :

  • en amont : il est possible de modifier le fichier GTF (ou GFF) de l'annotation du génome pour remplacer les IDs par les symboles des gènes. Ainsi, la matrice de comptage d'expression contiendra directement les symboles au lieu des IDs et vous n'aurez pas à changer vos matrices après le mapping et la quantification.
  • en aval : en constituant une table de correspondance ID - symbole et en remplaçant les IDs dans la matrice de comptage.

C'est cette dernière solution que je vais vous montrer.

Convertir les IDs en symboles

Prenons l'exemple de la matrice de comptage du nombre de reads par gène provenant du traitement de données RNA-​seq via le pipeline nf-​core/​rnaseq. Les données ont été mappées sur le génome de référence de la souris téléchargé depuis Gencode.

Voici à quoi ressemble cette matrice à la sortie du pipeline nf-​core :

gene_​idtranscript_id(s)Sample1Sample2Sample3
ENSMUSG00000000001.4ENSMUST00000000001.4663773925200
ENSMUSG00000000003.15ENSMUST00000000003.13,ENSMUST00000114041.2000
ENSMUSG00000000088.7ENSMUST00000000090.7,ENSMUST00000213678.1,ENSMUST00000214154.12302.553752.861961.77
ENSMUSG00000000094.12ENSMUST00000000096.11,ENSMUST00000108045.2,ENSMUST00000108047.71114
Version tronquée d'une matrice de quantification du nombre de reads par gène issue du pipeline nf-​core/​rnaseq.

Les deux premières colonnes contiennent les IDs des gènes ("gene_​id"), et les IDs des transcrits alternatifs de chacun des gènes ("transcript_id(s)"). Les colonnes suivantes décrivent le nombre de reads par gène pour chacun des échantillons.

Pour convertir les IDs, nous aurons besoin de charger la librairie R contenant l'annotation du génome de la souris disponible sur Bioconductor :

Ensuite, nous allons ouvrir notre tableau d'expression, enlever la colonne qui concerne les transcrits alternatifs parce qu'elle ne nous intéresse pas, puis extraire les IDs des gènes contenus dans notre tableau d'expression qui se trouvent dans la colonne "gene_​id" :

Vous remarquerez que les IDs ensemble se terminent par un point suivi d'un chiffre (ex. : "ENSMUSG00000000001.4"). Il s'agit du numéro de la version de l'annotation des gènes. Ce numéro est absent de l'annotation contenue dans le paquet "org.Mm.eg.db" que nous avons installé, il va donc falloir le retirer :

Enfin, nous allons récupérer les symboles des gènes grâce à la fonction mapIds() du paquet "org.Mm.eg.db" :

On obtient alors un tableau avec les IDs des gènes en nom de ligne, et les symboles correspondant dans la première colonne :

On va ensuite remplacer les IDs des gènes par les symboles dans la matrice de comptage en utilisant la fonction merge(), qui permet de s'assurer une parfaite correspondance entre les noms de lignes des deux tableaux :

Voilà ce que l'on obtient à l'issue du merge effectué sur les noms de lignes :

Enfin, on va enlever les colonnes non nécessaires, éliminer les lignes en double (ça arrive de temps en temps avec la fonction merge()…), et renseigner les symboles des gènes en noms de ligne.

Voilà, vous avez maintenant une matrice directement utilisable pour faire votre analyse d'expression différentielle !

Conclusion

Il existe probablement d'autre façon de faire, peut-​être même plus efficaces, je vous ai présenté ici celle que j'utilise.

Si vous souhaitez convertir une liste d'IDs de gènes sans forcément passer par R, vous pouvez également utiliser des outils de conversion disponibles sur divers sites internet, tels que David, g:profiler et BioMart/​MartView pour ne citer qu'eux.

Merci à Ista, Gwenaelle et Azerin pour la relecture.




Commentaires

Une réponse à “R : Convertir des Ensembl IDs en symboles de gènes”

  1. Merci ZaZo0o pour le billet bien utile !
    Trois petits ajouts :

    je préfère ne remplacer les ID par des Symbol qu'au dernier moment, lors des plots. Il peut en effet arriver que des gène n'aient pas de Symbol, voir même d'avoir deux gene ID ayant le même Symbol ! Ca peut créer quelques soucis si le swap est fait trop en amont. On peut d’ailleurs aussi tout garder en métadonnées de lignes graces aux objets {SummarizedExperiment} qui ne sont finalement pas si compliqué que ça à utiliser.
    Pour certains organismes, il n’y a pas de package {org.Xx.eg.db} sur Bioconductor. Dans ces cas là, on peut importer le gtf dans R, il y a souvent une colonne Symbol dans le gtf.

    sub semble un peu plus rapide que sapply + strsplit dans ce cadre là.

Laisser un commentaire

Pour insérer du code dans vos commentaires, utilisez les balises <code> et <\code>.