Inférence de réseaux de régulation génique en R : GENIE3 & SCENIC pour le RNA-seq single-cell

Apprenez des régulons de novo à partir de vos propres cellules : co-expression GENIE3, élagage par motif RcisTarget et notation AUCell — le pendant fondé sur les données de l’activité des facteurs de transcription fondée sur des priors

Un guide pratique de l’inférence de réseaux de régulation génique (GRN) à partir du RNA-seq single-cell en R avec SCENIC. Au lieu de noter une ressource de régulons choisie, SCENIC apprend les régulons de facteurs de transcription directement à partir de vos données en trois étapes : co-expression par forêt aléatoire GENIE3, élagage par motif RcisTarget en régulons, et notation AUCell des régulons par cellule. Exécutez l’étape de co-expression GENIE3 de bout en bout sur des PBMC stimulés à l’interféron, récupérez une arête interféron classique (IRF7 vers ISG15) à partir de la seule co-expression, et voyez en quoi SCENIC fondé sur les données diffère de l’activité des TF fondée sur des priors avec DoRothEA/CollecTRI — plus pourquoi pySCENIC est le standard de production plus rapide et plus évolutif.

Date de publication

4 juillet 2026

Modifié

7 juillet 2026

AstucePoints clés
  • SCENIC apprend les régulons à partir de vos données, pas d’une base de données choisie. Un réseau de régulation génique (GRN — la carte de quels facteurs de transcription contrôlent quels gènes cibles) peut être noté à partir d’une ressource de connaissances a priori, ou inféré de novo à partir de l’expression elle-même. SCENIC (Single-Cell rEgulatory Network Inference and Clustering) fait ce dernier : il découvre des régulons spécifiques au jeu de données — un facteur de transcription plus les gènes cibles qu’il semble réguler ici — directement à partir de vos cellules (Aibar et al., 2017).
  • Il s’exécute en trois étapes. (1) GENIE3 apprend un réseau de co-expression — un modèle de forêt aléatoire note à quel point chaque facteur de transcription (TF) candidat prédit chaque gène cible (Huynh-Thu et al., 2010). (2) RcisTarget élague ces liens de co-expression pour ne garder que les cibles portant le motif de liaison du TF, transformant les modules en régulons. (3) AUCell note chaque cellule pour l’activité de chaque régulon — le même moteur que la notation de signatures géniques.
  • Seule l’étape 1 est reproductible dans une leçon figée. La co-expression GENIE3 s’exécute ici sur des données réelles et est déterministe. Les étapes 2–3 nécessitent les bases de données de rangs de motifs cisTarget (environ un gigaoctet de fichiers feather par espèce) et relèvent d’un environnement de calcul géré, elles sont donc montrées à titre illustratif.
  • C’est le pendant fondé sur les données de l’activité des TF fondée sur des priors. Là où l’activité des facteurs de transcription note des régulons choisis (DoRothEA/CollecTRI) — rapide et robuste — SCENIC apprend le réseau à partir de ce jeu de données, de sorte qu’il peut découvrir des régulons spécifiques d’un type cellulaire que les priors n’ont jamais encodés. Le coût, c’est le calcul, les bases de données de motifs et des arêtes plus bruitées.
  • pySCENIC est le standard de production. La réimplémentation Python est environ dix fois plus rapide et remplace GENIE3 par le plus rapide GRNBoost2 (Van de Sande et al., 2020). Cette leçon exécute l’étape de co-expression en R et enseigne les étapes de motif et de notation à titre illustratif.

Introduction

Vous avez quantifié ce que vos cellules font — vous avez peut-être noté des signatures géniques, lu l’activité des voies et inféré l’activité des facteurs de transcription à partir de régulons choisis. Chacune de ces méthodes lit un réseau que quelqu’un d’autre a construit : une signature que vous avez fournie, les empreintes de voies de PROGENy, les régulons de DoRothEA choisis dans la littérature. La question suivante est différente par nature : et si le réseau de régulation dont vous avez besoin n’est dans aucune base de données ? Une tumeur, un état cellulaire rare, un organisme non modèle — les régulons intéressants sont souvent exactement ceux qu’aucun conservateur n’a écrits.

C’est le vide que SCENIC comble. Au lieu de noter un réseau de régulation génique (GRN — la carte de quels facteurs de transcription activent ou désactivent quels gènes cibles) choisi, SCENIC infère le réseau de novo à partir de votre propre RNA-seq single-cell (scRNA-seq — le séquençage de l’ARN cellule par cellule) (Aibar et al., 2017). Il découvre des régulons — chacun un facteur de transcription (TF — une protéine qui active ou désactive des gènes) avec les gènes cibles qu’il semble réguler dans ce jeu de données — puis note chaque cellule pour l’activité de chaque régulon. Le résultat est une carte de régulation ajustée à votre biologie, non empruntée à une référence.

