quadbio / Pando

Multiome GRN inference.

Home Page:https://quadbio.github.io/Pando/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Module activity between branches (and over pseudotime)

anderswe opened this issue · comments

Hello,

Super grateful for your work and for sharing Pando with us.

Would you be willing to share code (or provide some pointers/links, in addition to the language included in your paper's Methods) about assessing branch-specific module activity / module activity over pseudotime, as in your paper Figure 2?

Screen Shot 2022-11-11 at 3 27 04 PM

Thank you!

commented

Hi @anderswe, to compute the module activity, you can get the TF modules you can run find_modules() after you have inferred the GRN. Then your object should contain a modules object which you can access with NetworkModules(). In there you should find a list containing the peak/gene modules for each TF. With these gene sets you can then compute a module activity, e.g. by using the Seurat function AddModuleScore().
To obtain the branch-specific GRNs, we first performed a differential accessibility analysis and then filtered the GRN graph you get from Rando to only retain edges that were enriched in the branch, but one could also simply filter by some detection cutoff. I might also implement functions for this into Pando in the future. I hope this helps :)
If you tell me which exact analysis you wish to replicate I can also point you to the code of course.

Hi @joschif, thanks for your quick and helpful reply!

The exact analyses I'd wish to replicate are:

  1. generating the TF activity scores in 2g
  2. colouring nodes by pseudotime in 2c (and sizing by PageRank centrality)
  3. inferring target specificity for branch-specific TFs, as in 2e

I would be very grateful if you could point me to the code for these, thank you!

commented

Most of the figure has been generated by this script. However some aspects of the analyses you are interested in were computed prior to this.

  1. The calculation of TF activity scores can be found tarting at line 1448. Here we simply computed the product of the mean TF expression in the branch and the model coefficient from Pando.

  2. The gene pseudotime values were computed prior to this, but it's essentially expression-weighted pseudotime of the TF computed with this code chunk:

weighted_mean_pt <- apply(expr_mat, 1, function(x){
    non0 <- which(x!=0)
    wex <- weighted.mean(pseudotime[non0], x[non0])
    return(wex)
})
  1. Here we partitioned the GRN into branch-specific networks by only considering regulatory regions enriched in that branch. This analysis was unfortunately not done by me, but you can achieve this by performing differential accessibility between cell types and then filtering the GRN graph from Pando (NetworkGraph()) to only retain edges with celltype-enriched regions. In the resulting cell type-specific GRNs you can then simply count the number of targets for each TF.

I hope this is somewhat helpful to you :)

Cheers,
Jonas

Super helpful! Thank you!!

Hi @joschif

I have a question, how do I annotate GRN? Like Figure 2d.

commented

@Ping-lin14 We looked at module activity in different stages and branches to roughly annotate the TFs