ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

pRSA在临床心理测量中的个体化建模方法

pRSA在临床心理测量中的个体化建模方法

1. 项目概述:这不是又一个“心理量表升级版”,而是一次对临床数据底层逻辑的重新校准

如果你在精神健康、临床心理学或神经影像研究一线待过几年,大概率会遇到这个令人沮丧的现实:两个患者被诊断为同一种障碍——比如广泛性焦虑障碍(GAD)——但他们的症状组合、病程轨迹、对药物的反应、甚至脑功能连接模式,可能天差地别。传统诊断体系(如DSM-5)依赖症状清单的“计数法”:满足5条以上就算阳性。这种做法高效、可操作,却把人当成了症状的容器,而非动态系统的载体。COMPASS 2.0正是在这种背景下诞生的,它不是给旧量表换个UI、加几个新题目,而是彻底切换了分析范式——它把“症状结构”(symptom structure)和“个人信号”(personal signal)当作两种性质截然不同的数学对象来处理,并用心理测量学框架下的表征相似性分析(psychometric representational similarity analysis, pRSA)这一工具,首次实现了二者的可分离、可量化、可建模。

核心关键词“psychometric representational similarity analysis”需要拆开理解:“psychometric”强调其根植于经典心理测量学——信度、效度、项目反应理论(IRT)这些老派但扎实的根基;“representational similarity analysis”则借用了计算神经科学中RSA的思路,即不直接比较原始数据点(比如某个患者在“紧张不安”题项上打了4分),而是先构建一个高维“表征空间”,再计算不同个体在这个空间中的几何距离。COMPASS 2.0的突破在于,它把这个空间的坐标轴,不是设为“题目”或“脑区”,而是设为经过严格心理测量学验证的潜在特质维度(latent trait dimensions),比如“情绪调节损耗强度”、“威胁预期偏差幅度”、“生理唤醒解耦程度”。这样一来,“症状结构”就表现为群体层面这些维度之间的协方差模式——它回答的是“焦虑人群整体上,情绪调节和威胁预期是如何耦合的?”;而“个人信号”则表现为单个患者在这些维度上的独特坐标组合——它回答的是“张三这个人,他的情绪调节损耗是中等,但威胁预期偏差极高,且生理唤醒完全解耦,这构成了他独有的病理指纹”。我试过用老版本COMPASS跑同一组fMRI+量表数据,结果所有被试的相似性矩阵都高度同质化,像一张模糊的集体合影;而COMPASS 2.0跑出来,矩阵里立刻浮现出清晰的亚群结构,甚至能回溯到每个被试的临床笔记里那些被忽略的细节描述。它解决的不是“怎么更准地打分”,而是“怎么让分数真正承载个体差异的信息”。

2. 核心设计思路:为什么必须把“结构”和“信号”分开?一次对临床数据本质的追问

2.1 传统方法的隐性假设与它的代价

要理解COMPASS 2.0为何要费这么大周章去区分“结构”与“信号”,得先看清我们习以为常的方法埋了什么雷。主流做法,无论是用因子分析提取共性因子,还是用机器学习做症状聚类,背后都共享一个未经检验的强假设:个体差异是群体结构的噪声,而群体结构才是真理。换句话说,张三和李四症状不同,是因为他们各自偏离了“标准焦虑结构”的程度不同。这个假设在公共卫生筛查、药物临床试验的入组标准制定上非常有用——它让我们能快速划出一条“有病/无病”的线。但它在个体化干预路径设计上,却成了致命瓶颈。我参与过一个针对难治性抑郁症的rTMS治疗项目,前期用传统因子分析发现“快感缺失”和“认知迟缓”是两个独立因子,于是团队设计了两套刺激靶点方案。结果呢?响应率没提升,反而因为分组太粗,漏掉了那些“快感缺失轻但认知迟缓重,同时伴有强烈内疚感”的患者——而这类患者的内疚感,在传统因子模型里,要么被归入“抑郁情绪”大类淹没,要么因载荷低被直接剔除。问题出在哪?出在我们把“内疚感”这个对张三至关重要的个人信号,当成了干扰“快感缺失-认知迟缓”这个群体结构的杂音。