Nous travaillons sur le classique benchmark immunitaire interféron-bêta (IFN-β) : des cellules mononucléées du sang périphérique (PBMC — les cellules immunitaires du sang), la moitié laissées comme contrôles et la moitié stimulées à l’IFN-β (Kang et al., 2018). L’IFN-β pilote un programme transcriptionnel net et bien compris à travers la famille des facteurs de régulation de l’interféron, ce qui nous donne une vérification intégrée : un réseau appris à partir de ces cellules devrait faire remonter des régulateurs de l’interféron — et, comme vous le verrez, GENIE3 récupère l’arête classique IRF7 → ISG15 (un gène stimulé par l’interféron) à partir de la seule co-expression.

Fondé sur des priors vs fondé sur les données : deux façons d’obtenir un réseau de régulation

La leçon sur l’activité des facteurs de transcription et celle-ci répondent à la même question — quels régulateurs sont actifs ? — depuis des points de départ opposés. Il vaut la peine d’être précis sur l’arbitrage, parce qu’il décide de l’outil vers lequel on se tourne.

Activité des TF fondée sur des priors (DoRothEA/CollecTRI) GRN fondé sur les données (SCENIC)
D’où vient le réseau Une base de données de régulons choisie, construite une fois à partir de la littérature + preuves Appris de novo à partir de l’expression de ce jeu de données
Vitesse Rapide — noter un réseau fixe Lourd — régression par forêt aléatoire + enrichissement en motifs
Robustesse Élevée — arêtes vérifiées, stables entre jeux de données Plus bruité — arêtes statistiques, spécifiques au jeu de données
Découvre de nouveaux régulons ? Non — limité à ce que les conservateurs ont encodé Oui — régulons spécifiques d’un type cellulaire et d’une condition
Ressources supplémentaires Aucune (données de package hors ligne) Bases de données de motifs cisTarget (~1 Go par espèce)
Moteur de notation par cellule run_ulm de decoupleR AUCell (le même moteur que la notation de signatures)

Les deux se terminent de la même façon — un score d’activité par cellule pour chaque régulateur. La différence est tout ce qui se trouve en amont. Si une bonne ressource choisie couvre votre biologie, l’activité des TF fondée sur des priors est plus rapide et plus robuste ; préférez-la. Tournez-vous vers SCENIC quand vous soupçonnez que les régulons qui importent sont spécifiques à vos données — un état pathologique, un nouveau lignage, un organisme sans DoRothEA — et que vous êtes prêt à payer en calcul et en bases de données de motifs pour les découvrir.

Les trois étapes de SCENIC

SCENIC est un pipeline fixe et ordonné. Chaque étape réduit un réseau de co-expression large et bruité en un petit ensemble de régulons dignes de confiance, soutenus par des motifs, puis les note par cellule.

1 · GENIE3 — co-expression

Importance par forêt aléatoire · poids TF → cible · exécuté ici

2 · RcisTarget — élagage par motif

Garder les cibles portant le motif de liaison du TF · modules → régulons · nécessite les bases de motifs

3 · AUCell — notation des régulons

Activité par cellule de chaque régulon · même moteur que la notation de signatures

Seule l’étape 1 est reproductible dans une leçon figée : GENIE3 s’exécute sur l’expression brute et est déterministe. Les étapes 2 et 3 dépendent des bases de données de rangs de motifs cisTarget — de gros fichiers téléchargés qui cartographient chaque gène selon la force avec laquelle le motif de liaison de chaque TF (la courte séquence d’ADN qu’un TF reconnaît) est enrichi à proximité. Ces bases de données plus le calcul relèvent d’un environnement géré, cette leçon exécute donc GENIE3 et enseigne les étapes de motif et de notation à titre illustratif, exactement le partage honnête qu’impose l’échelle de la méthode.

Note

Les blocs de code de cette leçon construisent une étape d’analyse pas à pas, exécutez-les donc dans l’ordre dans une seule session R. GENIE3 est l’étape coûteuse — on calcule le réseau de co-expression une fois et on le réutilise dans les blocs qui suivent, plutôt que de le reconstruire à chaque fois. (Copiez-les de haut en bas ; n’exécutez pas un bloc ultérieur isolément.)

Les données : des PBMC stimulés à l’interféron

