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:
-
Compare terminal state fate probability between two conditions: For the well-known trajectory(like CD8
Tn -> Tem -> Tex
), I usedg.set_initial_states()
andg.set_terminal_states()
to assign initial(Tn) and terminal state(Tex) manually, and then I computed fate probabilities withg.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 onTex -> Tex
(average fate per cluster 0.07). And I think discrete annotation is not always possible to represent terminal state, soTex -> Tex
may make sense. I could recluster Tex at a higher resolution to getTex_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?
-
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 oncr.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.