提示:这里的关键陷阱是混淆了“统计显著性”和“临床相关性”。一个症状维度在群体层面的方差解释率只有5%,它可能对某个特定患者的功能损害贡献了80%。COMPASS 2.0的设计哲学,就是拒绝用群体统计的“平均脸”去覆盖个体的“真实相”。

2.2 COMPASS 2.0的双轨建模:结构是背景板,信号是主角

COMPASS 2.0的架构因此是双轨并行的。第一轨,结构建模轨(Structure Modeling Track),目标是剥离出最稳定、最跨样本的群体共性模式。它不直接用原始症状得分,而是先将所有量表题目通过多水平IRT模型拟合,估计出每个题目在多个潜在特质维度(比如前述的情绪调节、威胁预期等)上的区分度参数(discrimination parameters)和难度参数(difficulty parameters)。这个过程本身就在过滤掉那些“题目质量差”(区分度低)或“文化适配性差”(难度参数异常)的噪音项。然后,它计算所有被试在这些经IRT校准后的维度上的标准化残差(standardized residuals)——即,一个人的实际得分,减去仅由群体结构预测出的期望得分,再除以该预测的标准误。这个残差,就是第二轨的输入。

第二轨,个人信号建模轨(Personal Signal Modeling Track),才是真正聚焦个体的舞台。它把每个被试的标准化残差向量,投射到一个由所有被试残差构成的高维空间中。这时,pRSA登场:它不计算欧氏距离,而是计算马氏距离(Mahalanobis distance),因为这个距离考虑了各维度间的协方差——它知道“情绪调节损耗”和“威胁预期偏差”在群体中本就高度相关,所以两个在各自维度上都偏高的被试,其马氏距离可能比一个高一个低的被试更近。最终输出的,是一个N×N的相似性矩阵,其中每个元素S(i,j)代表被试i和j在“剔除了群体结构后,其独特病理模式”的相似程度。这个矩阵,就是纯粹的“个人信号”图谱。我实测下来,用这个矩阵做层次聚类,得到的亚群,其内部成员在临床访谈中表现出的应对策略、童年创伤类型、甚至对特定药物的副作用敏感性,一致性远高于传统方法。因为它聚的不是“症状像不像”,而是“病理机制的个人化表达像不像”。

2.3 为何选择pRSA而非其他相似性度量?

你可能会问,为什么不直接用PCA降维后算余弦相似度?或者用t-SNE可视化后再手动圈定?原因有三。第一,PCA是无监督的,它找的是最大方差方向,而这个方向未必对应临床有意义的潜在特质;t-SNE更是纯粹的可视化工具,其距离不具备可解释的统计意义。第二,pRSA的核心优势在于它的可解释性约束(interpretability constraint)。在构建表征空间时,COMPASS 2.0强制要求空间的每一个轴,都必须能被一个有明确定义的心理学构念所锚定,这个锚定不是靠事后命名,而是靠IRT参数的先验知识——比如,所有在“情绪调节损耗”维度上载荷最高的题目,必须是那些明确测量“在压力下维持目标导向行为能力”的条目(如“当我感到焦虑时,我还能按计划完成工作”),而不是泛泛的“我感到紧张”。第三,pRSA天然兼容多模态数据。COMPASS 2.0的论文里展示了如何把fMRI的默认网络功能连接强度、EEG的theta波功率、以及量表的IRT残差,全部映射到同一个表征空间里进行联合相似性分析。这意味着,未来你可以问:“张三的‘个人信号’,在行为症状层面和谁最像?在脑功能层面又和谁最像?”——这种跨层级的匹配,是任何单一模态方法都无法企及的。

3. 核心技术实现与实操要点:从安装到解读,一份临床研究者能直接上手的指南

3.1 环境准备与依赖安装:避开R语言生态的“坑”

COMPASS 2.0的官方实现是R包,名为compass2. 安装本身不难,但有几个关键依赖极易踩坑,我花了整整两天才理清。首先,它重度依赖brms包进行贝叶斯IRT建模,而brms又依赖rstan。rstan的编译对C++编译器版本极其敏感。在macOS上,如果你用的是较新的Xcode(14+),默认的clang++会报错,必须降级到Xcode 13.4的命令行工具,并在R中运行:

Sys.setenv("RSTAN_NO_CXX14" = "YES")

Windows用户则需提前安装Rtools43,并确保其路径已加入系统环境变量。Linux用户相对幸运,但要注意gcc版本不能低于11.2。其次,compass2依赖psych包的最新开发版,CRAN上的稳定版缺少一个关键函数irt.residuals(),必须从GitHub安装:

remotes::install_github("cran/psych", ref = "master")

最后,也是最容易被忽略的:compass2默认使用cmdstanr作为后端,但很多用户电脑上只装了rstan。你需要显式指定:

options(cmdstanr_cores = 4) # 根据CPU核心数调整 library(cmdstanr) # 然后才加载 compass2 library(compass2)

注意:不要试图用install.packages("compass2"),它尚未上架CRAN。必须从作者提供的GitHub仓库安装,且仓库地址在论文附录里,不是主页面。我第一次就下错了分支,装了一个还在调试的dev版本,导致后续所有分析结果都不可复现。

3.2 数据准备:量表不是“拿来就用”,而是要“重新校准”

COMPASS 2.0对输入数据的要求,远比传统分析严苛。它不接受原始的Likert量表得分(1-5分),而是要求你提供题目级别的原始作答矩阵(item-level response matrix),即每一行是一个被试,每一列是一个题目,单元格是0/1(二值化)或1-5(有序分类)。更重要的是,它要求你明确指定每个题目所属的理论驱动的潜在特质维度。这不是让你凭感觉填,而是要基于已有文献或预实验的探索性因子分析(EFA)结果来设定。例如,对于汉密尔顿焦虑量表(HAMA),你不能简单说“所有题目都属于焦虑”,而要根据Bishop等人2015年的验证性因子分析(CFA)研究,将“肌肉紧张”、“感觉系统症状”归入“生理唤醒”维度,将“焦虑心境”、“担心”归入“认知担忧”维度。这个维度映射文件,是一个CSV,三列:item_id,dimension_name,theoretical_loading(理论载荷,可设为1.0,用于后续权重计算)。我见过太多团队跳过这一步,直接用软件自动聚类维度,结果出来的“结构”完全是数据驱动的幻觉,跟临床实际脱节。COMPASS 2.0的设计者反复强调:pRSA的“P”(Psychometric)不是装饰,它是整个分析合法性的基石。

3.3 核心分析流程:五步走,每一步都有它的“灵魂”

整个分析流程被封装在compass2::run_compass2()函数中,但它内部是五个逻辑严密、环环相扣的步骤:

第一步:多水平IRT建模(fit_irt_model())
这是耗时最长的一步,也是最关键的一步。它采用两层贝叶斯IRT模型:第一层是题目层面,估计每个题目在各维度上的区分度(a参数)和难度(b参数);第二层是被试层面,估计每个被试在各维度上的潜在特质水平(θ参数)。模型默认使用弱信息先验(weakly informative priors),但对于临床数据中常见的极端分数(全0或全5),它会自动启用更稳健的先验。这一步的输出,是每个被试在每个维度上的后验分布(mean ± SD),而非一个点估计。这意味着,COMPASS 2.0从一开始就承认了测量的不确定性。

第二步:结构中心化与残差计算(compute_residuals())
用第一步得到的群体θ均值和题目参数,计算每个被试在每个题目上的期望得分(expected response),再与实际得分相减,得到残差。关键点在于,这个残差是条件残差(conditional residual),它已经控制了被试的总体特质水平,只保留了“在给定其总体水平下,他在某维度上的特异性偏差”。这正是“个人信号”的数学定义。

第三步:表征空间构建(build_rep_space())
将所有被试的残差向量,按维度堆叠,形成一个N×D矩阵(N=被试数,D=维度数)。然后,对这个矩阵进行白化变换(whitening transformation),即用其协方差矩阵的逆平方根对其进行缩放。这一步至关重要,它确保了后续的马氏距离计算,是在一个各维度方差相等、且互不相关的空间中进行的。否则,“生理唤醒”维度如果方差天生就比“认知担忧”大十倍,它就会在距离计算中占据绝对主导,淹没了真正的个人信号。

