1. 为什么我最终把手头的fMRI和PET数据交给JuSpace去做跨模态关联
先说一个我实际工作中反复遇到的窘境。手里有一张统计 parametric map——比如精神分裂症患者相对健康对照的灰质体积差异图,或者某个认知任务下全脑激活图。传统上我们的报告方式是"激活簇位于前扣带、脑岛……",然后讨论部分引几篇文献说"前人报道前扣带与多巴胺系统高度相关"。这种讨论其实相当模糊,因为它本质上是在做视觉层面的主观对齐,根本经不起定量推敲。另一个方向是拿AAL模板或Hammers模板把大脑切成若干ROI,在每个ROI里同时提取fMRI效应值和某些PET示踪剂的结合电位,然后做几十个点的相关分析。这种方法有一个非常现实的问题:ROI的数量直接决定了相关分析的自由度,而且ROI平均本身会抹掉脑回水平上的精细空间信息。
JuSpace(全称是"Spatial Correlation between Neurotransmitter Maps and Neuroimaging Data")解决的就是这个问题。它在这个领域里做了一件称得上"范式转换"的事:把"神经递质系统富集区域"明确定义为一张张存储在MNI空间里的三维分布图谱,然后将用户提供的目标脑图(激活图、差异图、连接图、形态学图都可以)与这些递质图谱在体素水平做空间相关,再用置换检验估算显著性。这样一来,"这个激活模式与多巴胺系统是否在空间上共定位"就从一句印象流表述,变成了一个带p值的定量结论。
需要说明的是,JuSpace不是用来做PET定量分析的,它本身并不重构PET数据,而是作为一个脑图与"已知递质分布先验图谱"之间建立统计关联的桥梁。这个定位使得它在没有任何新PET采集的情况下,就能让常规的fMRI或sMRI研究获得分子水平上的解释维度。对于没有核医学设施、拿不到PET数据的课题组,这套方案几乎是当前唯一低门槛的路径。
我觉得每一个准备挑战脑影像"分子解释"这个问题的人,都应该先把JuSpace的底层设计逻辑和统计框架看清楚。它不是一个"把数据丢进去就能自动出结论"的黑盒子,恰恰相反,它对输入图的空间基准、平滑程度、掩模范围都有要求。如果这些细节处理不好,算出来的相关性很可能只是平滑伪影造成的假象。
2. JuSpace背后那套"递质分布先验图谱"到底靠不靠谱,以及它包含哪些系统
2.1 图谱的出处与预处理过程
JuSpace目前封装的神经递质图谱,主要来源于一些公开的PET示踪剂成像研究,其中相当一部分数据是通过JuSpace作者所在团队与多个欧洲核医学中心合作获取的。博客里常有人问"这些图谱具体是哪来的",其实在JuSpace的README和原始论文里写得很清楚:所有PET图谱都做了MNI空间标准化,部分图谱经过部分容积效应校正(partial volume correction),并且以统一的体素分辨率存储。
这一点非常关键。PET原始图像的空间分辨率通常只有3-6mm,而且受头动、示踪剂非特异性结合、部分容积效应影响很大。JuSpace作者团队把不同来源、不同示踪剂、不同扫描仪的数据统一重新处理到MNI空间,用一套相对固定的流程(空间归一化、平滑、mask约束)来降低数据之间的异质性。据我所知,不同递质图谱之间的平滑核并不完全一致,有些图谱源自原始分辨率较高的研究,有些则经过了额外平滑以匹配群体模板。这种不一致在实际使用中直接表现为:个别递质图谱参与相关分析时更容易得到显著结果,这不是因为生物学效应更强,而是因为空间平滑度不同导致统计功效不同。后面我在踩坑章节会专门展开这个问题。
2.2 目前内置的递质系统一览
JuSpace v1.x版本内置了多个神经递质系统图谱,覆盖了精神科和神经科研究里最常被追问的那些系统。我建议初次使用者先在自己的电脑上打开JuSpace_Distribution_Map.m或者在MATLAB路径里翻一下/Maps目录,把图谱文件名完整看一遍,因为不同版本里图谱数量略有增减。截至我目前常用的版本,主要包含:
- 血清素系统:5-HT1A受体、5-HT1B受体、5-HT2A受体、5-HT4受体、血清素转运体(SERT)
- 多巴胺系统:D1受体、D2受体、多巴胺转运体(DAT)、多巴胺合成相关图谱(如F-DOPA)
- 乙酰胆碱系统:毒蕈碱型受体(M1)、烟碱型受体(α4β2*,通常用F-A-85380或2-FA示踪)、乙酰胆碱转运体(VAChT)
- 去甲肾上腺素系统:去甲肾上腺素转运体(NET)
- 氨基酸递质系统:GABA-A受体/苯二氮卓位点(如在癫痫研究中常用的FMZ),代谢型谷氨酸受体mGluR5
- 其他:大麻素CB1受体等
有趣的是,你仔细观察这套清单就会发现,它恰恰对应了精神药理学中最主要的药物靶点家族。精神分裂症的D2/5-HT2A假说、抑郁症的5-HT转运体/SERT假说、焦虑障碍的GABA-A/5-HT1A假说、阿尔茨海默病的胆碱能假说、成瘾的多巴胺/大麻素系统假说——JuSpace可以说是一站式把这几个最受瞩目的靶点全部摆在用户面前。
表格大概长这样:
| 系统 | 代表性图谱 | 常见示踪剂 | 相关疾病/药物领域 |
|---|---|---|---|
| 多巴胺 | D1、D2、DAT、F-DOPA | [11C]SCH23390、[11C]raclopride、[11C]PE2I | 精神分裂症、帕金森、成瘾 |
| 血清素 | 5-HT1A、5-HT1B、5-HT2A、5-HT4、SERT | [11C]WAY100635、[18F]altanserin、[11C]DASB | 抑郁症、焦虑障碍、自杀行为 |
| 乙酰胆碱 | VAChT、M1、α4β2* | [18F]FEOBV、[11C]P943 | 阿尔茨海默病、路易体痴呆 |
| 去甲肾上腺素 | NET | [11C]MRB | 抑郁症、ADHD |
| GABA/谷氨酸 | GABA-A/BZ(FMZ)、mGluR5 | [11C]flumazenil、[11C]ABP688 | 癫痫、焦虑、双相、精神分裂症 |
| 大麻素 | CB1 | [11C]OMAR、[18F]FMPEP-d2 | 奖赏、食欲、应激相关疾病 |
2.3 分辨率和坐标空间
所有图谱都是3D NIfTI文件,一般位于3mm或2mm的MNI152空间。在做相关分析前,JuSpace内部会把你传入的目标图也重采样到与图谱一致的空间网格上。这个机制看起来是"自动处理",但我的经验是——最好不要完全依赖它的自动重采样。如果输入图的分辨率是1mm的T1像衍生图,重采样到3mm网格后,精细边缘信息会被抹掉;反过来,如果输入图是8mm平滑后的SPM激活图,问题不大,因为平滑后低频空间信息占主导。比较稳妥的做法是:在SPM12的Coregister里面先把目标图与某一标准模板重采样到2mm或3mm,然后检查一下重采样结果与图谱的边缘对齐情况,再交给JuSpace做正式分析。
这个细节在英文论坛里经常被提及,国内分享相对少。很多初学用户报错"image dimension mismatch"之后,简单地把所有图像reslice成同样分辨率就重新跑,其实并没有意识到:reslice过程中插值方法的选择(三线性还是最近邻)以及是否先做mask约束,会直接影响最终空间相关值。对脑内比较光滑的图,三线性插值问题不大;对非常稀疏的图,最近邻插值能避免边缘扩散带来的假相关。
3. 从NIfTI文件到第一张相关表:JuSpace的运行流程与参数取舍
3.1 输入File Folder的组织方式
JuSpace在Github上以MATLAB工具包的形式发布,目前没有打包成独立的APP,也没有Python版本(社区有一些非官方的封装,但我不建议初学者直接使用,验证程度参差不齐)。把工具包解压到磁盘上,然后在MATLAB里addpath(genpath('/yourpath/JuSpace/')),就可以开始用了。
官方Demo运行的是一个交互式GUI:在MATLAB命令行输入JuSpace会弹出主界面,左侧选择图谱类型(Neuromaps / JuSpace Legacy)、目标统计图、协变量图(covariates,可以是年龄、性别编码图等),右侧勾选需要的递质图谱、设置相关方法和置换次数。如果你要批量处理大量受试者或多种疾病组对比图,界面操作会非常低效,更推荐直接用命令行函数调用:
% 其中spm_pet_map是要做关联的统计图(NIfTI路径) % condition是可选协变量图,没有就填空数组 % outputdir是结果输出目录 [results] = JuSpace('map', 'spm_pet_map.nii', ... 'maps', {'5HT1A', 'D2', 'VAChT'}, ... 'covariates', [], ... 'outputdir', '/results/', ... 'n_perm', 1000);这段代码是我自己根据常用数据结构记忆写的,不同版本参数名可能微调,但基本思路一致。强烈建议先跑一遍官方自带的sample数据,确认环境、路径、输出目录权限都没问题,再开始处理自己的真实数据。
3.2 相关方法选Pearson还是Spearman
JuSpace提供了Pearson相关和Spearman相关两种空间相关算法。它们之间的差异其实不算大,但有一点必须提前想清楚:如果你预期自己的效应图与递质图谱之间存在单调但非线性的关系,Spearman更稳健;如果效应图数值分布本身就接近正态且光滑,Pearson统计功效更高。我的个人习惯是:只要不是极端离群值很明显,主分析用Pearson,敏感性分析里把Spearman也跑一遍。如果两种方法结论一致,报告里写起来就很硬气;如果不一致,那通常说明相关关系主要由少数体素驱动,需要具体看散点图。
3.3 吻侧-尾侧分割选项的意义
JuSpace界面上有一个容易被忽略但很重要的设置:是否将纹状体分割为吻侧(rostral)/尾侧(caudal)亚区。为什么要单独提这个?因为在多巴胺系统研究里,纹状体并不是一个功能均质的整体。腹侧纹状体(包括伏隔核)与奖赏、动机关系更密切,尾状核参与认知控制,壳核更多涉及运动功能。尾侧纹状体的D2受体密度和背侧感觉运动环路的联系紧密,吻侧则更多与边缘-前额叶环路交互。如果不做分割,直接将全纹状体的D2图谱与某个认知任务激活图做相关,很可能会因为内部亚区方向的信号互相抵消而得到不显著结果。
这个选项本质上是在"区域特异性"和"统计功效"之间做一个折中。分割后每个亚区的体素数量下降,相关分析的稳定性会略降,但如果生物学信号确实集中在某个亚区,收益远大于代价。我见过一篇关于强迫症的研究,把全纹状体D2相关做成阴性结果,后来用吻侧/尾侧分割重新分析发现是吻侧亚区显著,这算是个值得注意的教训。
3.4 掩模和协变量处理
再强调一次掩模问题。许多用户从SPM输出中直接拿到的统计图,往往带有全脑灰质mask或白质限制。理论上传给JuSpace的图应该是"全脑范围内每个体素都有明确数值"的图,而不是大部分体素被NaN或0占满的稀疏图。原因在于空间相关计算把所有体素都当作观测单位,如果目标图里非脑区域的数值是0,而递质图谱里对应区域是非0(少数图谱的边缘mask不够精细),就会人为制造出一批包含大量零点的点簇,把相关值推向虚假的显著。
协变量图(Covariates)则对应偏相关分析。比如你想排除灰质体积对相关结果的混淆,可以在生成协变量图时使用VBM得到的调制后灰质密度图。JuSpace会在偏相关框架下把灰质密度的空间变异作为控制变量,然后计算目标图与递质图谱的偏相关系数。这个功能在比较两个年龄跨度大的组别时几乎必备,因为灰质萎缩本身与递质密度下降高度相关,不控制的话说不清楚关联是来自递质系统还是脑结构。
4. 空间相关的显著性问题:为什么不能把体素当独立样本,以及Spin Test在这里的作用
4.1 空间自相关带来的自由度膨胀
如果在做空间相关时直接把所有体素作为独立样本代入Pearson相关公式,自由度会是几千甚至上万,那么几乎任何微弱的空间共定位都会因为样本量巨大而变得"高度显著"。这明显是错的,因为相邻体素的值绝对不是独立的——空间平滑、局部解剖一致性、数据插值都让相邻体素共享了大量信息。
JuSpace提供的解决办法是基于置换检验的Null分布。具体来说,它会在保持目标图空间结构不变的情况下,对递质图谱或对目标图进行某种形式的空间重排,重复数千次后得到相关系数的零分布,然后考察真实相关系数落在零分布的哪个位置,从而得到经验p值。这个过程绕开了参数检验对独立性的要求,在思想上与permutation test一致。
4.2 Spin Test:在大球面上"旋转"数据的思路
JuSpace的置换策略里一个重要的实现是Spin Test。这个思路最早来自脑连接领域,Alexander-Bloch等人提出用球谐函数旋转皮层表面的脑图,保持图谱自身的空间平滑结构,只打破图谱与空间位置的对应关系。你可以想象一个地球仪:你在球面上画了一套大陆海岸线的图案,现在把这个图案整体绕球心旋转一个随机角度,如果不看经纬度标签,图案内部的相对结构一点都没变,但它相对于球面上某个固定坐标(比如某个脑区)的对应关系已经被完全打乱了。
把这个操作应用到脑图谱上,就相当于生成一个"空间结构相同、但与解剖位置不对应"的零分布样本。每一次旋转都会重新计算一次目标图与该旋转后递质图谱的空间相关,几千次旋转得到的就是一个"纯空间结构驱动"的零分布。JuSpace对皮层表面数据以及涉及皮层区域的图建议使用这种策略,因为它能最大程度地保留空间自相关的程度。
4.3 多重比较校正:当你同时检验20个递质图谱时
另一个容易被忽视的点是多重比较。JuSpace默认按照用户选择的递质图谱数量计算相关,每个图谱都会得到一个相关值和p值。如果一次性选了20个图谱,按0.05的阈值,会期望有1个假阳性。这时候建议对p值做多重比较校正。常见的做法是FDR(Benjamini-Hochberg)校正——不需要编程,把p值列表粘贴到R或者Python的statsmodels里就能做:
from statsmodels.stats.multitest import multipletests pvals = [0.001, 0.02, 0.03, 0.11, 0.20, 0.35] fdr_p = multipletests(pvals, method='fdr_bh')[1] print(fdr_p)更严格的做法是对所有图谱同时做置换检验,然后用置换的极大值分布做校正,即max-stat permutation。它可以控制family-wise error rate,代价是计算量大得多。在论文里我一般建议至少汇报FDR校正后的结果,因为这已经是当前领域的惯例。
4.4 效应量比p值更值得关注
我在实际审稿过程中发现,很多人过分看重p值,反而忽略了一个更重要的指标:相关效应量。JuSpace输出结果里的r值通常在0到0.5这个区间浮动,0.2左右就属于比较稳定的空间共定位了。看单张图和单张图谱的相关时,r=0.3在几千个置换后p<0.001,这是很亮眼的结果;但在同一批分析里同时出现10个图谱、只有1个r=0.3,其余都是0.05,这时候就算FDR后仍然显著,也要警惕是不是20种图谱中恰好有一个因为平滑参数或来源差异碰上了。稳健的做法是把所有结果整理成表格,按效应量排序,看显著结果是否在生物学上构成一组有意义的系统,而不是孤立的一条。
5. 用JuSpace能讲出什么新故事:三类最常见的研究设计
5.1 第一类:疾病组间差异图的分子解读
这是JuSpace用得最多的一类设计。研究者在独立样本中计算患者组减去对照组的脑影像差异图(如灰质体积、功能连接强度、低频振幅等),然后把差异图喂给JuSpace,看它是否在空间上与某种神经递质系统的分布重叠。
举例来说,一项关于精神分裂症的研究可能先得到患者相比对照在额叶-颞叶网络内部功能连接降低的差异图,JuSpace分析显示该差异图与D2受体分布的空间相关显著(r=0.28, p_spin=0.004)。这就为"精神分裂症的功能连接改变与多巴胺系统拓扑结构相关"提供了一个定量证据链。要注意的是,这个分析里的"相关"指空间共定位,不代表个体水平的剂量-效应关系,更不代表因果关系。论文里必须把这个边界讲清楚。
这种研究设计我个人的体会是它非常适合用来做"机制假说生成"。它无法替代真正的PET上市后研究,但能在大规模公开数据集(如UK Biobank、ADNI、HCP)里先打出候选信号,为后续申请PET课题提供前期数据。
5.2 第二类:个体差异图与递质系统的关联
如果你想研究"某认知维度的个体差异与多巴胺系统的关系",可以先把每个受试者的影像数据回归到行为指标上,得到一张与行为相关的统计图(比如工作记忆容量的全脑相关图),再做JuSpace分析。HCP数据集的很多工作就是这个套路。
这类设计里我特别强调要注意行为变量的分布:如果存在离群受试者,回归系数会被少数人主导,全脑相关图会变得不稳定,进而直接影响JuSpace的空间相关结果。建议先画散点图,确定没有极端值再进入正式分析;如果行为指标不是正态,最好做一次秩变换。
另外,这类设计天然地存在一个天坑:最终得到的个体差异图如果全脑只有两个很小的簇显著,JuSpace跑出来的空间相关其实对这个"稀疏度"非常敏感。稀疏示意图与平滑递质图谱之间的空间相关值会比较低,但置换检验仍然可能显著——这本身没错,只是报告时建议同时说明目标图中显著体素的比例,避免读者认为整个差异图都高度吻合多巴胺拓扑。
5.3 第三类:作为刺激靶点或手术靶点选择的辅助工具
JuSpace还有一类比较"出圈"的应用:用于神经调控靶点选择。rTMS、tDCS和DBS的靶点选择,传统上主要基于解剖坐标和经验证据。如果你有一个初步的目标坐标区域,可以把"该区域作为种子点的静息态功能连接图"或"该区域在任务态下的激活图"作为输入,然后交给JuSpace评估它与哪种递质系统在空间上重合度最高。这能为"为什么选择这个靶点"提供更多分子层面的解释,尤其适合需要在论文引言或讨论中说清楚靶点特异性的场景。
当然我不会建议任何临床医生只凭JuSpace的结果来决定手术靶点,但作为一个辅助验证工具,它的价值是实打实的。尤其当你想在多项候选靶点里做选择时,JuSpace能给出一个可量化的比较维度。
6. 我在用JuSpace时实实在在踩过的坑,以及绕坑建议
6.1 平滑核导致"伪显著":怎么判断相关结果到底是真实信号还是平滑假象
我先讲一个我自己的失败经历。某次我把一张6mm平滑的SPM脑激活图与5-HT2A图谱做空间相关,结果r高达0.6,p<0.001。当时我一度以为发现了一个非常强的血清素-任务激活共定位。后来我拿同一张图做了多次下采样和平滑处理后发现,只要目标图的空间平滑程度与递质图谱接近,相关值就会显著上升;把目标图平滑扩大到12mm后,r几乎不变。这让我意识到:空间相关的显著性,本质上一部分由两张图的低频空间结构是否相似决定,而平滑核正是塑造低频结构的关键因素。
为了避免这个问题,我现在的标准流程是:先对目标图做与递质图谱一致的平滑处理,然后同时跑"原始分辨率目标图"与"平滑后目标图"两组结果。如果两组的显著模式一致,那比较可信;如果只有平滑后显著,论文里必须如实报告并谨慎解释。
还有一个更隐秘的问题:如果你输入的"递质图谱"和"目标图"分别来自不同的模板空间或mask,边缘错位也会产生虚假相关。JuSpace官方提供的图谱mask是统一的,但用户自己的目标图mask往往来自SPM的灰质先验,边缘与图谱不一定吻合。运行前用spm_check_reg把所有图谱和目标图叠加起来,肉眼看一遍边缘对应情况,这30秒的花费远远少于出问题后排查的时间。
6.2 图谱之间的间接依赖
JuSpace里的递质图谱并非彼此独立,5-HT1A和5-HT1B虽然受体亚型不同,但表达区域有大面积重叠;GABA-A/BZ图谱与全脑灰质分布的相关系数可能非常高。因此当你发现目标图与5-HT1A显著相关,不要立刻说"目标图特异地与5-HT1A系统相关",因为没有控制其他图谱的共变。一个稳妥的做法是做偏相关:把灰质密度图或者全脑平均摄取图作为协变量纳入模型,看相关性是否稳定存在。如果加入灰质密度协变量后相关性跌到不显著,那说明驱动信号的其实是"目标图与灰质分布的关系",不是递质特异性。
6.3 统计结论的外推边界
JuSpace结果能告诉我们的是:"在MNI空间里,某张效应图与某种递质受体分布的空间共定位程度"。它不告诉我们:某个受试者个体身上,这个效应是否与受体密度变化相关;也不告诉我们:药物干预这块脑区就一定会改变这条通路。生态学谬误是这类空间相关分析最容易犯的解读错误——群体水平的空间相关不能直接映射到个体水平的机制推断。写论文时一定要用"spatially associated"而不是"causally linked"这类表述。
6.4 版本与运行时环境的建议
JuSpace是在MATLAB中运行的,对版本有一系列要求(官方README有写明),需要SPM12在路径上。我建议在Linux服务器上跑,因为置换检验对CPU核数有较高需求,JuSpace使用的是MATLAB Parallel Computing Toolbox的parfor。记得在调用前parpool开好工作池,不然默认单线程跑1000次置换可能要几小时。另一点是内存:如果你的目标图是1mm分辨率的大矩阵,图谱重采样到相同网格后会消耗大量RAM。我一般统一重采样到2mm网格,这既能跑得动,又不会明显丢失空间信息。
6.5 输出结果的归档
JuSpace会生成一系列输出文件,包括每个图谱的相关系数、p值、置换分布图等。我建议每次运行后把如下信息记录在分析日志里:JuSpace版本号、所有输入图的具体路径和分辨率、重采样插值方法、平滑核大小、置换次数和相关方法、是否使用了协变量图、FDR校正版本。这样做的原因很实际——你半年后回来复现分析时,如果没有这批元信息,几乎不可能精确复现当时的参数组合。学术写作中把附录里的分析参数写清楚,对审稿人来说也是一个极大的加分项。
写在最后的一点体会
做完几个项目之后,我对JuSpace的定位有了更清晰的认识:它不会直接证明某种递质系统"导致了"某群患者的影像异常,但它能把"这个影像异常在空间上更像哪种递质分布"这个问题变成可检验的定量结果,而且这个结果可以放进一篇论文的机制讨论里,作为从宏观影像向分子层面延伸的重要佐证。对我个人来说,最有价值的是它逼着我把"空间共定位"和"分子机制"两件事在写作上严格分界,防止过度推断。如果你也正在处理一批积累了许久的脑图数据,建议花一个下午把Demo跑通,然后拿你自己的一张效应图做一次探索性分析——我猜你也会对这个工具能提供的解释力度感到意外。