Le fichier commité ifnb_subset.rds est une tranche équilibrée du benchmark IFN-β de Kang : une matrice de comptage brute de PBMC immunitaires plus une table de métadonnées, où la colonne stim enregistre si chaque cellule était une cellule CTRL (contrôle) ou STIM (stimulée à l’IFN-β). Nous construisons un objet Seurat, normalisons, et sélectionnons les gènes les plus variables — les gènes à partir desquels il vaut la peine d’apprendre un réseau.

library(Seurat)
library(GENIE3)

d   <- readRDS("_data/ifnb_subset.rds")
obj <- NormalizeData(CreateSeuratObject(counts = d$counts, meta.data = d$meta))
obj <- FindVariableFeatures(obj, nfeatures = 200)

# Learn the network on the top variable genes, plus a curated candidate-TF list
hvg <- head(VariableFeatures(obj), 120)
tfs <- intersect(c("STAT1", "STAT2", "IRF1", "IRF7", "IRF9", "NFKB1",
                   "REL", "SPI1", "CEBPB", "FOS", "JUN", "EGR1"),
                 rownames(obj))

set.seed(42)
cells <- sample(colnames(obj), 400)                                    # a manageable demo subset
expr  <- as.matrix(GetAssayData(obj, layer = "data")[union(hvg, tfs), cells])

dim(expr)          # genes x cells the network is learned on
[1] 132 400
length(tfs)        # candidate transcription factors (the regulators)
[1] 12

Deux choix délibérés gardent cela rapide et honnête. D’abord, on se restreint aux gènes hautement variables (HVG — les gènes dont l’expression varie le plus entre les cellules) plus une liste de TF candidats choisie — les facteurs de transcription immunitaires et de l’interféron présents dans les données. Le coût de GENIE3 croît avec le nombre de gènes et de régulateurs, donc restreindre la portée aux gènes informatifs n’est pas un raccourci mais une pratique standard (voir Problèmes courants). Ensuite, on échantillonne 400 cellules pour une démonstration qui se rend en quelques secondes ; un run réel utilise toutes vos cellules. Il reste une matrice 132 gènes × 400 cellules et 12 TF candidats.

Étape 1 — GENIE3 : apprendre le réseau de co-expression

GENIE3 (GEne Network Inference with Ensemble of trees) est le moteur de co-expression au cœur de la première étape de SCENIC (Huynh-Thu et al., 2010). Pour chaque gène cible, il entraîne une forêt aléatoire qui prédit l’expression de ce gène à partir des TF candidats, puis lit l’importance de chaque TF — combien ce régulateur a aidé à prédire la cible. Une importance élevée signifie que l’expression du TF suit celle de la cible à travers les cellules : un lien de régulation candidat. Il ne fait aucune hypothèse sur une régulation linéaire ou additive, c’est pourquoi il gère le contrôle désordonné et combinatoire que montrent les vrais régulons.

set.seed(42)
wm <- GENIE3(expr, regulators = tfs, nCores = 1)   # random-forest importance; ~30s

GENIE3() renvoie une matrice de poids — un score d’importance pour chaque paire (TF, cible). On y fait taire sa barre de progression ; c’est l’objet qui compte. Transformez cette matrice en une liste ordonnée d’arêtes avec getLinkList(), les plus fortes d’abord.

dim(wm)                    # regulators (TFs) x targets
[1]  12 132
lnk <- getLinkList(wm)     # ranked TF -> target edges
head(lnk)
  regulatoryGene targetGene    weight
1           IRF7   DNASE1L3 0.7316401
2           SPI1        TRH 0.6712916
3           SPI1       EGR1 0.6681511
4           SPI1        FTL 0.5336970
5           SPI1    HLA-DRA 0.5323978
6           IRF7      ISG15 0.5254446

La matrice de poids est 12 × 132 — chaque TF candidat noté contre chaque gène — et getLinkList() l’aplatit en une liste d’arêtes ordonnée. Chaque ligne est un lien de régulation candidat : un regulatoryGene (le TF), son targetGene, et le weight (l’importance de GENIE3). Ce réseau ordonné est précisément ce que produit l’étape 1 de SCENIC ; les étapes 2 et 3 le raffinent et le notent.

Lire le réseau : la biologie de l’interféron à partir de la seule co-expression

Tout l’intérêt de la vérité terrain est de vérifier les arêtes. Tracez les liens les plus forts que GENIE3 a trouvés et lisez-les à la lumière de la biologie immunitaire connue.

library(ggplot2)

top <- head(lnk, 12)
top$edge <- paste(top$regulatoryGene, "→", top$targetGene)
top$edge <- factor(top$edge, levels = rev(top$edge))

