theislab/cellrank

Comparing conditions in cellrank

dyinboisry4u opened this issue · 2 comments

Hi, cellrank team, thanks for the great tool and tutorials, it helps me a lot.
On my case, I have 60 samples including 2 conditions(health and disease) and each condition has 2 time points(before and after treatment). I want to compare the lineage/trajectory of some cell types(CD8 and CD4 T cells) across treatments and conditions. Firstly, following suggestions on #957 (comment) and #801, I have computed a PseudotimeKernel for the integrated data of a specific cell type, and analyzed it jointly in one GPCCA estimator g to identify all macrostates. Then I want to compare conditions in two aspects:

  1. Compare terminal state fate probability between two conditions: For the well-known trajectory(like CD8 Tn -> Tem -> Tex), I used g.set_initial_states() and g.set_terminal_states() to assign initial(Tn) and terminal state(Tex) manually, and then I computed fate probabilities with g.compute_fate_probabilities() for all terminal state at single cell level. I want to know:

    i. I want to address If Tem may become a terminal state in some condition?, in this situation, could I include intermediate state(Tem) as terminal states? In other words, is it acceptable to set all subclusters as terminal state except convinced initial/root cluster and do downstream compare?

    ii. Is it reasonable to compare "self to self" fate probabilities(like Tex to Tex) with the premise of not change subcluster annotation?

    # compare Tex to Tex at single time point
    cr.pl.aggregate_fate_probabilities(adata[adata.obs.condition == 'health'], 
    mode="heatmap", cluster_key="sub_cluster",
    lineages=["Tex"], 
    clusters=["Tn", "Tem", "Tex"] # Tex to Tex 
    )
    cr.pl.aggregate_fate_probabilities(adata[adata.obs.condition == 'disease'], 
    mode="heatmap", cluster_key="sub_cluster",
    lineages=["Tex"], 
    clusters=["Tn", "Tem", "Tex"] # Tex to Tex 
    )
    

    I ask because I found only small differences between 2 conditions on the fate prob of Tem -> Tex(average fate per cluster 0.01) but large on Tex -> Tex(average fate per cluster 0.07). And I think discrete annotation is not always possible to represent terminal state, so Tex -> Tex may make sense. I could recluster Tex at a higher resolution to get Tex_sub1 -> Tex_sub2, but this may cause a large cell proportion difference across conditions. Which do you think the best choice is?

    iii. Could I compare lineage specific cell fate density distribution across conditions?

  2. Compare differentially expressed gene between two conditions along one lineage/trajectory:
    Like discussion here statOmics/tradeSeq#164, could I used the lineage specific cell fate probability(replaced pesudotime) with tradeseq to do downstream analysis? Or is there any better choice in cellrank framework, something like compare two condition on cr.pl.gene_trends?

Thanks!

Hi @dyinboisry4u, thanks for these interesting questions.
Re 1: it looks like you might have to compute terminal states separately across the two conditions to figure out whether a certain state might become a terminal state only in one condition. Alternatively, when using the combined data to compute terminal states, you could check whether that particular terminal state is dominated by cells from a single condition - that would be an indication that this state only exists in a given condition.
Re 2: There is an experimental interface between TradeSeq and CellRank 2, see https://github.com/WeilerP/tradeSeq-py. @WeilerP designed this and will know best how it can be used.

I assume that this issue is solved for now, feel free to reopen @dyinboisry4u if follow up questions arise.