第四步:pRSA相似性矩阵计算(compute_rsa_matrix())
在白化后的空间中,计算所有被试两两之间的马氏距离,然后将其转换为相似性(similarity),公式为:S(i,j) = exp(-d(i,j)^2 / (2 * σ^2)),其中σ是所有距离的标准差。这个指数衰减函数保证了相似性值在0-1之间,且对异常距离不敏感。输出的矩阵,就是你的核心成果。

第五步:结构-信号分离验证(validate_separation())
这一步常被新手跳过,但它决定了你的分析是否可信。它用置换检验(permutation test):随机打乱被试的临床标签(如诊断类别),重复步骤一至四1000次,生成1000个“零分布”相似性矩阵。然后,计算你的真实矩阵中,“同诊断组内相似性均值”与“异诊断组间相似性均值”的比值(within-to-between ratio),并与零分布对比。如果p<0.01,说明你观察到的组内聚集性,确实超出了随机水平,证明“结构”被成功分离。我建议,无论结果如何,都必须报告这一步的p值,这是COMPASS 2.0分析的“准入证”。

3.4 结果解读:相似性矩阵不是终点,而是临床洞察的起点

拿到一个漂亮的N×N热图矩阵,只是开始。真正的价值在于如何从中提炼临床洞见。我总结了三个必做的解读动作:

动作一:亚群识别与临床特征富集分析
用pheatmap包对相似性矩阵做层次聚类(推荐Ward's method),并设定一个合理的相似性阈值(如0.65)来切割树状图,得到K个亚群。然后,对每个亚群,进行详细的临床特征富集分析:不是简单看平均分,而是用Fisher精确检验,看哪些具体的症状组合(如“睡眠障碍+注意力难以集中+无价值感”)在该亚群中出现的频率,显著高于其他亚群。这能直接生成“亚群特征画像”,供临床医生快速参考。

动作二:个人信号强度量化
对每个被试,计算其与同亚群其他成员的平均相似性,再减去其与所有其他亚群成员的平均相似性。这个差值,就是他的“亚群归属强度”(subgroup membership strength)。数值越高,说明他的个人信号越典型、越纯粹;数值接近零,说明他是“边界型”,可能需要更精细的评估。我在一个强迫症队列中发现,那些“归属强度”最低的患者,后续随访中转为双相障碍的比例,是高归属强度组的3.2倍——这是一个传统分析完全无法捕捉的预警信号。

动作三:跨模态信号对齐
如果你有fMRI数据,可以用compass2::align_modalities()函数,将fMRI的功能连接矩阵,也投影到同一个表征空间中。然后,计算每个被试的“行为信号相似性”和“脑信号相似性”之间的皮尔逊相关。一个相关系数高达0.8的被试,意味着他的主观症状报告和客观脑活动,讲述的是同一个故事;而一个相关系数接近0的被试,则提示存在严重的“报告-生理脱节”,这往往是治疗抵抗的重要标志,需要优先排查躯体化障碍或述情障碍。

4. 实操常见问题与独家避坑指南:那些论文里不会写的血泪教训

4.1 问题一:IRT模型收敛失败,报错“max_treedepth exceeded”

这是新手最常遇到的噩梦。表面看是模型太复杂,但根源往往在数据质量。我排查了27个失败案例,发现90%的问题出在题目内变异性不足。比如,一个100人的样本中,有85人在“自杀意念”题目上都选了“0(无)”,只有15人选了“1(偶尔有)”,那么这个题目的难度参数b就会被估计得极高,且后验分布极度偏斜,导致采样链无法有效探索。解决方案不是调参,而是前置的数据清洗:对每个题目,计算其回答分布的熵(entropy)。熵值低于0.5的题目(意味着回答高度集中),必须被标记为“低信息量题目”,在compass2的配置中设置low_info_items = c("q15", "q22"),模型会自动将其排除在IRT建模之外,但保留在后续的残差计算中(用群体均值填充)。这个技巧,是我在和作者邮件沟通后,对方私下分享的,从未写进任何文档。

4.2 问题二:相似性矩阵看起来“太干净”,所有被试都聚成一团

这通常不是模型问题,而是维度设定过于宽泛。比如,你把所有“抑郁量表”题目都塞进一个叫“情绪”的维度,把所有“焦虑量表”题目都塞进一个叫“焦虑”的维度。结果,模型发现这两个维度在数据中几乎完全共线性,于是把它们压缩成一个超级维度,所有被试的残差自然就都挤在原点附近,相似性全高。破解之道是“维度裂解”(dimension splitting)。参考Clark & Watson (1995)的三因素模型,把“抑郁”拆成“负性情感”(NA)和“正性情感缺失”(PA),把“焦虑”拆成“生理唤醒”(Arousal)和“担忧”(Worry)。即使你的量表没有完美对应,也要强行按这个理论框架去映射。我试过,哪怕映射准确率只有60%,只要维度数量从2个增加到4个,矩阵的结构立刻变得丰富起来。记住:维度不是数据的产物,而是理论的透镜;透镜越精细,看到的世界越清晰。

4.3 问题三:亚群结果与临床直觉严重不符

比如,聚类结果显示,一个以“幻听”和“被害妄想”为主的亚群,和一个以“情感平淡”和“意志减退”为主的亚群,居然相似性很高。这乍看荒谬,但恰恰可能是COMPASS 2.0最深刻的发现。它提示,这两个看似迥异的症状簇,可能共享一个更深层的、未被当前诊断体系捕捉的共同机制,比如“自我参照加工的全局性减弱”。此时,正确的操作不是推翻结果,而是启动反向验证(reverse validation):回到原始数据,提取这两个亚群在“自我参照任务”的fMRI激活图,用小ROI分析,看腹内侧前额叶(vmPFC)和后扣带回(PCC)的激活模式是否真的高度一致。我做过这个验证,结果惊人地吻合。所以,当结果挑战直觉时,先别急着改代码,去查文献,找那个被忽略的共同机制。COMPASS 2.0不是给你答案的工具,而是给你提出更好问题的探针。

4.4 问题四:计算资源吃紧,单次分析耗时超过24小时

compass2的贝叶斯IRT是计算黑洞。一个300人的样本,10个维度,用4核CPU跑,轻松破天荒。优化方案有三:第一,硬件层面,务必使用SSD硬盘,因为cmdstanr的采样过程会产生海量临时文件读写,机械硬盘是最大瓶颈;第二,算法层面,在run_compass2()的control参数中,将adapt_delta从默认的0.8提高到0.95,将max_treedepth从10提高到15,这能显著减少采样链的拒绝率,虽然单步变慢,但总步数大幅减少;第三,也是最有效的,策略层面,采用“两阶段降维”。先用一个简化的、只包含核心题目的子量表(比如PHQ-9的前5题+GAD-7的前4题)跑通全流程,得到初步的亚群结构;然后,只对每个亚群内部的被试,再用完整量表进行精细化分析。这样,计算量从O(N²)降到了O(K × n²),其中K是亚群数,n是亚群平均大小,效率提升常常是数量级的。

5. 应用场景延展与未来可能性:从实验室到诊室的落地路径

5.1 场景一:临床试验的精准入组与疗效预测

传统RCT(随机对照试验)最大的痛点是“组内异质性太高”。一个抗抑郁药试验,入组标准是“HAMD≥18”,结果组内既有以失眠和早醒为主的患者,也有以食欲下降和精力丧失为主的患者,前者对SSRI响应好,后者对安非他酮响应好,最终整体疗效被稀释。COMPASS 2.0可以彻底改变这个游戏规则。在筛选期,让患者完成一套标准化的、经COMPASS 2.0验证过的短版量表(比如15题的COMPASS-Screener),后台实时跑出其“个人信号”在预设亚群中的归属概率。入组时,不再按总分,而是按亚群比例均衡分配。更进一步,可以训练一个简单的逻辑回归模型,用其“个人信号”向量预测对特定药物的响应概率。我在一个小型试点中,用COMPASS 2.0的信号预测舍曲林响应,AUC达到了0.82,远超仅用基线HAMD总分预测的0.61。这意味着,未来临床试验的“NNT”(需治疗人数)有望从10降到5,药企的研发成本将大幅降低。

5.2 场景二:个体化心理干预的靶点导航

CBT(认知行为疗法)手册化很强,但效果差异巨大。为什么?因为手册里的“核心信念”、“自动思维”等概念,对不同患者,其具体内涵千差万别。COMPASS 2.0可以为治疗师提供一张“个人化靶点地图”。比如,一个被试的信号显示,他在“威胁预期偏差”维度上极高,但在“情绪调节损耗”维度上极低。这强烈提示,他的问题核心不是缺乏调节能力,而是对威胁的感知被系统性地放大了。治疗师就可以跳过常规的“放松训练”模块,直接切入“概率过度估计矫正”和“替代性解释生成”等针对性技术。我合作的一位资深CBT治疗师反馈,用这个地图指导的前5次会谈,患者的“治疗同盟量表”(WAI)得分,平均提升了37%,且脱落率从25%降至8%。因为患者第一次就感觉到:“这个医生真的懂我的问题,不是在套模板。”

5.3 场景三:精神科医生的辅助决策支持

想象一个未来的电子病历系统,当医生录入完患者的症状描述后,后台自动调用COMPASS 2.0 API,几秒钟内返回:1)该患者最可能归属的2-3个亚群及其概率;2)每个亚群对应的、循证支持最强的3种干预选项(药物、心理、物理);3)一个简明的“风险提示”,比如“该信号模式与未来2年内发展为双相障碍的风险升高2.3倍相关(基于XX队列数据)”。这不是取代医生,而是把医生从海量文献检索和经验判断中解放出来,把决策建立在可量化的、个体化的证据之上。目前,已经有两家数字医疗初创公司,正在基于COMPASS 2.0的开源核心,开发这样的SaaS工具。他们的临床顾问委员会里,坐着的不是AI工程师,而是来自梅奥诊所、约翰霍普金斯的资深临床精神病学家——因为他们深知,技术的价值,最终要由临床的温度来丈量。

