给一群祖细胞画命运图,颜色显示某个细胞走向乙谱系的概率是百分之七十。能否据此说,把这枚细胞养起来,十次有七次会得到乙?要回答这句话,得先把分母弄清楚。CellRank 描述的是从给定细胞出发,沿模型允许的转移,最终进入指定终末状态的概率。它能用来发现哪些早期细胞可能偏向哪个方向。实验中实际有多少后代走上这条路,还受生长、死亡、取样和模型没有纳入的状态影响。
给出一步能去哪里,然后再问终点
分析从细胞之间的转移矩阵开始。对某个细胞看它对应的一行,每一列是下一步走向某个邻居的概率。如果这一行正规化后的值是零点六和零点四,那么从此处走的第一步有两个去向。它们指向的都是局部邻居,距成熟细胞可能还隔着好几个状态。某个成熟终点不在这个细胞的近邻中,它最终通向该终点的概率仍然可能很大。
哪些方向允许走,取决于构建转移矩阵时用了什么信息。RNA 速度可以为邻居间的转移提供方向,已有的拟时序也可以用来增加顺序一致的移动,按实验时间测得的数据还有相应的时间建模方法。单纯的表达相似只描述细胞彼此接近,方向依据要能向实验人员交代。一个由假定起点产生的拟时序若被当作输入,最后的方向仍然继承了那个起点的假设。CellRank 的转移核与估计器
用五个状态算一次吸收概率
考虑一个可以手算的分支。起点先以零点六到达中间状态甲,以零点四到达中间状态乙。到甲后,去红端点和蓝端点的机会各一半。到乙后,只会去蓝端点。红、蓝两端在这个小模型中都是吸收端点,到达之后会留在那里。现在可以把从起点通向同一颜色的不同路径分别相乘,再相加。
| 从起点出发的路径 | 各步概率相乘 | 归入哪个终点 |
|---|---|---|
| 起点 → 甲 → 红 | 0.6 × 0.5 = 0.30 | 红 |
| 起点 → 甲 → 蓝 | 0.6 × 0.5 = 0.30 | 蓝 |
| 起点 → 乙 → 蓝 | 0.4 × 1 = 0.40 | 蓝 |

通向蓝色的两条路径合计零点七。虽然第一步去乙的概率只有零点四,最后去蓝的概率却更高,因为走到甲以后还有机会转向蓝。这也是为什么不能把一张相邻细胞的连线图,或者某一跳的权重,直接当成最终命运图。有回路时可走路径很多,CellRank 用吸收概率的数值求解来处理,无需真的把每条路径都枚举出来。命运概率的官方示例
下面的纯 Python 例子对应上表。改动中间状态甲的两项权重并保持它们相加为一,就能检查上游细胞的命运偏向怎样改变。这里的状态和数字均为演算构造,不能视为任何一类器官的实测分化概率。
first = {"A": 0.6, "B": 0.4}
ends = {"A": {"red": 0.5, "blue": 0.5},
"B": {"red": 0.0, "blue": 1.0}}
fate = {end: sum(p * ends[mid][end] for mid, p in first.items())
for end in ("red", "blue")}
print({end: round(p, 2) for end, p in fate.items()})
实跑经验|让同一张转移图只改一条分支
我们安装 CellRank 2.4.0 和 pygpcca 1.1.0,按表中数值建立五行五列的转移矩阵,单独标出红、蓝两个吸收端,通过预计算核和命运概率求解接口复算。起点到红端为 0.30,到蓝端为 0.70。第二次只把中间状态甲到红端的概率从 0.50 改为 0.80,并将它到蓝端的概率相应降至 0.20。起点到红端变成 0.48,到蓝端变成 0.52。起点的变化是 0.18,等于走到甲的 0.60 乘以甲处分支概率的改变 0.30。没有经过甲的路径仍然存在,因此改动下游不一定让所有上游细胞同幅变化。
还有一个实际读表细节。虽然输入时先列红色再列蓝色,返回对象的列序却是蓝、红,两次结果均如此。若把第一列按输入顺序手工命名为红,初次计算就会把七成错写成三成。我们按终点名称取列,并核查红端细胞自身的红端概率为一、蓝端为零,才将数字写进表内。这个例子实跑了给定矩阵的命运概率求解,真实组织的转移图和终末细胞需要另外确定。
给终末状态找依据,也看缺席的终点
先在成熟标记、取材时间、供体分布等几项信息上核查候选终末群体。一个孤立小群在图中很稳定,并不自动意味着它是正常发育的终点。如果里面多数条形码都来自同一技术批,且应激或低质量特征异常,优先检查它为什么与其他细胞相隔。相反,一条已知稀有谱系即使在自动识别时没有形成稳定的大群,也值得回到实验记录,看应当补充样本,还是有条件将它作为待验证的终点重新估计。
有一个简单的终点敏感性练习。先想象把红端和蓝端合并为一个“成熟”大类,这个模型里的所有可达细胞最终成熟的概率便都为一,但原来重要的分支偏好已经无法区分。如果一个真实可能的末端根本没有取到,程序给现有类别算出的相对偏向,同样不能告诉你缺席那一类占多少。比较两个条件时,先列出双方都采到的终末状态以及各自独有的群,不要只看同名的那一列概率是否升高。
若自动识别把两个相近的成熟群合成一个末端,可以做一张重分配表。只改变终点划分,将同一枚祖细胞原来通往合并端的概率,与拆分后通往两个子端的概率之和并列。如果两者接近,较粗层面的谱系偏好较为稳定,细分终点之间的选择仍有不确定性。如果合计也变化很大,去看两端的代表细胞是否换了位置、原来可达的群是否出现新的死端。这个比较只有在固定了细胞集合、转移矩阵和计算方向时才有清楚的解释。
如何比较两组祖细胞
选定定义清楚的祖细胞亚群,在每一位供体内画出通往同一终末谱系的概率分布,同时给出细胞数和采样时间。假如治疗组大多采自较晚时间点,组间平均概率偏高可能只是在比较两个分化阶段。可以限制到共有时间窗,再查看每位供体的结果是否保持方向一致。组内存在两个相反的亚群时,一个平均值可能落在中间却代表不了任何一枚真正的细胞,保留分布很重要。
对接近五五分的细胞,不要只保存最大概率对应的标签。零点五一和零点九五都可能被涂成相同颜色,所代表的偏向却有很大差别。可以把最高概率与第二高概率之差也列出来,找出分支附近需要补采的区域,再检查这些位置是否原本就缺少邻居、剪接证据或取材重复。这个差值是对模型输出的描述,不能代替重复测量得到的不确定性。
用于筛选候选调控基因时,可以从与某个命运概率共同变化的基因出发,再检查它在分叉之前已有差别,还是只在终末细胞中充当成熟标记。后者可以清楚地标出终点,却未必能驱动选择。若有条件,可在较早取材时验证其表达并设计扰动,观察后代谱系比例是否相应改变。多供体图谱需要反复比较转移依据与终末状态时,可了解云生信的生物信息分析服务器。