ggplot(top, aes(x = edge, y = weight, fill = regulatoryGene)) +
  geom_col(width = 0.7) +
  coord_flip() +
  scale_fill_viridis_d(option = "D", end = 0.9, name = "Regulator (TF)") +
  labs(x = NULL, y = "GENIE3 importance (edge weight)",
       title = "Strongest co-expression edges learned by GENIE3") +
  theme_minimal(base_size = 12) +
  theme(legend.position = "right")

A horizontal barplot of the twelve strongest transcription-factor-to-target edges GENIE3 learned, each bar coloured by its regulator on a viridis scale. IRF7 to DNASE1L3 is the longest bar (weight about 0.73), followed by SPI1 to TRH, SPI1 to EGR1, SPI1 to FTL and SPI1 to HLA-DRA, then IRF7 to ISG15 at about 0.53. The strongest edges are split between IRF7, an interferon-regulatory factor driving interferon-stimulated genes, and SPI1 (PU.1) driving myeloid target genes — both recovered from co-expression alone.

Les arêtes les plus fortes se répartissent nettement selon la biologie connue. Le lien le plus fort est IRF7 → DNASE1L3 (poids ≈ 0.73), et un peu plus bas se trouve IRF7 → ISG15 (≈ 0.53) — une arête interféron classique : IRF7 est un facteur de régulation de l’interféron maître, et ISG15 est l’un des gènes stimulés par l’interféron les plus induits dans une réponse IFN-β. GENIE3 a récupéré cette relation de régulation à partir de la seule co-expression, sans qu’aucun réseau a priori ne lui soit dicté. L’autre régulateur fort est SPI1 (aussi appelé PU.1), un facteur de transcription myéloïde maître, pilotant des cibles myéloïdes — HLA-DRA (un gène de présentation d’antigène de classe II), FTL (chaîne légère de la ferritine), EGR1. Deux programmes de régulation cohérents — un interféron et un myéloïde — tombent directement du réseau appris. C’est la promesse de l’inférence de GRN fondée sur les données : les régulons émergent des données, non d’une base de données.

Étape 2 — RcisTarget : élaguer la co-expression en régulons

La co-expression est nécessaire mais non suffisante : deux gènes peuvent corréler sans que l’un régule l’autre (un pilote commun en amont, un effet du cycle cellulaire). La deuxième étape de SCENIC ne garde que les liens ayant une base mécanistique. RcisTarget effectue un enrichissement en motifs cis-régulateurs : pour chaque module de co-expression (un TF et ses cibles GENIE3), il demande si les gènes cibles sont enrichis pour le motif de liaison du TF près de leurs sites d’initiation de la transcription, en utilisant des bases de données de rangs de motifs précalculées. Les modules qui passent deviennent des régulons — et surtout, seules les cibles directes, soutenues par un motif, sont retenues.

# Illustrative only — needs the cisTarget motif-rank databases (~1 GB feather files
# per species), so it is NOT run here. Point RcisTarget at the downloaded databases:
library(RcisTarget)

# The motif-rank databases (downloaded once from the SCENIC resources):
#   hg19-500bp-upstream-7species.mc9nr.feather, hg19-tss-centered-10kb-7species.mc9nr.feather
data(motifAnnotations_hgnc)
motifRankings <- importRankings("hg19-tss-centered-10kb-7species.mc9nr.feather")

# geneModules = the per-TF target lists distilled from the GENIE3 weight matrix above.
# RcisTarget keeps only targets carrying the TF's motif -> a pruned, direct regulon.
motifEnrichment <- cisTarget(geneModules, motifRankings,
                             motifAnnot = motifAnnotations_hgnc)

L’élagage par motif est ce qui sépare SCENIC d’un simple réseau de co-expression : il exige la preuve que le TF peut physiquement se lier près de la cible, de sorte que les corrélations fallacieuses sont écartées et que chaque régulon est un ensemble de cibles directes, soutenues par la séquence (Aibar et al., 2017).

Étape 3 — AUCell : noter chaque cellule pour l’activité des régulons

Une fois que vous avez des régulons, l’étape finale mesure à quel point chaque régulon est actif dans chaque cellule. SCENIC utilise AUCell — le moteur même enseigné dans la leçon sur la notation de signatures géniques. Pour une cellule donnée, AUCell classe tous les gènes par expression et calcule l’aire sous la courbe de recouvrement (AUC) pour les gènes cibles d’un régulon : une cellule où les cibles du régulon siègent en haut du classement obtient un score élevé. La sortie est une matrice d’activité cellules × régulons que vous pouvez ajouter à votre objet Seurat, contraster entre conditions, ou peindre sur un UMAP — exactement comme vous l’avez fait avec l’activité des TF choisie.

