Mis a jour le 2026-10-31, 14:44

PyDESeq2

imports :
from pydeseq2.default_inference import DefaultInference
from pydeseq2.dds import DeseqDataSet
from pydeseq2.ds import DeseqStats
  
Principe :
  • on construit un objet DeseqDataSet avec les data, metadata et en indiquant le facteur qui détermine les groupes :
    inference = DefaultInference(n_cpus = 8)
    dds = DeseqDataSet(counts = dfCounts, metadata = dfMetadata, design = '~day',
      independent_filter = True, refit_cooks = True, inference = inference, quiet = True)
        
    dfCounts doit être de type sample x gènes et dfMetadata doit être de type sample x attribut, dont ici l'attribut day.
  • refit_cooks : enlève les outliers
  • independent filtering : on écarte a priori les gènes qui n'ont aucune chance de ressortir comme significatifs parce que les comptes sont trop faibles. Ca permet de diminuer le nombre de tests et donc d'avoir des p-values ajustées moins hautes
  • DeseqDataSet dérive en fait de AnnData.
  • en fait, pour construire un DeseqDataSet, on peut donner simplement un objet AnnData qui a ses groupes dans le dataframe .obs, plutôt que un dataframe de counts et un dataframe de metadata.
  • dds.deseq2() : calcule les facteurs de normalisation, fitte les dispersions et les log fold change.
  • ds = DeseqStats(dds, contrast = ['day', 'treated', 'ref'], alpha = 0.05, inference = inference, quiet = True) : day est le nom de la variable, ref est le niveau de référence, treated est le traitement.
  • ds.summary() : fait les calculs.
  • le résultat est dans le dataframe ds.results_df avec notamment les champs baseMean, log2FoldChange, pvalue, padj (baseMean est la valeur moyenne globale de tous les samples (traités et contrôle).
  • la p-value peut être NA quand il y a des outliers (du à cooks_filter = True, le défaut)
log fold change shrunken :
  • c'est un shrinkage bayésien appliqué au log fold change pour le rapprocher de 0 quand les comptes sont proches de 0 ou la variance est forte.
  • calcul des log fold change shrunken après ceux standard :
    dfResult = ds.results_df.copy()
    ds.lfc_shrink(coeff = 'group[T.treated]') # si la valeur de group pour le traité est treated.
    dfResult['log2FoldChangeShrunken'] = ds.results_df['log2FoldChange']
          

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert