空间平台只测了部分基因,单细胞参考却测到了更多。把参考映射到空间,再画一个面板中原本没有的基因,能得到一张有纹理的组织图。问题在于,图上的明暗来自模型投影,无法直接对照这个未测基因。一个可以立即动手的检验是,从两种平台都测到的基因中先扣下一个,训练结束后再问模型能否推回它在切片上的位置。本文用一个能反转答案的小实验,说明怎样区分训练拟合、预测的空间顺序和表达值本身。
先读懂细胞乘点位的映射矩阵
Tangram 的细胞级模式通常输出一个细胞乘空间点位的矩阵。固定一枚参考细胞、沿着一行读,得到这枚细胞被分配到各位置的相对权重。固定一个位置、沿一列读,则是在看多少参考细胞的权重聚到这里。前者通常按行归一,后者没有理由恰好等于一。把矩阵转置后逐行取最大值,回答的是哪个参考细胞最偏向该位置。对每个细胞寻找自己最可能的位置,则要沿着原矩阵的另一条轴取最大值。保存结果前,至少把一个参考条形码和一个空间条形码打印出来,验证自己取的是哪一侧。Tangram 作者对映射矩阵与基因投影的说明
设两个参考细胞,甲对三个位置的分配为六成、三成和一成,乙为一成、两成和七成。甲的某未测基因表达量为十,乙为零。投影后,三个位置从甲得到六、三、一的贡献,从乙得到的都是零。如果乙的表达也为十,三个位置的总贡献就应是七、五、八。这个次序恰与各列收到的总权重有关,说明即便所有细胞等表达,一个位置的投影总量也可能因接收了更多权重而较高。讨论“哪个位置每个细胞表达更强”时,必须把位置总贡献、局部细胞密度和细胞组成分开。
| 查哪一项 | 固定什么 | 可以回答 |
|---|---|---|
| 映射矩阵的一行 | 同一枚参考细胞 | 权重在多少个空间位置之间分散 |
| 映射矩阵的一列 | 同一个实测空间位置 | 哪些参考细胞或类型主要贡献到这里 |
| 投影表达与空间实测的相关性 | 一个明确从训练中留出的基因 | 空间分布能否推回,绝对表达尺度另查 |

怎样把一个共同基因真正留在训练之外
先统一物种、基因编号和命名大小写。作者的预处理可以统一基因名并写入两个对象的训练基因集合。若只从最后一张热图移除目标基因,它可能早已参与优化。可把所有拟用于拟合的共同基因显式列出来,移除验证基因,调用预处理后再读回双方实际存下的训练名单。还要核对留出的基因仍保留在两个表达对象中,否则既得不到参考侧的投影,也无法在空间侧作比较。作者的空间映射教程与基因预处理
import tangram as tg
train = ["a1", "a2", "b1", "b2"]
tg.pp_adatas(single, spatial, genes=train)
assert "held" not in single.uns["training_genes"]
assert "held" in single.var_names and "held" in spatial.var_names
mapping = tg.map_cells_to_space(single, spatial, mode="cells",
device="cpu", random_state=37,
num_epochs=140, density_prior="uniform")
prediction = tg.project_genes(mapping, single)
示例中的四个小写名字来自后面的模拟数据。换成实测样本后,不宜只扣下最容易预测、恰好有高度相关替身的基因。如果多个共享标记属于几乎同步的基因程序,留下其中一个证明模型能借助共表达关系推回它,这本身有价值,却无法回答一个独立程序也能否外推。可按细胞谱系、基因丰度及空间稀疏程度分别设置留出集。再单独考察不同切片或不同供体,这比在同一切片上反复更换随机种子更接近跨样本应用。
实跑经验|训练没变,留出基因的验证分数可以完全反转
我们安装 tangram-sc 1.0.4,在 CPU 上用二十个模拟参考细胞、六个空间位置训练一百四十轮。两种细胞各十枚,每种有不同的四基因训练特征。各空间点依次从甲类占多变为乙类占多,验证基因另有一条已知梯度。模型返回二十行、六列的映射矩阵,每行求和与一的最大偏差约为千万分之一点二。六列各自的总和约为 3.32 到 3.36。即使行归一做得完全正确,也不能把每一列直接标注成“细胞类型百分比”。
验证基因的空间实测从七逐步降到一,投影结果从约 22.99 降到 3.95。六个位置的 Spearman 秩相关是 1,原始数值却相差明显。接下来固定全部训练输入和已学好的映射,只把拿来验收的六个空间实测值倒序,相关立即变成 −1。这个负对照刻意制造了训练输入无法发现的错误。它提醒我们,优化时训练基因高度相似,并不能替一枚未训练基因提供证据。实测图和投影图应该各自标明单位,比较空间次序时可另画同一规则计算的秩或标准化结果。
软件组合也影响复现。最初环境的 pandas 3.1.1 在将带条形码索引的密度列交给张量计算时发生类型错误。在该小例中使用 pandas 2.2.3 与 AnnData 0.12.19 后,保留相同条形码和均匀的密度假设便可完成训练。遇到类似情况,先检查空间密度向量是否按点位名对齐,仅把所有索引换成整数有可能掩盖错位。示例有意让两种细胞表达清楚分离,空间位置也很少,这里的满分不能作为真实组织的精度估计。
投影图交出去之前还可以检查什么
把某一类的所有映射权重加到每个空间位置后,先和已知组织区及实测标记对照。如果相邻多种类型长期共表达,某些细胞的整行权重可能散布在很多相似点位,把最大值涂成唯一位置会隐藏这种不确定性。可以同时列出第一、第二候选位置及其权重差,再检查是否大量位置都可以近乎等价地替代。对于来自不同人体标本的参考和切片,更适合讨论某类表达特征偏向哪片组织,单个细胞被精确复原到某个坐标的说法需要额外的可追踪证据。
将来若要加进一个面板没有测的候选基因,先保存若干个相似丰度和稀疏程度的已测基因的留出表现,再决定哪些图值得用原位探针验证。需要在多张切片、多个参考版本上反复训练并保存映射时,可了解云生信的生物信息分析服务器。