# Illustrative only — runs on the regulons from step 2 (motif-pruned), which need the
# cisTarget databases. AUCell itself is light; the regulons are the gated input.
library(AUCell)

cellRankings <- AUCell_buildRankings(as.matrix(GetAssayData(obj, layer = "data")))
regulonAUC   <- AUCell_calcAUC(regulons, cellRankings)   # cells x regulons activity

# regulonAUC now scores each cell for each de-novo regulon, the same way signature
# scoring scores a curated gene set — see the AUCell / UCell lesson for the engine.

Le pipeline SCENIC complet

En pratique, on câble rarement les trois étapes à la main — le package SCENIC les enveloppe en quatre appels, pilotés par un seul objet d’options. C’est le vrai run de bout en bout ; il est illustratif ici parce que chaque étape après la première nécessite les bases de données de motifs.

# Illustrative only — the end-to-end SCENIC workflow. Requires the cisTarget motif
# databases and substantial compute, so it belongs in a managed environment.
library(SCENIC)

scenicOptions <- initializeScenic(org = "hgnc", dbDir = "cisTarget_databases",
                                  nCores = 8)

# 1) co-expression (GENIE3 or the faster GRNBoost2) -> TF-target modules
runGenie3(exprMat_filtered, scenicOptions)
scenicOptions <- runSCENIC_1_coexNetwork2modules(scenicOptions)

# 2) motif pruning (RcisTarget) -> regulons
scenicOptions <- runSCENIC_2_createRegulons(scenicOptions)

# 3) per-cell regulon activity (AUCell)
scenicOptions <- runSCENIC_3_scoreCells(scenicOptions, exprMat)

runSCENIC_1_coexNetwork2modules() transforme la matrice de poids GENIE3 en modules de co-expression, runSCENIC_2_createRegulons() exécute l’élagage par motif RcisTarget, et runSCENIC_3_scoreCells() exécute AUCell — les trois étapes que vous avez vues individuellement, maintenant orchestrées. La sortie est une matrice d’activité des régulons prête pour le regroupement et la visualisation.

Méthodes, honnêteté et reproductibilité

Quelques points à garder clairs pour utiliser SCENIC avec exactitude.

SCENIC en R est lent et nécessite les bases de données de motifs cisTarget. L’étape de co-expression passe à l’échelle avec gènes × régulateurs × cellules, et l’étape de motif nécessite environ un gigaoctet de bases de données feather par espèce. Pour tout ce qui dépasse une démonstration, le standard de la communauté Saez–Aerts est pySCENIC, la réimplémentation Python, qui est environ dix fois plus rapide, plus économe en mémoire, et conteneurisée pour des runs reproductibles (Van de Sande et al., 2020). Les bases de données de motifs et le calcul lourd relèvent d’un environnement de calcul géré ; cette leçon exécute l’étape de co-expression et enseigne les étapes de motif et de notation à titre illustratif pour cette raison.

GRNBoost2 remplace GENIE3 pour les grandes données. pySCENIC remplace GENIE3 par GRNBoost2 — un régresseur à gradient boosting qui donne des réseaux très similaires en une fraction du temps (Van de Sande et al., 2020). Sur la petite démonstration ici, GENIE3 convient ; sur des dizaines de milliers de cellules et des milliers de gènes, GRNBoost2 est le choix pratique.

Les régulons de novo sont plus bruités que les priors choisis — validez-les. Parce que SCENIC apprend les arêtes statistiquement à partir de ce jeu de données, certains liens sont fallacieux (l’étape de motif en supprime beaucoup, pas tous). Traitez un régulon découvert comme une hypothèse : vérifiez ses principales cibles à la lumière de la biologie connue, cherchez les régulateurs attendus dans un contraste que vous comprenez (ici, les TF de l’interféron dans les cellules stimulées), et soyez prudent avec les régulons petits ou de faible confiance. C’est le revers de l’avantage de découverte — le réseau est spécifique au jeu de données, il est donc aussi spécifique au jeu de données dans ses erreurs.

Quand utiliser SCENIC vs l’activité des TF fondée sur des priors

Choisissez selon que le réseau dont vous avez besoin existe déjà ou non.

  • Ayez recours à l’activité des TF fondée sur des priors (DoRothEA/CollecTRI + decoupleR) quand une ressource choisie couvre votre biologie — elle est rapide, robuste, hors ligne, et ne nécessite aucune base de données de motifs. C’est le bon choix par défaut pour le travail humain/souris standard.
  • Ayez recours à SCENIC quand les régulons qui importent sont spécifiques à vos données — un programme tumoral, un état cellulaire rare, un organisme non modèle sans régulons choisis — et que vous pouvez vous permettre le calcul et les bases de données de motifs pour les découvrir. SCENIC trouve des régulons spécifiques d’un type cellulaire et d’une condition que les priors n’ont jamais encodés.
  • En production, préférez pySCENIC (Van de Sande et al., 2020) — le workflow plus rapide, conteneurisé, fondé sur GRNBoost2 — et utilisez l’étape de co-expression en R, comme ici, pour comprendre et prototyper ce qu’il fait.

