空间转录组聚类有一种看起来很合理的处理方式,让相邻捕获点彼此参考。可是一张切片里,“坐标上很近”与“组织上相连”并不总是一回事。薄切片的裂隙、相邻腺腔壁和并排的两层组织都可能使两侧点位只有很短的平面距离。对于 STAGATE,预先构建的空间邻接图决定哪些点有机会直接交换信息,后续图注意力会在已有邻接关系上学习权重。若图一开始就跨过不该相连的空隙,彩色分群的轮廓再平整,也不能证明选择的半径适合该区域。STAGATE 原始方法
把一条“边”还原成两枚点的条形码
用半径连接点位时,先核对坐标表达的单位。一个半径数字若用于微米坐标,和用于缩小四倍的组织图像像素,实际覆盖的组织范围会不同。数组的阵列行列也可能只表示捕获格点的索引,不能直接与显微图上的像素距离混用。先从几枚规则排布的组织内点测出最近邻距离,再读芯片平台的标称间距或图像缩放信息,才能为半径赋予合理的物理含义。若为跨样本分析统一数值,首先应统一距离单位,并检查点位密度是否相近。作者的空间图构建教程
其次要明确在数什么。图表若保留“甲到乙”和“乙到甲”,一对无向邻居会占两行。训练张量还可能自行加上连接本节点的自环。项目中说“有十二条跨界边”,应说明它来自原始空间边表还是进入训练的张量,是否将两个方向合并。平均邻居数也容易掩盖两类相反问题,一处稀疏区域有大量孤立点,另一处稠密区域却与很远的组织相连。可以分别打印零邻居点数、边长分位数和组织内外几组锚点的邻居清单,再做分布图。
| 检查对象 | 应保存什么 | 可以回答的问题 |
|---|---|---|
| 组织坐标中的候选边 | 来源、目标、距离及是否跨界 | 输入图有没有允许跨过空隙 |
| 学到的低维表示 | 每个条形码的向量及相似性 | 生物状态接近的点是否聚在一起 |
| 进一步得到的簇编号 | 分群算法、参数、切片和标记 | 空间域怎样命名,有无独立证据 |

实跑经验|十二条跨缝边没有变成十二个错分点
我们使用作者提供的 PyTorch Geometric 实现 STAGATE_pyG 1.0.0,在 CPU 上运行。环境中 PyTorch 为 2.5.1,PyTorch Geometric 为 2.4.0,并安装了匹配的稀疏运算扩展。输入为六行八列的四十八个点,各有二十四个基因。先让普通格点间距为一个单位,再将右半部整体向右移动零点四,使两侧最近的横向点相距一点四。用固定种子生成计数,两侧各四个基因倾向于高表达。这些已知侧别只用来评价输出,不作为模型的标签。本次所用的作者实现
固定归一化输入、训练种子、八十轮训练和三维嵌入,两次仅改变建图半径。半径为 1.01 时,空间边表有一百五十二条有向边,没有一条横跨缝隙。半径为 1.45 时,边表增到二百八十四条,其中十二条跨缝,相当于每行一对左右邻居,两个方向分别计数。新增边远多于十二条,因为在每一侧,以单位距离排布的格点之间还有长度约一点四一四的对角线。若把全部边数增加都归因为裂隙被跨越,就会把新增的同侧邻居也算错。
再看训练后的输出。两次低维矩阵都是四十八行三列,我们在嵌入空间为每个点找除自身之外的最近邻,记录这个邻居与其是否同侧。小半径时为四十二个,大半径时为四十三个。虽然输入图新增了十二条跨缝候选边,这个简单指标没有随之恶化。输入图有一条边,只意味着该关系被允许参与模型,无法直接推出两侧会合并为一个域。这次也没有给嵌入另加社区聚类,因此这两个数描述的是嵌入最近邻,不能标成空间域分类准确率。
# 空间边表来自 STAGATE_pyG.Cal_Spatial_Net,side 是以条形码为索引的侧别
edges = adata.uns["Spatial_Net"]
left = edges["Cell1"].map(side)
right = edges["Cell2"].map(side)
assert left.notna().all() and right.notna().all()
print(len(edges), int((left != right).sum()))
print(edges.loc[left != right, ["Cell1", "Cell2", "Distance"]].head())
把朝向相反的边去重,还能做一次便于人工复查的算术。给每条边的两个条形码按字典顺序排列,再用排列好的二元组去重。大半径图的十二条跨缝记录应能回到六对实体邻居,若远多于六对,要查是否存在重复坐标、多个样本共用了短条形码,或者坐标方向与标记的侧别不一致。实际数据里还可以绘制每对跨界点的表达差异,专门找最近却最不相似的一组。对这些点逐个看原始组织图,往往比平均检查几百条普通组织内部的边更能定位需要调整的距离尺度。
在真实片上怎样判断该保留哪一套图
可以先请实验同事从原图选一处明确的裂隙和一处真实连续的过渡带,分别作为两种对照。理想的邻接尺度要能连接过渡带两侧本来相邻的点,同时不会大面积跨越几何空白。对候选半径逐个记录实际加入的边,把新增边按同侧、跨裂隙或未判定着色叠回组织图。随后固定训练预算,比较边界附近哪些点的表示明显改变、哪些差异仍获得独立标记支持。如果更大的半径提高了全图一致性,却使目标小灶被周围组织吞没,应当把两者分别报告,并以研究问题决定取舍。
若一张片的不同区域密度相差很大,固定半径可能在稀疏处留下孤立点。固定邻居数的建图方式则可能让稀疏区连到物理距离很远的点。比较这两种方式时,把每个点跨越的真实距离一并列出,比只看邻居数是不是一样更有意义。还应保留训练前的图、训练后的低维向量以及读图时用的组织底图。后来若发现切片边界标错,可以根据相同条形码逐段追踪问题发生在建图、嵌入还是最后的命名环节。
多张切片或多组候选半径需要成批训练时,可以先确定跨界边和局部标记的复核方式,再统一保存每次输出。需要集中运行这些模型的团队可了解云生信的生物信息分析服务器。
