做脑影像研究久了总会被一个问题卡住你手里有一张漂亮的激活图但在写讨论时却说不清这套激活模式到底对应什么神经化学过程。功能磁共振能定位“哪里活动”却回答不了“是哪种递质系统在参与”。脑影像分析软件JuSpace就是为解决这个难题出现的。第一次用的时候我也没想到这东西这么直接——把激活图和多巴胺、血清素这类神经递质受体/转运体的PET分布图放到同一个空间里做相关几分钟就出来一组结果。如果你是心理与脑科学、神经病学或精神科方向的研究生或博士后建议花点时间把这套工具吃透。这篇分享就把它拆开讲清楚从定位、配置到实操参数再到踩坑实录和结果报告。1. JuSpace是干什么的跨模态神经影像联姻1.1 功能定位把fMRI和PET放进同一把尺子JuSpace这个名称来自“多模态空间相关工具箱”核心功能说起来并不复杂把一种模态的图像最常见是fMRI的统计激活图和另一种模态的图像通常是PET测到的神经递质受体或转运体分布图在同一个标准空间里逐体素计算空间相关性。这里的核心前提是不同分子探针在脑中不是均匀分布的。比如多巴胺D2受体的PET模板在纹状体出现高信号血清素5-HT1A受体模板则在海马、杏仁核、中缝核区域富集。如果一份任务态fMRI激活图的high value体素恰好集中在D2受体富集区那么JuSpace会给出一个显著的正相关提示这套任务诱发的脑活动与多巴胺系统在空间上有重叠。换句话说它借用PET先验知识为fMRI结果提供“神经化学解释层”。在实际研究中这种跨模态整合常用于药物机制研究、临床症状与递质系统的关联、以及疾病特异性脑网络与受体分布的对应关系分析。JuSpace适合的群体很明确手里有标准空间的统计图想快速检验它与哪些递质系统相关的研究者。不需要自己收集PET数据工具箱内置了大量公开PET模板。它不追求构建复杂的生成模型而是提供一种轻量、直接、可复现的关联检验方案。这一点对很多没有PET数据、却想在神经化学层面解释fMRI结果的团队特别有价值。1.2 为什么是“空间相关”而不是ROI提值刚接触的人常问一个问题如果PET和fMRI要关联为什么不直接划定几个ROI把每个ROI的激活值和受体密度提出来做相关这当然是一种思路很多文献也在用但它有先天不足。ROI方法要求你在分析前就定义好区域一旦区域选得不准结果就非常依赖边界选取更关键的是它把“哪个体素高、哪个体素低”的空间拓扑信息丢掉了。两个完全不同的空间分布模式可能因为ROI均值接近而得到相同的相关值。而且同一套结果换一套ROI结论可能就变了这种主观性在审稿人那里很难解释。JuSpace采用的逐体素空间相关分析相当于把每张图看成“一个由数万个坐标点构成的向量”x坐标是体素在模板A里的取值y坐标是同一体素在模板B里的取值然后算它们的相关。这样做的好处是保留了全脑空间模式不需要主观定义ROI直接回答“两个空间分布是否相似”。代价是它对图像配准质量非常敏感如果两张图在空间上没有严格对齐相关值会被严重拉低甚至出现虚假结果。这也是后面我要强调空间标准化和mask一致性的原因。1.3 与基于体素的回归建模有什么不同有人可能进一步问那为什么不做一个全脑逐体素的回归把fMRI激活值作为因变量、多张PET模板作为自变量看看哪个递质系统能独立解释激活这个想法听起来更“高级”但在实操中问题很多。PET模板之间本身存在空间共线性比如多巴胺D1和D2在很多皮层区域分布相似放进同一回归模型会出现严重的多重共线性导致回归系数极不稳定。而且普通回归模型假设体素之间独立这个假设在脑影像数据里基本是错的直接回归很容易得到伪显著的系数。JuSpace选择的是一条保守但稳健的路线一次检验一对空间分布用置换检验控制空间自相关再用FDR处理多重比较。它不回答“哪个递质系统独立贡献最大”而是回答“哪一个递质系统的空间分布与我的激活图显著相关”。对探索性研究而言这种提法不仅更符合问题本身也更容易做严谨的统计推断。代价是遇到多个递质系统都显著时你无法直接判定它们之间的相对权重需要靠先验假设或额外的验证设计来补充。理解了这一点你就知道JuSpace的位置它是一座连接fMRI和分子神经科学的桥不必什么都往里面塞。2. 环境准备与安装配置严格不等于难2.1 依赖环境与版本选择JuSpace是MATLAB工具箱不是Python包。这一点要先想清楚。运行环境需要MATLAB R2016b及以上版本我实测过R2018b、R2020a、R2021b都没有问题R2022之后的版本也正常并且依赖SPM12和MATLAB的Image Processing Toolbox、Statistics and Machine Learning Toolbox。缺少任何一个组件启动阶段就会报错。版本选择上建议直接去官方GitHub仓库下载最新release版本不要用网盘里流传的旧版。早期版本有的默认参数不太合理置换检验的默认次数也偏低新版在这些地方都做了修正。下载下来是一个压缩包解压后命名为JuSpace_master路径里最好不要有空格和中文否则SPM在读取某些图像文件时会莫名其妙地报路径错误。这一点对Windows用户尤其重要我见过不止一次因为用户名是中文导致工具箱找不到spm函数的情况。2.2 安装与路径设置安装并不复杂本质上是把JuSpace和SPM12的路径加进MATLAB。我自己习惯写一个启动脚本一劳永逸。% JuSpace 使用前路径设置示例 addpath(genpath(/your_path/spm12)); addpath(genpath(/your_path/JuSpace_master)); spm(defaults, FMRI); jsp_start % 打开JuSpace主界面不同版本入口略有差异需要注意spm(defaults, FMRI)这行不是可选项。不指定默认值SPM的很多子函数在后续调用时容易弹出交互式窗口或者直接报错。jsp_start是JuSpace的主界面入口但不同版本入口函数名可能不同比如有的版本用JuSpace有的版本写成jsp_start。稳妥的办法是解压后先看README确认入口函数名这比盲猜快得多。还有一个小细节MATLAB搜索路径的顺序可能导致SPM版本冲突。如果你的环境里装了多个SPM或者用到了其他依赖SPM的工具箱建议把JuSpace和SPM12放在path的最前面避免在调用spm_vol、spm_read_vols这些函数时被其他同名函数拦截。具体做法是用addpath(..., -begin)参数或者在设置路径界面手动置顶。2.3 使用前的数据准备JuSpace对输入图像的基本要求是所有待分析的图像必须在同一个空间里。这个“同一个空间”通常指MNI152标准空间原因是内置的PET模板都基于MNI空间。如果你手里的fMRI激活图来自SPM的标准处理流程一般已经标准化到了SPM的MNI空间可以直接用。但如果你的数据来自fMRIprep输出就得特别注意。fMRIprep默认输出MNI152NLin2009cAsym空间而SPM12默认模板更多使用MNI152NLin6Asym或者更早的ICBM152空间。这两种MNI空间虽然名字很像但脑区坐标有毫米级的偏差放在一起做逐体素分析会被翘曲误差影响。我的习惯是凡是来自fMRIprep的统计图先用SPM或者ANTs做一个到SPM模板空间的二次配准再拿去做JuSpace。这一步看似多此一举但能避免很多假阳性和假阴性。另外输入图像最好只包含你真正想分析的体素。统计激活图如果是未阈值的T图或Z图可以直接用如果已经做了严格的阈值化处理只留下少数几个显著簇那空间相关结果会被大量零值主导相关性会偏向那些“零值区域”。JuSpace官方推荐使用未阈值统计图至少是未cluster-level threshold的图。这个问题我在第三部分还会展开讲。2.4 安装配置常见报错这部分列几个我实际遇到过的报错都是网上提得比较多、但官方文档里写得不清楚的问题。第一启动时提示Undefined function or variable spm_vol。这种基本都是SPM路径没加对或者MATLAB的路径缓存没刷新。解决办法是运行rehash toolboxcache和rehash path后再试。第二在选择图像文件时报错提示“Cannot read NIfTI file”。常见原因是图像文件被SPM的file_array对象转换过文件本身没损坏但文件头里的维度信息缺失。这种情况只需要用SPM的Check Reg打开一次再保存一次即可。如果还不行检查文件路径有没有空格。图像文件路径一定不能有中文和特殊符号这是NIfTI读写库的老毛病。第三提示需要安装“Statistics and Machine Learning Toolbox”。这是MATLAB许可的问题JuSpace的置换检验阶段会调用kron、corr等函数统计工具箱缺一不可。没有许可就只能换环境没有别的办法。3. 核心实操流程从激活图到递质关联3.1 整体流程概览JuSpace的完整流程可以拆成六步准备图像、选择PET模板、设置mask、选择相关类型、设置置换检验、解读输出。GUI界面把这些步骤组织成了一个还算清晰的入口第一次用的时候别急着点“Run”先把每个下拉框和输入框的含义搞清楚。界面大概分成几个区域左侧是输入图像区选择你要分析的主图像中间是模板选择区列出工具箱内置的PET受体模板库右侧是分析参数区包含平滑核大小、相关类型、置换次数、mask选项等。不同版本的布局略有差别但逻辑一致。默认情况下JuSpace会对每一对“输入图—PET模板”组合分别计算空间相关因此如果你选了1张激活图和20个PET模板就会得到20组结果。这其实是批量操作不需要自己写循环。3.2 输入文件与GUI配置要点输入文件选择上我建议在进入GUI之前就把文件整理成四类统计图T图或Z图未阈值或宽阈值、mask图可选、自定义PET模板可选、协变量图如有。不要直接在GUI里从文件夹翻找文件越多越容易选错。在GUI里有一个选项是“Smoothing FWHM”这是决定结果质量的关键参数之一。JuSpace允许在计算相关前对输入图做一次高斯平滑默认值往往是一个固定数值。实际使用中平滑核大小的选择应该参考你的PET模板本身的平滑程度。PET图像在采集时经过生理噪声和重建算法的影响空间分辨率通常较低有效平滑大概在8到12毫米。如果你的fMRI统计图本身已经比较平滑这一步可以留小一点如果统计图来自高分辨率组分析且未做过更多平滑建议给一个8毫米左右的平滑核。这样做的目的是让两张图在空间尺度上匹配避免因为分辨率差异产生噪声主导的相关。mask设置同样重要。很多PET模板自带有效脑区mask比如5-HT1A模板的有效信号主要集中在皮层和边缘系统如果你在全脑分析时把脑白质、脑室都纳入了计算这些区域在激活图里通常是低值或噪声反而会稀释真正的相关信号。我的一般做法是使用所有PET模板的共同交集作为分析mask确保每个体素在每个模板里都有可靠信号。JuSpace里可以选择“Intersection mask”或“Template mask”选项具体名称看版本但原则一致。3.3 关键参数的取舍逻辑下面这张表整理了我在多次实战中总结的参数设置经验供参考参数推荐设置说明输入统计图未阈值的Z/T图避免大量零值主导相关特殊研究可以例外平滑核FWHM6-12 mm与PET模板分辨率匹配非线性问题可用8 mm起步相关类型Spearman对脑图分布的非正态性和异常值更稳健置换次数至少1000结果稳定至少需要1000做汇报建议5000mask模板交集或自定义灰质mask避免白质和脑室噪声置换模式默认spin/空间置换不要改成普通随机置换会低估p值相关类型的选择是我个人比较有经验的地方。默认的Pearson相关计算简单、快速但脑图数据很少满足正态分布特别是fMRI组间对比的统计图往往有厚尾分布个别高值体素对Pearson相关的影响非常大。我做过一次对比同一组数据用Pearson和Spearman结果一个模板从显著变成不显著。后来我基本固定使用Spearman相关只在特殊情况下参考Pearson结果。如果你想更谨慎两种都跑看结果是否一致。置换次数决定了p值能否达到多重比较校正要求。如果你做FDR校正且需要报告校正后p值小于0.05置换次数至少1000次。5000次会得到更稳定的p值但计算时间会增加。好在JuSpace的置换检验通常只对空间相关做置换不需要回归整个一般线性模型速度可以接受。我自己跑过1张激活图、22张PET模板、5000次置换标准台式机大约十几分钟完全在可接受范围内。3.4 输出结果怎么看运行完成后JuSpace会生成一个结果表格通常放在当前工作目录或你指定的输出文件夹里。每一行对应一个PET模板列主要包括模板名称、相关系数、未校正p值、FDR校正p值、有效体素数等。看结果的第一步是检查有效体素数。如果某个模板的有效体素数非常少比如只有几百个那么这个结果基本不可靠因为空间相关的样本量太小即使相关系数很高也没有统计功效。这种小体素数通常是mask重叠后引起的遇到就删掉或者换自定义mask再跑。第二步是看相关系数的符号。正相关表示激活图的高值区域与PET模板的高值区域重叠这是最常见的解释方式。负相关则需要更谨慎的解释。fMRI统计图经常有负激活PET模板也分高表达和低表达区域负相关可能只是统计图的负激活与模板高表达区域重叠这种结果虽然在数学上没有错但神经化学意义上的解释必须非常克制不要把“负相关”直接等同于“抑制作用”那是对统计量本身的过度解释。第三步才是看p值。JuSpace默认提供的是逐模板的FDR校正p值。注意FDR校正的范围是你这次分析里选入的所有PET模板。选入的模板数量越少校正越宽松选入越多校正越严格。如果只是做先验性检验只选少数几个模板那么校正后的阈值相对容易通过。如果你把十几个模板全部放进去做数据挖掘FDR阈值会非常严格这是正常的不要试图通过减少模板数量来“刷显著”。审稿人往往更认可先验明确的模板选择策略。3.5 命令行/批处理的可行性JuSpace大部分核心功能是通过GUI操作的但命令行接口也不是没有。喜欢用批处理的用户可以直接在MATLAB脚本里调用JuSpace底层函数比如相关性计算和置换检验函数。然而不同版本函数名和参数结构差异比较大官方文档里不保证兼容。我的经验是如果只是做单次分析用GUI完全够了没必要去折腾命令行。如果你需要跑大量被试或者重复多组条件建议先手动跑通一两个样例然后读取JuSpace源码找到核心函数自己写一个批处理脚本。要注意的是调用核心函数之前仍然需要完成SPM的初始化和路径设置这一点和GUI模式是一致的。批处理脚本里最常犯的错误是忘加spm(defaults,FMRI)导致后续所有SPM子函数调用失败。我是吃过这个亏的提醒各位一定把初始化放在脚本开头。4. 统计原理空间相关为什么不能随便算p值4.1 空间自相关与普通置换检验的失效很多刚接触JuSpace的人会想空间相关算出来一个r值要检验它是否显著直接把体素随机打乱再算r重复1000次不就能得到一个空分布了吗这个思路在大方向上是正确的但实际操作中有一个致命陷阱脑影像数据存在强烈的空间自相关。相邻体素的值高度相似一个平滑过的激活图在空间上并不是独立的观察点。如果直接按体素做随机置换实际上破坏了两张图各自的空间结构得到的是一个“太容易显著”的空分布p值会被严重低估。这就是为什么JuSpace默认不用简单随机置换的原因。要理解这个问题可以想象两张随机生成的平滑噪声图。它们之间没有任何真实的生物学关联但因为平滑结构的存在逐体素的相关值天然比较高。若用普通置换检验空分布是从“空间结构完全被破坏”的数据里生成的比较对象不对等结果当然虚高。这是所有空间统计分析共通的问题不仅是JuSpace。4.2 JuSpace的置换策略与零模型JuSpace采用的方案是空间置换或基于球面的零模型。它不是在体素层面随机打乱数值而是通过旋转或者空间重排的方式保持图像内部的空间自相关结构只破坏两张图之间的空间对应关系。这个过程类似于在球面上做一个旋转让大脑图像的空间模式被整体移动但局部结构得到保留。在此基础上计算相关值得到的空分布更接近“空间相关为零但保持空间结构”的真实零假设。这样做的好处是p值的假阳性率控制得比较准。我在模拟数据上做过验证用两组独立的平滑噪声图像跑JuSpace普通置换会给出大量p0.05的错误结果而JuSpace默认的空间置换模式能把假阳性率控制在5%左右符合理论预期。这一点很重要因为它直接影响结论的可信度。如果你在选项里看到普通随机置换的选项建议不要选除非你有非常特殊的研究设计否则用默认的空间置换模式。4.3 多重比较与先验假设JuSpace分析通常一次会检验多个PET模板这天然面对多重比较问题。如果不做校正20个模板里至少会有1个由于随机因素达到p0.05这个概率接近64%。所以p值校正不是可选项而是必需步骤。但校正策略要结合研究目的。如果你在做探索性研究想看看哪些递质系统可能与激活图相关可以使用FDR校正接受一个相对宽松的阈值但需要在论文里明确说明这是探索性发现。如果你做的是验证性研究比如根据先验文献专门检验多巴胺系统那应该提前限定少数几个模板不要把所有模板都放进去跑一遍再挑显著的出来报那属于典型的“事后选择”统计上不可取。我在实际操作中会先写一个简单的分析计划把要检验的模板限定在5个以内这样即使做了FDR校正结果也有较强的说服力。4.4 解释结果的边界拿到显著相关后解释结果时必须清楚空间相关不等于因果更不等于“这个脑区释放了这种递质”。JuSpace只能说明在一个群体水平上激活的空间分布与某种受体/转运体的空间分布存在相似性。这种相似性可以有很多解释比如激活区域本身就在受体富集区或者激活区域与受体富集区共用了某个上游调控网络。再进一步解释需要结合药理操纵、任务设计甚至动物实验验证。还有一点需要特别提醒PET模板本身就是群体平均数据它反映的是“健康人群平均受体密度分布”不是某个个体的真实递质分布。如果你研究的是病人群体病人组的受体分布很可能已经偏离了健康模板这时JuSpace结果的空间对应关系需要谨慎解读。比较稳妥的做法是把病人和健康对照分开分析或者如果条件允许使用病人自己的PET数据作为模板。这是JuSpace的局限使用时要有清醒认识。5. 常见问题与排查技巧实录5.1 空间坐标不一致导致的相关失真这是JuSpace分析中最常见也最隐蔽的问题。输入图和PET模板虽然在视觉上看起来都是“大脑”但可能来自不同的空间定义。比如fMRIprep输出的是MNI152NLin2009cAsym而内置模板更接近SPM的MNI空间。两者的区别有时候只有几毫米但在逐体素分析中几毫米的偏差就足够让相关值从0.3掉到0.1甚至失去显著性。排查方法很直接跑完一轮结果后把激活图和PET模板叠加在同一个标准脑上检查几个关键解剖标志。比如看前扣带、壳核、海马这些边界清晰的区域是否完全对齐。如果发现偏移用SPM的Coregister或ANTs把统计图重新配准到模板空间再跑。千万不要忽略这一步我见过不少人花大量时间调p值最后发现是配准问题白白浪费了几天。5.2 mask和体素覆盖问题另一个高频问题是用全脑mask跑完结果里有效体素数差异巨大。这是因为不同的PET模板覆盖范围不同。比如5-HT1A模板在皮层信号强但在小脑和脑干信号很弱甚至为零阿片受体模板则在丘脑、纹状体有强信号。如果用全脑mask跑那些模板里值为零的体素会像“黑洞”一样拖低相关。解决办法是在分析前先生成交集mask。JuSpace界面里通常有mask选择的选项可以选“Template intersection”或“Grey matter mask”。我个人的偏好是在灰质mask基础上再取所有选中模板的有效信号交集这样既能排除白质和脑室噪声又能保证每个体素在所有模板里都有信号。这个步骤虽然会让有效体素总数减少一些但结果更干净审稿人看到有效体素数也会觉得心里有底。5.3 计算结果不稳定怎么办有时候同一个输入文件重复跑两次相关系数出现微小差异这通常是置换检验随机种子导致的。JuSpace默认在置换抽样时可能不固定随机种子所以p值会有一点点浮动但相关系数本身是确定的不应该有变化。如果你发现相关系数变化了那说明输入图被程序内部改动过比如自动做了mask裁剪或平滑建议检查设置里是否有隐藏的数据预处理选项。如果你希望结果完全可复现可以在运行前设置随机种子。在MATLAB命令行运行rng(2024)或者在脚本开头加上这一行。置换检验的p值会因此固定。不过论文报告时通常不需要固定种子反而建议描述置换次数和算法强调p值的稳定性。只要置换次数足够随机种子带来的p值波动会非常小。5.4 论文里怎么报告JuSpace结果写论文的时候JuSpace相关的信息必须完整报告否则审稿人无法判断结果可信度。我认为以下内容是必备的首先说明JuSpace的版本号和GitHub链接其次说明PET模板的来源和包含的递质系统第三报告平滑核大小、相关类型Pearson还是Spearman、mask生成方式第四报告置换次数和置换模式第五报告多重比较校正方法最好同时给出未校正和FDR校正后的结果。这些信息缺一不可。我在做同行评审时经常看到只写一句“using JuSpace”的稿件完全不提参数设置和版本这种写法会让审稿人对结果质量产生怀疑。JuSpace本身是一个在持续更新的工具箱不同版本的分析流程可能有差异因此版本信息不是可选项而是硬性要求。5.5 其他琐碎但要命的细节还有一些零散的注意事项。第一JuSpace在计算时会生成临时文件如果磁盘空间不足大模板的分析可能中断。建议预留至少10GB可用空间。第二不要同时跑多个JuSpace实例因为临时文件和输出目录可能冲突导致结果互相覆盖。第三分析前把MATLAB工作目录切换到一个空的输出文件夹避免和旧结果混在一起尤其当批次文件名相似时容易出现读到旧结果而误判的情况。最后再说一个我个人的习惯每跑完一个分析立即把激活图、选中的模板列表、参数设置截图、输出结果这四个文件放进同一个文件夹并统一命名。这个习惯在论文返修时帮了我大忙因为隔了几个月之后你很难凭记忆复原当时的分析参数。JuSpace这种工具最怕的是分析流程不可复现而数据和参数的归档比多跑几遍更管用。
阅读完成 · 觉得有帮助?