Problèmes courants

GENIE3 est insupportablement lent (ou manque de mémoire) sur tous les gènes. GENIE3 entraîne une forêt aléatoire par gène cible, donc le coût croît avec le nombre de gènes et de régulateurs. Ne l’exécutez jamais sur la matrice complète. Restreignez-vous aux gènes hautement variables plus une liste de TF candidats (comme nous le faisons ici), et sur de grandes données passez à GRNBoost2 via pySCENIC, qui donne un réseau similaire bien plus vite (Van de Sande et al., 2020). Parallélisez avec nCores quand vous exécutez bien GENIE3.

RcisTarget renvoie une erreur car il ne trouve pas les bases de données de motifs. Les étapes 2 et 3 nécessitent les bases de données de rangs de motifs cisTarget — de gros fichiers feather téléchargés une fois depuis les ressources SCENIC et pointés avec dbDir. Elles ne sont pas fournies avec le package en raison de leur taille (~1 Go par espèce). Téléchargez les bases de données correspondant à l’espèce, réglez dbDir dans initializeScenic(), et exécutez dans un environnement disposant du disque et de la mémoire pour les contenir. C’est pourquoi les étapes de motif et de notation sont illustratives dans une leçon figée.

Vos régulons de novo paraissent plus bruités que ceux de DoRothEA. Ils le sont — c’est attendu. SCENIC infère les arêtes statistiquement à partir de votre jeu de données, il capte donc les régulons spécifiques au jeu de données et le bruit spécifique au jeu de données. Validez à la lumière de la biologie connue (les TF de l’interféron remontent-ils dans les cellules stimulées ?), gardez les régulons de plus haute confiance, et si vous n’avez besoin que d’un réseau vérifié pour de la biologie standard, l’activité des TF fondée sur des priors est le choix le plus robuste.

Foire aux questions

Les deux vous donnent des régulons de facteurs de transcription, mais depuis des directions opposées. DoRothEA/CollecTRI sont des bases de données de régulons choisies construites une fois à partir de la littérature et de preuves — rapides, robustes, hors ligne, et limitées à ce que les conservateurs ont encodé. SCENIC apprend les régulons de novo à partir de votre jeu de données avec la co-expression GENIE3 plus l’élagage par motif RcisTarget, il peut donc découvrir des régulons spécifiques d’un type cellulaire et d’une condition que les priors n’ont jamais eus — au prix du calcul, des bases de données de motifs et d’arêtes plus bruitées. Utilisez les priors choisis quand ils couvrent votre biologie ; utilisez SCENIC pour découvrir des régulons spécifiques à vos données.

Oui, avec le package R SCENIC plus GENIE3, RcisTarget et AUCell — mais seule l’étape de co-expression GENIE3 est légère. L’étape de motif nécessite les bases de données cisTarget (~1 Go par espèce) et l’ensemble du pipeline est lent. Pour tout ce qui dépasse un prototype, le standard de la communauté est pySCENIC, la réimplémentation Python, qui est environ dix fois plus rapide et conteneurisée (Van de Sande et al., 2020). Un schéma courant consiste à prototyper et apprendre les étapes en R, puis à exécuter la production en pySCENIC.

Les deux infèrent le même type de réseau de co-expression — à quel point chaque TF prédit chaque cible — mais avec des régresseurs différents. GENIE3 utilise des forêts aléatoires (Huynh-Thu et al., 2010) et est le moteur SCENIC d’origine ; GRNBoost2 utilise le gradient boosting et donne des réseaux très similaires bien plus vite, ce qui explique pourquoi pySCENIC l’adopte pour les grands jeux de données (Van de Sande et al., 2020). Pour une petite démonstration, GENIE3 convient ; pour des dizaines de milliers de cellules, préférez GRNBoost2.

La co-expression seule confond corrélation et régulation : deux gènes peuvent bouger ensemble à cause d’un pilote commun en amont, du cycle cellulaire, ou d’un effet de lot, sans que l’un contrôle l’autre. L’étape RcisTarget de SCENIC exige une preuve mécanistique — elle ne garde que les cibles portant le motif de liaison du TF près de leur promoteur — de sorte que chaque régulon est un ensemble de cibles directes, soutenues par la séquence, plutôt que de simples partenaires de co-expression (Aibar et al., 2017). Cet élagage est ce qui rend les régulons de SCENIC dignes de confiance, et c’est pourquoi les bases de données de motifs sont requises.

