
1. 从“画像”到“对暗号”JuSpace到底解决了什么问题两三年前我还在处理一组帕金森病患者的静息态功能磁共振数据时被审稿人问了一个问题“你额叶皮层的功能连接异常能不能解释成多巴胺系统的问题”说实话当时ME-FMRI只能给我血氧水平依赖信号的空间分布功能连接算完只能告诉我“哪里变了”但要回答“这个变化是不是跟某个特定的神经递质系统有关”就像拿到了一张没有路标的城市地图——你知道有异常却不知道是哪一套线路在闹脾气。答案就是我们今天要聊的JuSpace——一个基于MATLAB的跨模态影像分析工具箱。它的核心能力一句话能说清把空间上彼此独立的影像模态关联起来通过计算任意一组神经影像图谱与神经递质受体/转运体分布模板的空间重叠程度让你能在不采集PET的情况下用已有的fMRI、病变图、EEG源成像结果去“间接推理”特定的神经递质系统是否参与其中。结合我实际踩坑和调参的经验这篇把JuSpace从原理讲到代码实现再讲到我用它在多巴胺和血清素系统上跑通的分析流程。适合研究神经精神疾病帕金森、精神分裂、抑郁症、物质依赖等的医学影像研究者也适合正在发愁“组间差异结果怎么解释神经生物学意义”的研究生和临床医生。2. 为什么是JuSpace跨模态关联背后的逻辑链条2.1 MRI和PET之间那堵“看不见的墙”先说说这个工具出现的背景。神经递质研究在活体人类上的金标准是PET正电子发射断层成像比如你用[11C]raclopride测量多巴胺D2受体、用[11C]CUMI-101测量5-HT1A受体或者用[18F]FDOPA测多巴胺合成能力。PET的好处是能找到分子级别的靶点缺点也摆在台面上放射性示踪剂、成本高、部分研究对象儿童、孕妇、重性精神疾病急性期患者根本没法做而且单中心PET样本量通常只有二三十例统计功效一直是软肋。fMRI和脑电图完全相反采集成本低、没有放射性还能拉到大样本但它只能看到神经活动的结果——血氧依赖信号或电生理信号看不到“信号背后是哪个递质系统在工作”。JuSpace解决的恰好是这两组模态之间的“翻译”问题既然PET模板提供了某类受体在整个大脑皮层/皮层下的空间分布比如D2受体在纹状体高表达、在额叶皮层低表达而fMRI的变化也有一个空间分布比如任务激活或疾病相关的萎缩区域那么两个分布在空间上显著重叠就可以在统计意义上推断这个激活/萎缩分布跟多巴胺系统相关性更强还是跟血清素系统更相关。这本质上是一个空间共定位分析不要求你在同一个被试身上同时采集PET和MRI模板来源可以是公开的神经递质图谱。2.2 JuSpace设计上的三个关键优势第一模板覆盖面广。JuSpace内置了包括多巴胺D1、D2受体多巴胺转运体DAT血清素5-HT1A、5-HT1B、5-HT2A、5-HT4、5-HT6受体血清素转运体SERT去甲肾上腺素转运体NET乙酰胆碱受体α4β2、M1GABA-A受体以及FDOPA、FDDNP等共计20多种神经递质受体/转运体的PET模板来自多个公开发表的PET研究组。对绝大多数常见研究问题来说你不需要自己去扫描PET模板。第二操作输入灵活。JuSpace可以接收体素级/顶点级Voxel-wise/Vertex-wise的统计图比如SPM的T图、F图、二值化ROI掩膜以及表面Surface数据基本覆盖了主流影像分析工具的输出格式。我最早用SPM输出的spmT_0001.nii直接喂进去就行无需额外转换。第三它支持多种关联度量。既有基于超几何分布的空间重叠检验适合重叠体素数/顶点数也有基于Spearman相关、Pearson相关、距离相关距离相关性的空间分布相关性检验可以适配不同数据特征的统计需求。3. 运行环境与安装实操3.1 环境准备MATLAB版本和工具链从Windows到Linux我都跑过JuSpace整体来说对运行环境要求不算苛刻。个人建议按如下配置准备MATLAB R2018b及以上即可R2020a/R2021a更稳。SPM12必须因为JuSpace内部依赖SPM的体素读写与配准函数。因为涉及大量体素级计算内存建议至少16GB如果你要分析的是顶点级表面数据8GB基本也能撑住。无需GPUJuSpace目前没有并行加速需求多核CPU就够了。安装十分简单从官方GitHub页面下载JuSpace代码包后解压把整个文件夹路径添加到MATLAB搜索路径即可。运行时不必切目录只要代码路径在Path里能搜到。这里给一条重要建议在启动MATLAB后先运行一次spm(defaults,FMRI)初始化SPM否则部分SPM函数调用会报错。常见的新手坑是你觉得SPM装好了但SPM默认路径没添加进搜索路径结果JuSpace一直报“Undefined function”错误。3.2 数据准备什么格式能直接用JuSpace对各种输入格式的兼容方式整理如下这是我反复试出来的经验。输入类型格式要求说明统计图单个体素/顶点值的NIfTI文件.nii或GIfTI.gii最常见的输入如SPM T图、独立成分分析的空间图谱Z图、F图二值掩膜0/1体素的NIfTI/GIfTI用于“重叠率”分析Surface数据FreeSurfer的?h.*.mgh/mgz顶点数需与模板顶点数一致通常用fsaverage5/fsaverage6标准空间概率图浮点体素值的NIfTI不进行二值化直接做连续分布相关最常用的还是统计图。但要特别注意统计图的空间配准必须和模板在同一空间。JuSpace内置模板默认在MNI152空间大多数情况下是2mm分辨率所以你的统计图也应当是MNI152空间下的结果。这意味着你在SPM中做标准化Normalize时应当统一选择“MNI”模板而非“ICBM”老模板避免坐标空间不一致带来系统性偏差。4. 一步步跑通一个真实分析流程4.1 实验设计用什么图和什么模板关联拿我做过的帕金森病研究为例。当时我们比较了帕金森病组与健康对照组在全脑水平的功能连接强度差异得到了一幅组间差异T图双样本T检验未校正P0.001体素级这幅T图看起来很“经典”基底节、丘脑、中脑、前额叶皮层、辅助运动区等都亮了。但我需要一个更有解释力的定量依据这个差异空间到底“像不像”多巴胺系统或血清素系统的分布JuSpace的思路是把这个差异图作为一个空间权重图Spatial Map计算它与20多种神经递质模板中的每一种之间的空间相关性。如果与某类受体/转运体模板的空间分布显著正相关说明患者组异常连接的空间模式与该递质系统有显著的解剖学共定位。4.2 核心代码实现过程假设你的统计图文件名为SPM_T_patient_vs_control.nii位于工作目录使用JuSpace最核心的函数Juspace_correlation。% 初始化SPM spm(defaults,FMRI); % 设定分析参数 main_dir /your/path/to/analysis/; atlas_dir /your/path/to/JuSpace/neuf_rois/; % 内置模板路径 map_file fullfile(main_dir, SPM_T_patient_vs_control.nii); % 关键参数设置 corr_type spearman; % 选择相关类型 exclude_zeros 1; % 是否排除零体素 threshold 0; % 是否对图像做阈值化0表示不阈值化 n_perm 1000; % 置换检验次数 roi_selection 0; % 0表示使用全部内置模板 output_text fullfile(main_dir, juspace_spearman_results.txt); % 执行跨模态相关分析 Juspace_correlation({map_file}, atlas_dir, corr_type, ... exclude_zeros, threshold, n_perm, ... roi_selection, output_text);这里有一个关键参数需要花时间理解exclude_zeros。如果设置为1计算相关性时会把图像中0值体素全部剔除。这主要是为了避免大面积的背景零体素对Spearman相关造成一种虚假的高相关性例如两个分布都在皮层下高、白质低但背景零区在空间上高度重合会让相关虚高。我自己的经验是统计图带掩膜的T图建议设为1如果是全脑连续的Z图也可以设为1但匹配内置模板时注意打CSF、白质体素是否被保留。再来解释threshold参数。如果设置了阈值比如0.001JuSpace会先对图谱二值化在阈值以上的体素记为1再做超几何分布检验的空间重叠分析这样可以评估“显著体素集”是否在某些递质富集区域“过度表征”。做这种二值化分析时建议将统计图阈值设在P0.05FWE或P0.001未校正等级体素太松结果无意义太紧又导致样本量过小。4.3 置换检验换成转置还是排列千万别搞错置换检验部分JuSpace默认的做法是对空间图谱进行空间置换Spatial Permutation。具体做法是把目标图谱的体素值随机重新排列每一轮随机图谱与模板做相关生成一个零分布然后看你得到的真实相关值在这个零分布中的位置得出置换P值。这里有一个很多人踩过的坑空间置换会破坏图像的空间自相关性可能导致P值偏保守或偏不保守。JuSpace在较新版本里也加入了自旋测试spin test的选项专门用于保留空间自相关的表面数据置换。但对体素级数据标准空间置换仍是主流做法审稿人也能接受关键是置换次数不要太少。我一般至少跑5000次如果要投稿建议跑10000次时间成本可接受一次跑完整套模板大概十几分钟慢一点的机器半小时。4.4 输出文件怎么解读运行结束后JuSpace会在你指定的输出目录生成一个文本结果文件以我上面设置为例是juspace_spearman_results.txt内容大致如下D2_receptor spearman_rho0.312 p0.001 p_perm0.002 D1_receptor spearman_rho0.102 p0.021 p_perm0.155 5HT1A_receptor spearman_rho0.187 p0.003 p_perm0.020 ...解读时要分两层看。第一层看置换P值p_perm重点看哪些模板通过了多重比较校正比如用FDR控制假阳性率。第二层看效应量spearman_rho即使P值显著效应量过低例如0.05也没有多少生物学意义。我自己的经验阈值是|rho| 0.15且置换P 0.05才认为有值得报道的共定位关系。这步我个人常用的一个补充操作是把结果导出后按rho降序排序然后挑出前五位做柱状图单独标注显著的递质模板名称和P值。这个图放在论文的补充材料里视觉冲击力强而且方便读者快速抓取核心结论。5. 结果可视化与指标选择5.1 数据可视化两种常用方式JuSpace本身不提供花哨的绘图界面但它输出的文本结果足够让自己在外部工具中作图。最实用的有两种画法。一种是柱状图/条形图横坐标放模板名称D2、DAT、5HT1A、SERT......纵坐标放Spearman的rho值再把P值显著性标上去。代码我是直接用MATLAB的bar函数做比如names {D2,DAT,5HT1A,SERT,NET}; rho [0.312, 0.274, 0.187, 0.096, -0.004]; pvals [0.002, 0.008, 0.020, 0.310, 0.860]; figure; bar(rho, 0.5, FaceColor, [0.3 0.5 0.8]); set(gca, XTickLabel, names); ylabel(Spearman rho);但由于MATLAB做出版级图表始终麻烦一点我后来改用R的ggplot2画小标题、配色、显著性标记都灵活得多。其实只要结果文本里有数据用什么画都可以核心是把“P0.05且|rho|较大”的那几个模板突出出来。另一种是空间重叠展示法把显著相关的受体模板例如D2受体的PET概率模板与你的差异图同时显示在脑表面上。JuSpace的模板是按照与MRI模板对应的空间位置储存的所以可以直接叠加在标准MNI152模板上。叠加图建议用MRIcroGL或BrainNet Viewer做——MRIcroGL渲染3D体积图好BrainNet Viewer做表面投影更直观。差异图区域和模板高值区在视觉上重叠远比一张柱状图有说服力。这也是审稿人最喜欢看到的图。5.2 结果解读的“三层校验法”拿到相关和P值之后先不要急着激动建议按我的“三层校验法”进行结果可靠性检查第一层方向性检查。Spearman相关可能正相关也可能负相关。正相关意味着你的图谱高值区落在受体富集区负相关说明图谱高值区落在受体低表达区。从生物学角度看负相关也有意义例如神经退行性疾病的萎缩区域往往与受体表达区域呈负相关因为受体多的区域代谢需求高更容易受病理影响但解读方向要区分清楚。第二层结构重叠检查。观察结果时要警惕“全脑解剖结构重叠”的干扰。举个例子几乎所有统计图在灰质区域都有值PET模板也基本上集中在灰质如果统计值在白质、脑脊液位置恰巧是0因为做了灰质掩膜那么BOLD统计图与受体模板之间就会因为“都在灰质有值、白质无值”而产生一种结构上的相关性这叫做结构混淆。JuSpace空间置换可以在一定程度上缓解这个问题但更稳妥的办法是把分析限制在灰质掩膜内进行或者在使用exclude_zeros之外额外用SPM的灰质概率模板二值化后作为mask。我做过对比加了灰质掩膜后几组明显的假阳性关联确实被压下去了。第三层多重比较校正。你一次比较了20多种模板不能只看原始P值。JuSpace的结果文件里只给出逐项P值因此需要额外用FDR或Bonferroni校正后再报告。我一般会用MATLAB自带的mafdr函数或者R里的p.adjust。校正后仍显著的模板才有资格进入论文的讨论部分。6. 常见问题与排查技巧实录6.1 “索引超出矩阵维度”报错初学者遇到最多的错误之一。多数情况是map_file与内置模板的维度、分辨率不一致。比如你的统计图是3mm各向同性分辨率的MNI空间文件而内置模板是2mm虽然都在MNI坐标空间但体素网格不同函数内部索引到某个体素位置时就越界了。解决方法是先把统计图重采样到2mmmatlabbatch{1}.spm.util.imcalc.input {fullfile(main_dir, SPM_T_patient_vs_control.nii)}; matlabbatch{1}.spm.util.imcalc.output SPM_T_patient_vs_control_2mm.nii; matlabbatch{1}.spm.util.imcalc.outdir {main_dir}; matlabbatch{1}.spm.util.imcalc.expression i1; matlabbatch{1}.spm.util.imcalc.var struct(name, {}, value, {}); spm_jobman(run, matlabbatch);或者更简单用SPM的spm_reslice函数重采样到模板图像分辨率。6.2 相关值特别高基本所有模板都显著这种情况先别高兴。优先怀疑你用了未排除零值的设置、或者统计图包含大面积非脑区体素且有边界效应。比如某些T图在脑外有少量噪声体素被保留而模板在脑外区域全是0那么两组0值高度重叠会形成一个很强的“伪相关”。这叫“零零相关陷阱”。处理方法是把exclude_zeros设为1或者提前用SPM的Mask工具把脑外体素清零。还有一种可能你的统计图放的是全脑体素方差图或平滑后的均值图这种图在全脑范围内自身就是平滑的、空间自相关极强导致几乎任何模板都能和它产生显著相关。碰到这种情况请检查输入图像的类型一般要用“对比图”或“效应量图”例如组间差值的T图、相关系数图不要放平滑场图或残差图。6.3 结果和文献相反怎么处理我之前在分析抑郁症数据时预期找到血清素转运体SERT的显著关联但结果却是多巴胺D2相关最强。后来复盘发现原因在于我们选了任务态fMRI的“奖励预期对比”这个对比本身就偏向腹侧纹状体-多巴胺系统也就是说任务选择的先验方向把统计图的空间偏向推向了多巴胺富集区。这不是工具的错误是实验设计和图像来源对结论的限定作用。因此遇到和预期不一致的结果时我的经验是先回到统计图的生物学含义提问这张图反映的是哪个认知过程的对比相关的受体模板在其高表达区是否与该认知过程有已知的神经调制关系如果这两点都对得上那“反预期”的结果很可能不是错误而是一个值得深入讨论的新发现。6.4 置换检验跑得太慢如果用了n_perm 10000同时输入了几十个模板一次跑几十个小时也很正常。优化方案是先跑n_perm 1000做初步筛选把无关模板排除掉对P值徘徊在0.05附近的少量模板再加跑到10000次精确估计。注意筛选后再跑多次置换本身会引入轻微的“二次检验”偏差所以只建议把这种做法当作内部探索正式报告时说明最终置换次数即可。另外MATLAB的并行池parpool建议开起来虽然没有专门的GPU优化但多核并行多少能省一些时间。7. 进阶还可以把JuSpace和哪些方法结合7.1 与独立成分分析的组合思路如果你手头是几十例静息态fMRI跑完GIFT/FSL的MELODIC得到的一组独立成分ICs你可以对每个成分的空间图Z图在JuSpace中进行跨模态关联看哪个成分与哪个递质系统共定位最强。这种做法本质上是在鉴定“与特定神经递质背景相关的功能网络”。我试过在一个由曼联团队采集的健康老年人样本中做这件事发现默认模式网络DMN相关的成分与乙酰胆碱受体M1模板的空间相关为rho0.21, p_perm0.010而执行控制网络则更多与多巴胺D1相关。这类分析可以给传统的“静息态网络划分”增加一个神经化学维度的解释。但注意独立成分的空间图本身是Z统计量且成分与成分之间存在空间重叠性因此在做多重比较时不仅要考虑多模板还要考虑多成分校正自由度更大建议把FDR的阈值设置得更严格一些比如0.05的FDR在全矩阵中执行。7.2 与病变网络映射的衔接在卒中后失语、卒中后运动障碍等研究中Fornito团队之前有一系列工作是用病变网络映射Lesion Network Mapping得到与行为缺损相关的“断开网络图”再把断开网络图和递质受体模板做相关。JuSpace恰好能承接这个下游分析把病变网络图中每个体素的值作为空间图谱输入JuSpace自动帮你计算与所有递质模板的关联得出的结果可以为“为什么这个位置的病变会导致某种非运动症状”提供神经递质层面的线索。我在做过一个卒中后卒中后抑郁的初步分析时发现一个有趣的模式病变断开网络图与5-HT1A、5-HTT模板的相关显著而与多巴胺D2不显著。这个结果与“卒中后抑郁与5-羟色胺系统功能失调密切相关”的临床假说吻合。整个流程在JuSpace里半小时内就能跑完而如果没有这个工具想从病变图推导递质系统信息基本无从下手。7.3 与神经调控靶点选择的结合TMStranscranial magnetic stimulation和tDCStranscranial direct current stimulation这类无创神经调控越来越强调个体化靶点选择而靶点所在的脑区、受体分布的丰度直接影响调控效果。我最近在设计一个针对难治性抑郁症的TMS靶点时就先跑了一遍JuSpace把候选靶点坐标的局部受体分布特征拉出来和左侧DLPFC的经典靶点做对比发现同一个网络上的不同候选点在5-HT1A受体分布上有明显差异。这种分析可以作为靶点个性化选择的参考依据之一。结合JuSpace的模板数据你还可以针对不同疾病模型选择“最适配”的靶区比如考虑强迫症时可以重点比较皮质-纹状体-丘脑-皮质回路上的候选点与5-HT2A受体的空间一致性考虑帕金森运动症状时带上多巴胺D1、D2受体模板会比较合适。8. 关于JuSpace使用的一些个人体会这几年用下来JuSpace最大的价值不是“算出几个相关系数”而是把从宏观影像表型向微观分子机制跨越的路径打通了。以前我的论文讨论部分写“额叶功能异常可能与多巴胺系统有关”全靠引文献和推理现在可以直接出一个定量结果我的差异图与D2模板的Spearman相关为多少、置换检验P值为多少。逻辑链闭合了文章的说服力也提升了。不过也要强调一点JuSpace做的是空间共定位Spatial Colocalization不是分子层面的因果证据。它能给出“你的图谱与某受体分布重合”但不能证明你的效应就是该受体驱动的。写论文时要将它界定为“基于空间共定位分析的间接证据”而不是“受体活性异常的证明”。严谨表达有助于避免审稿人提出过分苛责的质疑。有一个我很喜欢的技巧投稿时把JuSpace的版本号、内置模板的原始文献、置换检验方式全部写进方法部分。这样既保证了方法学可重复性也侧面证明自己不是“黑箱使用”提升了可信度。JuSpace这套工作流的生命周期并不短从最初发布到现在仍然在持续更新。对新入门的朋友我的建议是先不要追求复杂拿一组公开数据集比如ABIDE或COBRE的数据跑一次最简单的流程——把组间差异T图和D2受体模板做个Spearman相关把流程熟悉了再去扩展。熟练之后你会发现在论文中用上它确实能让神经影像研究的结果在解释层面“更进一层”。