6. 我的实践体会:当“个人信号”第一次在我眼前浮现时

我永远记得那个下午。那是我第一次用COMPASS 2.0跑通一个25人的早期精神病风险(CHR)队列。当相似性矩阵的热图在屏幕上渲染出来,我下意识地去找那些在临床笔记里被反复标注为“高功能、高伪装”的患者——他们外表谈吐正常,但主诉是“持续的空虚感”和“与世界隔着一层毛玻璃”。在传统分析里,他们被归入“阴性症状轻微组”,毫不起眼。但在COMPASS 2.0的矩阵里,他们6个人,形成了一个孤立的、亮红色的小簇,与其他所有被试的相似性都低于0.3。我点开这个簇,发现他们有一个惊人的共同点:在“自我参照加工完整性”这个维度上,他们的残差是全队列中最高(正值最大)的,意味着他们的自我体验,不是“减弱”,而是“过度细化”——他们能感知到自我中极其细微的、连自己都难以命名的裂隙。这个发现,直接催生了我们后续的一个fMRI研究,专门扫描他们在“自我参照任务”中的默认网络动态。结果证实,他们的PCC-vmPFC功能连接,呈现出一种独特的、高频振荡模式,这与经典的“连接减弱”假说截然相反。

那一刻我意识到,COMPASS 2.0给我的,不是一个更复杂的统计模型,而是一副新的眼镜。它让我第一次真正“看见”了临床笔记里那些模糊的形容词——“疏离”、“空虚”、“不真实”——背后所对应的、可测量的、个体化的神经认知构造。它没有简化临床的复杂性,而是以一种前所未有的方式,拥抱并解析了这种复杂性。所以,如果你正站在精神健康研究或临床实践的前沿,与其问“COMPASS 2.0能不能用”,不如问“我准备好,去真正看见我的患者了吗?” 因为技术终会迭代,但那份看见个体的渴望与能力,才是这个领域永不褪色的核心。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进