C’est le même outil qui fait le même travail — noter chaque cellule pour un ensemble de gènes en classant ses gènes et en prenant l’aire sous la courbe de recouvrement. La seule différence est quel ensemble de gènes il note : dans la notation de signatures vous fournissez une liste choisie ; dans SCENIC les ensembles de gènes sont les régulons que SCENIC vient d’apprendre et d’élaguer par motif. Une fois que vous avez des régulons, la notation par cellule est identique à la notation de signatures.

Testez votre compréhension

En utilisant ifnb_subset.rds, construisez le réseau de co-expression GENIE3 comme dans cette leçon (HVG + la liste de TF candidats, 400 cellules, set.seed(42)). À partir de la liste d’arêtes ordonnée, extrayez uniquement les arêtes dont le régulateur est SPI1 et regardez ses principales cibles. Sont-ce des gènes myéloïdes — le genre de programme que PU.1/SPI1 est connu pour piloter ?

Après lnk <- getLinkList(wm), sous-ensemblez avec lnk[lnk$regulatoryGene == "SPI1", ] et prenez head(...). La sortie de getLinkList vient déjà ordonnée par poids, donc les premières lignes sont les cibles les plus fortes de SPI1.

library(Seurat); library(GENIE3)
d   <- readRDS("_data/ifnb_subset.rds")
obj <- NormalizeData(CreateSeuratObject(counts = d$counts, meta.data = d$meta))
obj <- FindVariableFeatures(obj, nfeatures = 200)
hvg <- head(VariableFeatures(obj), 120)
tfs <- intersect(c("STAT1", "STAT2", "IRF1", "IRF7", "IRF9", "NFKB1",
                   "REL", "SPI1", "CEBPB", "FOS", "JUN", "EGR1"), rownames(obj))
set.seed(42)
cells <- sample(colnames(obj), 400)
expr  <- as.matrix(GetAssayData(obj, layer = "data")[union(hvg, tfs), cells])
set.seed(42)
wm  <- GENIE3(expr, regulators = tfs, nCores = 1)
lnk <- getLinkList(wm)

# SPI1's strongest learned targets
head(lnk[lnk$regulatoryGene == "SPI1", ])

Les principales cibles de SPI1 incluent EGR1, FTL et HLA-DRA — des gènes myéloïdes et de présentation d’antigène, exactement le genre de programme que pilote le facteur de transcription myéloïde maître PU.1/SPI1 — aux côtés de liens fondés sur les données plus bruités comme TRH qui ne sont pas des cibles canoniques de SPI1, un rappel que les arêtes de novo nécessitent une validation. GENIE3 a tout de même récupéré un programme SPI1 largement cohérent à partir de la seule co-expression, aux côtés du programme interféron (IRF7) — deux modules de régulation spécifiques au jeu de données, appris sans aucun réseau a priori.

A. Cela signifie qu’il a été expérimentalement montré que le promoteur d’ISG15 lie IRF7 dans ces cellules. B. Cela signifie que l’expression d’IRF7 prédit bien l’expression d’ISG15 à travers les cellules (un lien de co-expression) — une arête de régulation plausible que GENIE3 a apprise à partir des données, et rassurante parce qu’IRF7 est un régulateur de l’interféron et ISG15 un gène stimulé par l’interféron, de sorte que la biologie est exactement juste pour un jeu de données IFN-β. C. Cela signifie qu’ISG15 est un facteur de transcription qui régule IRF7.

B. Le poids d’arête de GENIE3 est un score de co-expression / d’importance prédictive : l’expression d’IRF7 est un bon prédicteur de celle d’ISG15 à travers les cellules, donc GENIE3 propose un lien de régulation. Ce n’est pas une preuve de liaison directe — c’est exactement ce qu’ajoute l’étape 2 de SCENIC (l’élagage par motif RcisTarget). L’arête est rassurante parce qu’IRF7 est un facteur de régulation de l’interféron maître et ISG15 un gène stimulé par l’interféron canonique, de sorte que récupérer ce lien à partir d’un jeu de données IFN-β montre que le réseau appris suit une biologie réelle. (A surestime — GENIE3 n’a aucune donnée de liaison ; C inverse les rôles — IRF7 est le TF, ISG15 la cible.)

Conclusion

SCENIC infère un réseau de régulation génique de novo à partir de vos propres données single-cell plutôt que de noter un réseau choisi. Ses trois étapes réduisent un signal large et bruité en régulons dignes de confiance : GENIE3 apprend un réseau de co-expression par importance de forêt aléatoire, RcisTarget l’élague en cibles soutenues par un motif, et AUCell note chaque cellule pour l’activité de chaque régulon. Ici, l’étape GENIE3 s’est exécutée de bout en bout et a récupéré une biologie cohérente à partir de la seule co-expression — l’arête interféron IRF7 → ISG15 et un programme myéloïde SPI1 — tandis que les étapes de motif et de notation, qui nécessitent les bases de données cisTarget, ont été montrées à titre illustratif ; en production, pySCENIC avec GRNBoost2 est le standard plus rapide et évolutif.

Ceci referme la boîte à outils de l’inférence fonctionnelle pour le RNA-seq single-cell. Vous disposez désormais de quatre façons complémentaires de demander ce que les cellules font : la notation de signatures géniques demande une cellule exprime-t-elle cet ensemble de gènes ? ; l’activité des voies demande une voie de signalisation est-elle active ? ; l’activité des TF fondée sur des priors demande quel régulateur choisi est actif ? ; et l’inférence de GRN fondée sur les données demande quel réseau de régulation ce jeu de données révèle-t-il de lui-même ? Choisi quand une ressource couvre votre biologie, fondé sur les données quand ce n’est pas le cas — ensemble ils vous mènent d’une liste de gènes à la logique de régulation de vos cellules.

Leçons associées

🟢 Avec un agent IA

Demandez à Prova « comment exécuter SCENIC sur mon propre objet Seurat — la co-expression GENIE3 sur mes HVG et TF candidats, puis l’élagage par motif et la notation AUCell — et en quoi cela diffère-t-il de noter les régulons DoRothEA ? » — elle répond avec du code R que vous pouvez exécuter sur vos propres données : cadrer la matrice d’expression, apprendre le réseau de co-expression, et mettre en place les étapes de motif et de notation. The runtime is the judge. Demander à Prova →

Cette page vous a-t-elle été utile ?

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN
Note

Cette leçon est reproductible : chaque figure et chaque nombre ont été produits par le code montré, exécuté de haut en bas dans l’image Docker datanovia/quarto-bioinformatics (GENIE3 1.30.0) — l’étape de co-expression GENIE3 s’exécute sur des données réelles, tandis que les blocs RcisTarget, AUCell et SCENIC complet sont marqués illustratifs parce qu’ils nécessitent les bases de données de motifs cisTarget téléchargées. Copiez les blocs exécutables et exécutez-les dans l’ordre pour reproduire les nombres. The runtime is the judge.

References

  • Aibar, S., González-Blas, C. B., Moerman, T., Huynh-Thu, V. A., Imrichova, H., Hulselmans, G., Rambow, F., Marine, J.-C., Geurts, P., Aerts, J., van den Oord, J., Atak, Z. K., Wouters, J., & Aerts, S. (2017). SCENIC: single-cell regulatory network inference and clustering. Nature Methods, 14(11), 1083–1086. https://doi.org/10.1038/nmeth.4463
  • Van de Sande, B., Flerin, C., Davie, K., De Waegeneer, M., Hulselmans, G., Aibar, S., Seurinck, R., Saelens, W., Cannoodt, R., Rouchon, Q., Verbeiren, T., De Maeyer, D., Reumers, J., Saeys, Y., & Aerts, S. (2020). A scalable SCENIC workflow for single-cell gene regulatory network analysis — introduit pySCENIC et GRNBoost2. Nature Protocols, 15(7), 2247–2276. https://doi.org/10.1038/s41596-020-0336-2
  • Huynh-Thu, V. A., Irrthum, A., Wehenkel, L., & Geurts, P. (2010). Inferring regulatory networks from expression data using tree-based methods — introduit GENIE3. PLoS ONE, 5(9), e12776. https://doi.org/10.1371/journal.pone.0012776
  • Kang, H. M., et al. (2018). Multiplexed droplet single-cell RNA-sequencing using natural genetic variation — la source du jeu de données PBMC stimulé à l’IFN-β. Nature Biotechnology, 36, 89–94. https://doi.org/10.1038/nbt.4042

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {Inférence de réseaux de régulation génique en R : GENIE3 \&
    SCENIC pour le RNA-seq single-cell},
  date = {2026-07-04},
  url = {https://www.datanovia.com/learn/bioinformatics/single-cell/scrnaseq-gene-regulatory-networks-scenic.html},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Inférence de réseaux de régulation génique en R : GENIE3 & SCENIC pour le RNA-seq single-cell.” 2026. July 4. https://www.datanovia.com/learn/bioinformatics/single-cell/scrnaseq-gene-regulatory-networks-scenic.html.