Nature Protocols:计算精神病学的规范化建模框架(含代码及演示)

规范化建模是一个新兴的创新框架,能够基于参考模型对单个受试者或单次观察的个体差异进行描绘。该方法通过描绘生物学与行为之间映射关系在群体中的百分位数变异,从而实现个体水平的统计推断。由于缺乏专门用于对精神疾病生物学异质性进行恰当建模的工具,计算精神病学和临床神经科学领域从患者与"健康"对照组分析方法的转型一直进展缓慢。规范化建模为解决这一问题提供了方案,使分析不再依赖于可能存在噪声的临床标签进行病例-对照比较。在此,我们提出一个标准化流程,指导用户使用预测临床神经科学工具包(PCNtoolkit)完成规范化建模分析的全过程。我们描述了输入数据的选择过程,阐述了各种建模选择背后的基本原理,并通过展示规范化模型可能促进的若干下游分析示例(如高风险个体分层、亚型分析和行为预测建模)进行总结。完成该流程大约需要1-3小时。本文发表在Nature Protocols杂志。

引言

     临床神经科学家最近认识到两个改变了研究方式的现实:第一,要理解个体差异就必须摆脱群体平均统计;第二,精神疾病的传统诊断标签在基础生物学层面并没有清晰的表现。为此建立了RDoC、HiTOP和ROAMER等倡议,试图通过映射跨越异质性疾病类别的生物行为维度来完善精神疾病的疾病分类学。尽管有了这种认识,且对量化个体差异的兴趣日益增加,但该领域从旨在对比患者组与健康对照组、并假设临床组具有区分性和同质性的病例-对照比较方法转型的进展仍然缓慢。阻碍进展的一个关键障碍是缺乏专门用于建模个体间变异(也称为异质性)的替代分析方法。几乎所有用于连接大脑和行为的现有技术都在群体水平上运作,无法实现个体水平的推断。

      规范化建模是一个用于理解单个受试者或观察水平差异的框架,同时将这些差异与参考模型关联起来(图1)。它涉及绘制群体中生物学和行为之间映射关系的百分位数变异,这些变异随后可用于在个体水平进行统计推断,类似于儿科医学中生长曲线的使用(图1a)。临床神经科学中规范化建模的实践旨在提供超出病例-对照建模方法所能获得的额外信息(详见下文"协议的发展"部分)。病例-对照思维假设均值能代表群体,但实际可能并非如此(例如,当临床群体分散或包含多个亚群体时)。因此,规范化建模已成为精准医学研究项目的主要工具,并已在许多临床情境中得到应用(更多示例详见下文"应用及与其他方法的比较"部分)。

图片

图1:规范化建模的概念概述 

    a,规范化建模的经典示例:儿科医学中身高和体重生长曲线的使用。

    b,左图:病例-对照模型理论上假设存在可以区分群组的边界,且组内具有同质性。右图:实际上,对照组和患者组之间存在嵌套变异,且组内存在异质性,导致分界不清晰。规范化建模能很好地处理这种现实。

    c,计算精神病学中使用神经影像数据的规范化建模应用示例。使用来自神经典型对照组的多中心结构性MRI的训练集和由神经典型对照组及患者组组成的测试集,根据年龄(x轴)预测平均皮层厚度(y轴)。每个点表示单个个体相对于正常发育的偏差分数。

    d,图c所示模型的回归模型方程和设计矩阵设置。

    神经科学历来汇集了来自不同教育背景的科学家,例如一些来自临床背景,另一些具有数学背景。这种跨学科性质在技术和临床视角之间架起桥梁时带来了挑战。这是一个与开放科学运动和脑黑客社区目标相一致的关键挑战,换句话说,就是将分析工作流程的基本组成部分提炼为一个一致且广泛适用的协议。这有助于避免"研究债务",即缺乏对想法的消化。这种提炼思维对于应对研究债务和接受思维范式转变(如从病例-对照比较转向规范化建模框架)至关重要。

     本工作旨在将规范化建模这一高级分析技术的方法提炼为一个可行的协议,以解决这些挑战,使其能被临床神经科学这一多样化领域的研究人员所使用。我们提炼了规范化建模分析的基本组成部分,并使用预测临床神经科学工具包(PCNtoolkit)软件(https://pcntoolkit.readthedocs.io/en/latest)提供了从头到尾的示范性分析。我们描述了输入数据选择过程,概述了各种建模选择,并通过展示规范化模型可能促进的若干下游分析示例(如高风险个体分层、亚型分析和行为预测建模)进行总结。

协议的发展

     规范化建模在统计学和测量理论方面有着悠久的历史,并在医学、经济学和神经科学等领域有着广泛应用。规范化建模的常见用例包括儿科生长曲线绘制、神经认知测试和研究生入学考试分数百分位的解释(例如,在医学院入学考试中获得第90百分位的成绩)。规范化建模的数学和计算发展已经过精细调整,目前作为开源Python软件包PCNtoolkit存在,这也是本文的重点。该工具包实现了许多常用的规范化建模算法,并支持多种行业标准数据格式(如NIFTI、CIFTI、文本格式)。为配合本协议,已编写了详尽的在线文档,可通过"read the docs"(https://pcntoolkit.readthedocs.io/en/latest)获取。这包括所有算法实现的示例数据教程、帮助新用户理解软件相关术语的词汇表,以及常见问题解答页面。还提供了一个在线论坛(https://gitter.im/PCNtoolkit/community),用于向PCNtoolkit核心开发团队提出问题、报告错误、请求新功能等。我们开发这些开源资源的目的是为了促进和鼓励使用规范化建模进行计算精神病学中的个体差异研究。

应用及与其他方法的比较 

     规范化建模已被应用于计算精神病学和其他领域的许多研究问题,包括自闭症谱系障碍、注意力缺陷多动障碍、阿尔茨海默病、双相障碍和精神分裂症。至关重要的是,这些应用表明规范化建模既能在存在显著病例-对照差异的情况下(在精神分裂症中观察到)检测个体差异,也能在不存在这种差异的情况下(在自闭症谱系障碍中观察到)进行检测。这突显了相对于群体均值理解个体变异的价值和互补性质。这些应用主要集中在从表型变量(即临床相关协变量,如年龄和性别)预测区域结构或功能神经影像数据(即生物学反应变量)。年龄为映射规范轨迹创造了一个自然的、随时间变化的维度,特别适用于个体从典型大脑发育或衰老轨迹偏离的应用。然而,神经影像预测建模研究中使用的其他表型,如一般认知能力、社会认知或持续注意力,也是作为协变量的理想选择,从而定义观察偏差模式的轴。规范化建模还被用于学习奖励敏感性和奖励相关大脑活动之间的映射。

     需要强调的是,规范化建模是一个用于映射异质性来源、将注意力重新聚焦于个体预测(而非群体均值,如诊断标签)并检测偏离常态个体的通用回归框架。因此,它并不局限于特定的算法或数学模型,尽管我们会根据研究问题和可用的输入数据推荐特定算法。PCNtoolkit中的算法倾向于贝叶斯而非频率派统计,因为贝叶斯方法的某些特征有助于更好地进行规范化建模估计。例如,参数的后验分布有助于更好地区分不同的不确定性来源,如区分变异('偶然不确定性'—增加数据也无法减少)和建模(或'认知')不确定性(可通过增加数据来减少)。这些规范化建模的不同用例(算法选择、用行为预测大脑或用大脑预测行为)将在下文"实验设计"部分详细解释。

    使用回归方法学习大脑和行为之间的映射有着悠久的历史。主成分回归、连接组预测建模(CPM)和典型相关分析(CCA)已成为连接大脑和行为的主流方法。这些方法展示了大脑-行为映射的可行性,为个体差异研究的蓬勃发展奠定了基础。虽然这些方法引发了大量好奇和兴奋,但它们在提供个体水平推断的能力上有限,仅提供点估计(即没有相关的变异百分位)。使用这些工具的大多数论文仅报告平均预测模型性能,将数百或数千人的信息压缩为单个数字(如模型准确度或回归性能)。规范化建模框架更进一步,量化和描述个体在统计上如何相对于预期模式而不同。通过这种方式,规范化建模打破了病例-对照范式固有的对称性。

     更具体地说,主成分回归和CPM在预测模型的构建方式上与规范化建模不同。主成分回归和CPM将回归模型设置为:Y是一个n_subjects × 1向量(即年龄或流体智力),由X预测,X是一个n_subjects × n_brain矩阵,其中n_brain通常是通过正则化步骤选择的降维特征空间。这种设置使得解释哪些大脑特征与行为相关变得非常困难。使用主成分回归或CPM的研究试图解释大脑特征权重,但由于这些方法通常使用功能性MRI(fMRI)连接组数据(包含连接和节点),解释往往会产生复杂的全脑可视化,信息量不大。这些模型在个体水平的输出是单个点估计,即每个受试者的预测行为得分。这些个体点估计随后通过将预测分数与真实行为分数相关、报告解释方差(R2)和计算准确度(均方误差)来总结。

    与主成分回归和CPM相比,规范化建模颠倒了回归设置,从X(一个n_subjects × n_covariates矩阵,包含年龄、性别、流体智力、研究点、数据质量指标等)预测大脑区域Y(一个n_subjects × 1向量)。每个大脑区域都有一个单独的回归模型。规范化建模在个体水平的输出包括预测的大脑得分、预测方差(分为建模和噪声成分)以及偏差分数(Z分数,表示每个受试者偏离规范范围的程度)。整体性能通过预测值与真实值的相关性、解释方差、标准化均方误差和平均标准化对数损失来评估。相比之下,CCA估计双重多变量关系,其中X和Y都是矩阵(X是n_subjects × n_brain矩阵,Y是n_subjects × n_behavior)。虽然CCA非常适合检测是否存在映射关系,但这仍然导致特征重要性难以解释,而且CCA极易过拟合,需要相对于适当的零分布仔细评估样本外指标,而这在实践中并不总是做到。与主成分回归和CPM一样,CCA也不提供个体的不确定性度量或偏差分数。

      病例-对照推断(如群体间的质量单变量t检验和患者与对照的分类)的例子可能是与规范化建模框架最有趣的比较。病例-对照方法通常要求组内存在同质的空间特征,其成功依赖于获得统计显著性(P < 0.05)。我们用一个例子来说明病例-对照推断的假设。要在fMRI任务期间检测对照组和创伤后应激障碍(PTSD)患者组之间杏仁核激活的组间差异,对照组中的所有个体需要有相似的杏仁核激活值,PTSD组中的所有个体也需要有相似的杏仁核激活值。然后,在严格的多重比较校正后,对照组的平均杏仁核激活信号必须与PTSD组的平均杏仁核激活信号存在统计学差异。这些假设忽视了不同的生物学过程(即一些人激活增加而其他人激活减少)可能导致相似外部行为的事实。规范化模型揭示了数据的另一面——精神疾病的传统诊断标签在基础生物学层面并不清晰,这意味着患者群体并不能通过统一的神经特征来很好地定义——并为病例-对照范式的局限性提供了明确证据。

     大脑年龄模型也属于规范化模型的同类,但通常更专注于解释加速/减速衰老或提高预测准确性。大脑年龄模型仅允许从年龄角度解释变异的百分位数,这是有限的,且在个体间生物学变异方面没有明确的解释。

"所有模型都是错的,但有些是有用的" ——乔治·E·P·博克斯(George E. P. Box)

    没有一种"最佳"的建模方法,本节提出的许多方法可能是互补的,因为它们研究不同的问题。在开始计算建模之旅之前,提出以下问题总是很重要的:这个模型做出了哪些假设?你想做什么类型的推断(群体水平、个体水平)?预测模型的哪个方面最重要(准确性、量化不确定性、统计显著性)?让你的研究问题来指导这些答案和模型选择。

实施协议所需的专业知识

     我们致力于使这个协议对神经科学领域的多样化群体都易于使用,包括那些非技术背景的人。本协议的基本目标是学习如何通过PCNtoolkit软件实施规范化建模框架,而无需成为统计学和机器学习专家。您将获得足够的知识来设置训练集和测试集、理解应该输入模型的数据、解释结果并基于结果进行推断。本协议的先决条件是对Python编程语言有基本的了解,以及一台具有稳定网络连接的计算机。完整的代码、示例数据和详尽的文档都随本协议提供;因此,无需从头编写代码。当然,我们希望读者能从本协议获得启发,并以更多方式使用规范化建模框架。如果您希望超出提供的代码范围使用本协议中的框架,那么熟悉Linux命令行、bash脚本编写、设置虚拟环境和向高性能集群提交作业也会有所帮助。

局限性

大数据需要自动化质量控制 

     随着数据集发展到满足成为群体水平或大数据的要求,通常需要依赖自动化质量控制(QC)指标。这意味着可能会无意中包含质量较差的数据,进而影响结果。本协议中使用的训练和测试数据集已经通过使用在线(基于JavaScript)图像查看器可视化每个受试者的原始T1加权体积及其相应的Freesurfer脑部掩模叠加图进行了手动质量检查。质量检查代码和进一步的使用说明可在GitHub上获取。这些图像被检查是否存在明显的质量问题,如过度的视野截断、运动伪影或信号丢失。被标记为存在质量问题的受试者被从样本中排除。如果用户希望向数据集添加额外的样本,应考虑对自己的数据进行手动质量检查。

     

多站点混淆因素和数据可用性 

     汇集来自多个站点的数据通常是创建多样化数据集并达到机器学习分析所需样本量的必要步骤。在合并来自不同研究的数据时,会出现几个挑战。首先,每个站点通常有不同的MRI扫描仪,也有不同的采集参数。这些MRI硬件和软件的差异产生了大量必须在建模数据时适当考虑的干扰变异。其次,可能存在采样差异,例如由于每个站点的纳入标准和诊断标签定义不同。例如,如果一个站点使用由熟悉DSM-5诊断标准的训练有素的心理健康专业人员执行的DSM-5结构化临床访谈(SCID-5),而另一个站点则依赖自我报告问卷数据来定义临床标签。这增加了临床组内的异质性(例如,通过混合不同队列的纳入标准),也可能给诊断标签增加噪声(例如,如果诊断评估在不同研究中有不同的可靠性)。在使用临床标签将数据分为训练集和测试集(即训练集中仅包含对照组)以及比较来自不同站点的患者组的规范化建模输出时,这一点很重要。

     此外,各站点之间的可用人口统计学、认知和临床问卷数据也可能存在差异,这在决定纳入哪些研究和使用哪些协变量进行建模时需要考虑。如果目标是共享模型,允许迁移到新样本,使用特定于您样本的独特协变量(而不是通常收集的)将阻碍他人在自己的数据上使用您的模型。关于新站点加入样本带来的收益与新站点增加带来的站点相关干扰变异之间,应该仔细权衡。

实验设计 

     在开始规范化建模分析之前,有许多选择和考虑因素需要仔细规划——决策点可以分为以下几个阶段:数据选择、数据准备、算法和建模、评估和解释。这些阶段及其对应的程序步骤编号在图2中总结。图3总结了运行规范化建模分析的其他资源和支持。

图片

图2:规范化建模框架的实践概述 

     工作流程包括四个阶段:数据选择、数据准备、算法和建模、评估和解释,这些在蓝色阴影框中用数字标示。每个阶段涉及的步骤在下方框中总结,并在上方图像中突出显示。在第3阶段:GPR,高斯过程回归;BLR,贝叶斯线性回归;HBR,层次贝叶斯线性回归。在第4阶段:PCA,主成分分析;ICA,独立成分分析;NMF,非负矩阵分解。

图片

图3:运行规范化建模分析的资源概述 

 a,详细文档可在https://pcntoolkit.readthedocs.io/en/latest获取,包括安装说明、Python包中所有类和函数的输入/输出描述、所有算法的教程、常见问题解答、解释缩写和其他术语的词汇表、现有规范化建模文献参考和引用指南。

    b,显示pcntoolkit软件中主要函数estimate的必需输入和预期输出的文档示例。

    c,本协议使用的所有代码和数据都可以通过Google Colab在云端运行。其他教程(如a中教程标题下所示)也可在Google Colab中运行。

数据选择:参考队列纳入标准 

     创建将作为"规范"参考队列的训练数据集是第一个重要决定。理想情况下,训练数据集应该是一个大型且具有代表性的样本,所包含的受试者不应缺失重要的人口统计学(年龄、性别)或生物学(神经影像)数据。然而,如有必要可以使用数据插补,但应谨慎使用。在大多数研究中,数据的缺失并非随机,而且我们解释的不仅仅是平均效应。在这种情况下,均值插补可能会使结果产生偏差,应考虑其他形式的插补。重要的是,参考队列要为测试集(如临床)群体提供良好的覆盖(互补的协变量)。

     参考队列(训练集)的样本量在规范化建模中很重要,但我们强调这与经典的功效计算关注点不同,后者针对的是完全不同的问题(即确定在给定显著性水平下检测特定效应量的群体水平比较所需的样本量)。相比之下,规范化建模通常关注在个体水平上量化与参考模型的偏差。在这种情况下,参考队列的规模主要通过影响预测目标表型(即响应变量)的准确性和精确性来影响测试集的偏差分数。随着样本量增加,预测区间会缩小,从而提高检测个体差异的敏感性。然而,并没有特定的临界点代表理想的样本量,我们强调背景至关重要。例如,您可以为重度抑郁障碍(MDD)患者样本建立临床规范模型,目的是进行分层或检测亚组(有复发发作的个体或对药物治疗无反应的个体)。在这种情况下,参考队列可能包括经历过单次MDD发作和对药物治疗反应良好的个体。由于数据可用性的限制(例如,临床数据集通常有更严格的数据共享要求),这个规范化建模研究问题的样本量可能相对较小。这个MDD示例的主要启示是,样本量高度依赖于研究问题,而研究问题又指导了您想要测量偏差的参考队列的纳入标准。

     如果您在建模"健康"生命周期群体,由于可以利用大量公开共享的数据,样本量可能会很大(数千量级)。另一方面,如果您想建模特定的临床群体或特定的功能任务,由于数据可用性的限制,样本量会较小。一个能够恰当解决当前研究问题的较小数据集是完全可以接受的。

数据选择:协变量选择 

     下一个选择应该是关于包含哪些协变量。包含协变量的主要标准之一是与所提出研究问题的相关性。在规范化建模中,我们通常对研究群体规范的偏差感兴趣;换句话说,我们更关注残差。因此,当我们在设计矩阵中包含协变量以估计规范模型时,我们主要关注的是从残差(即偏差)中去除其效应,而不是研究其对神经影像变量的影响。规范化建模是研究未知因素(编码在偏差中)的工具。为此,我们需要首先通过将已知变异从数据中回归出来(因此我们在协变量中包含已知因素)来解释数据中的已知变异,然后解释偏差分数中的残余变异。例如,如果您想了解吸烟对腹侧纹状体的影响,且这种影响不受其他物质使用的混淆,您应该在协变量矩阵中包含物质使用变量(如每周饮酒量等),估计规范模型,然后将腹侧纹状体偏差分数(已去除饮酒的影响)与吸烟频率相关联。

     当汇集来自多个站点的数据时,各站点可用的测量指标可能会影响协变量的选择,因为理想情况下,变量应在站点间保持一致。例如,您不应使用不同版本的认知测试,因为它们可能测试一般认知能力的不同维度。对于神经发育或生命周期模型,建议包含的最少协变量包括年龄、性别、站点(使用随机或固定效应)以及可选的数据质量指标(如平均帧间位移或Freesurfer欧拉数)。

     建模站点非常重要;然而,详尽的解释超出了本协议的范围,但参见文献20,21以了解建模站点变异的深入说明。诊断标签也可以作为协变量包含在内,以利用这些标签解释的变异,而不将映射仅限于反映病例-对照差异。此外,还可以包括其他生物学协变量,如血液生物标志物,或在预测功能性脑测量时包括结构性脑测量。其他或替代的协变量可能包括其他人口统计学特征(种族、民族、性别、教育水平、婚姻状况、家庭收入)和认知变量。

数据选择:MRI模态和脑数据的空间分辨率 

      接下来,需要决定要建模的脑成像模态。在本协议中,我们使用来自结构性MRI(T1加权)图像的皮层厚度和皮层下体积测量。然而,在这个阶段也可以选择其他模态,如静息态和任务态fMRI或弥散加权MRI(本协议不提供这些模态的数据)。考虑脑数据的分辨率时要牢记建模更小单位会增加计算复杂性。顶点或体素级别的脑数据建模可以提供高分辨率的偏差图。不过,感兴趣区(ROI)水平的建模可能更容易解释/可视化输出偏差图,并且在偏差图的事后分析(如果进行)中多重比较校正的惩罚会更低。PCNtoolkit可以并行运行模型以加快计算时间;然而,仍然存在单变量性质,意味着为每个脑区拟合单独的模型。这种单变量方法没有解决(f)MRI数据中存在的空间自相关或功能异质性(功能错配)问题。

     空间自相关指的是MRI数据中存在的复杂空间相关模式。邻近区域通常比远处区域更相关;因此,它们在统计上不是独立的。由于空间相关的异质性、复杂性以及有限样本量下的高维性,这些相关很难建模。

     马尔可夫随机场、网络/图论(拓扑)和空间贝叶斯潜因子方法等技术已被应用于解决原始或预处理MRI数据中的空间自相关问题。在规范化建模背景下,使用克罗内克代数和低秩近似来构建多变量规范模型也取得了进展。在规范化建模的背景下,我们建议特别注意图像配准以正确建模功能区域,因为功能区域在个体间的空间重叠并不能得到保证。除了采取额外措施来对齐fMRI数据外,相比于建模单个体素或分区(通常在结构性MRI中使用),建模脑网络可能更有益,因为这些特征能更好地捕捉功能单元的空间模式。

数据准备:预处理和质量检查 

     为本协议的目的,已经整理和共享了示例数据。如上文"数据选择:MRI模态和脑数据的空间分辨率"部分所述,我们使用结构性MRI并运行Freesurfer来提取皮层厚度和皮层下体积测量。如果使用本协议提供数据以外的数据(即您自己的数据),您需要相应地对其进行预处理,并进行质量检查以确保只包含高质量数据。

数据准备:设置计算环境 

     在这个阶段,您将创建Python虚拟环境并安装所需的Python包。然后您将克隆包含遵循程序所需的所有代码和数据的GitHub仓库。您可以使用Google Colab在云端运行整个协议,或选择在自己的计算机或服务器上运行代码。

数据准备:格式化设计矩阵(站点效应) 

     单个扫描站点很少能获取足够大且能准确代表一般人群的样本。因此,通常需要汇集在多个MRI中心获得的数据。

     一些项目,如ABCD研究,在数据收集之前就计划了多站点汇集,因此开始就协调统一了扫描协议。相比之下,其他项目,如ENIGMA,则是在数据收集后进行组合,且在数据收集前没有协调统一扫描会话。如果可能的话,为了消除额外的变异来源,多站点汇集数据应使用相同的流程和软件版本进行预处理。然而,由于数据共享限制和健康数据隐私,原始数据可能无法获得,使得数据收集前或后的协调统一工作无法进行。数据协调技术,如COMBAT,旨在作为预处理步骤在进行进一步分析之前去除数据中与站点相关的变异。

     协调统一存在一些问题,主要是所有与批次效应(即站点相关变异)相关的变异源都被去除了,这可能会无意中从数据中去除重要的、未知的、具有临床相关性的变异。COMBAT还要求用户在协调时能访问所有数据,这可能会影响数据隐私。因此,我们不建议用户在准备数据集进行规范化建模时关注数据协调技术。在PCNtoolkit中实现的层次贝叶斯回归(HBR)已经过充分开发和测试,可以解决在规范化建模中使用多站点数据时的这些挑战。HBR在规范化模型估计阶段使用贝叶斯层次模型估计站点特定的平均效应和变异,从而产生与站点无关的偏差分数(z统计量)。当使用偏差分数作为后续解释分析的特征时,协调技术(如COMBAT)和HBR规范化建模之间的这种区别非常重要,因为已经证明协调会在下游分析中过度夸大置信度。

数据准备:训练-测试集划分 

    虽然对于选择训练和测试数据的相对比例没有硬性规定,但可以考虑一些可能有帮助的一般指导原则。

     一方面,重要的是要确保训练集足够大,以便能以足够的准确性和精确性对目标表型进行建模。另一方面,确保测试集不要太小也很重要,这能为检测下游差异提供足够的敏感性(这可能取决于测试集中临床相关偏差的预期频率)。在实践中,70%训练、30%测试的划分或80%训练、20%测试的划分通常能在这些相互竞争的目标之间提供合理的平衡,但在某些应用中可能需要偏离这些建议。训练-测试集划分的主要目的是建立样本外泛化性,并确定是否存在过拟合(或欠拟合)现象。比训练-测试集的具体比例更重要的是,我们认为关注在训练-测试集划分中保持样本特征是至关重要的。例如,在参考队列中建模儿童期和青春期的年龄范围,而测试队列包含晚年期年龄,这是不合理的。这种情况会由于没有正确建模目标群体而在测试集中检测到高偏差。

     如果您想研究某个特定临床组(如精神病诊断个体)是否比对照组(无精神病诊断个体)具有更极端的偏差模式的假设,您需要验证这是因为他们是患者,而不是因为他们在测试集中。为了验证这一点,重要的是还要在测试集中包含一些对照(来自与患者相同成像站点的对照)。换句话说,如果您没有对照参考数据,就无法区分站点变异和诊断变异。

     训练-测试比例的决定自然与上文"数据选择:参考队列纳入标准"部分提到的参考队列样本量要求相关,在创建训练-测试集划分时需要考虑相同的背景。这种划分是否符合所提出的研究问题?更具体地说,训练集是否充分匹配参考("规范")队列,测试集是否代表将解释偏差(相对于参考队列)的目标队列?

     我们不建议使用交叉验证或反复将数据集重新采样为训练集和测试集,除非数据集非常小,如果使用交叉验证,实践者应该意识到它带来的问题。理想情况下,数据集的训练-测试划分只进行一次。虽然交叉验证对于测试模型对扰动的稳定性和敏感性很有用,但它也会导致产生多个不容易组合和解释的模型,并在折叠之间引入依赖性,这违反了大多数参数统计检验。

算法和建模:算法选择 

      在数据被仔细选择和整理之后,就该进行规范化建模实施了。有几种实现规范化模型的算法,包括高斯过程回归(GPR)、贝叶斯线性回归(BLR)、层次贝叶斯回归(HBR)、位置尺度和形状的广义加性模型(GAMLSS)、神经过程、随机特征近似和分位数回归,其中许多都在PCNtoolkit软件包中实现(表1)。这些算法具有不同的特性,取决于它们建模非线性效应的能力、扩展到大数据集的能力(就计算时间而言)、处理随机或固定效应的能力(例如,建模站点效应)、建模异方差或非高斯噪声分布的能力,以及它们在联邦或分布式学习环境中使用的适用性。表1中概述了这些算法实现。GPR在规范化建模的早期阶段被广泛使用,它可以灵活地建模非线性效应,但当训练数据增加时(即超过几千个数据点)计算效率不高。在本文中,我们关注BLR(贝叶斯线性回归),它具有高度可扩展性(大样本计算时间快)和灵活性(可以迁移到训练样本中未包含的新站点,并可以与似然扭曲结合以建模非高斯效应)。HBR是另一个有吸引力的选择,因为它已被用于更好地处理多站点数据集,允许迁移学习(例如,对未见站点的预测),并可以在联邦学习框架中估计,这在存在隐私concerns和/或共享限制导致数据不能轻易在单个计算站点汇集时很有用。

表1 PCNtoolkit规范化建模算法概述

图片

PCNtoolkit中的随机特征近似和神经过程算法没有很好的文档记录,也没有可用的教程;因此,这些算法未包含在表格中,仅推荐给能够自行实现代码的高级用户。

a PCNtoolkit中实现的普通GPR算法无法对非高斯性进行建模,且在大型数据集上的扩展性不佳。然而,这是一个实现问题,有一些GP算法的版本满足这些标准。

b 在R中实现;请参见GitHub仓库: https://github.com/dinga92/gamlss_normative_paper

评估和解释 

     剩余步骤,包括评估模型性能、解释模型拟合,以及规范化建模输出的事后分析想法,将在程序部分更详细地介绍。

材料

设备

  • 计算基础设施:一台Linux计算机或HPC(SLURM或Torque),有足够空间存储训练集和测试集的影像数据重要提示如果无法使用Linux计算机或服务器,也可以在Google Colab上免费运行本协议(https://colab.research.google.com/github/predictive-clinical-neuroscience/PCNtoolkit-demo/blob/main/tutorials/BLR_protocol/BLR_normativemodel_protocol.ipynb)。如果使用Google Colab,只需要一台安装了现代网络浏览器(如Chrome或Firefox)且有互联网连接的计算机。

  • Python安装(https://www.python.org/downloads/)

  • 推荐:使用Anaconda或虚拟环境来管理所需的Python包(https://www.anaconda.com/ 或 https://virtualenv.pypa.io/en/latest/)

  • 通过pip安装PCNtoolkit Python包0.20版本(及其依赖项)(https://pcntoolkit.readthedocs.io/en/latest/pages/installation.html)

  • 用作预测变量的人口统计学和行为数据,如年龄、性别、站点/扫描仪ID、种族/民族、认知、数据质量指标(如果是结构像则为欧拉数,如果是功能像则为平均帧间位移)

  • 要建模的生物学数据,如结构性MRI(皮层厚度、表面积、皮层下体积)和fMRI(分区任务激活图、静息态网络)。示例结构性MRI数据集可在 https://github.com/predictive-clinical-neuroscience/PCNtoolkit-demo/tree/main/data/ 获取

程序

重要提示

     数据选择阶段(图2中的第1阶段)不需要代码,因为这更像是研究问题的形成阶段(即选择纳入标准和要建模的影像模态类型)。在开始程序之前已经完成了数据预处理(运行Freesurfer)和质量检查,本协议不包含运行Freesurfer或其他预处理的代码。因此,对于本协议,程序从"数据准备:设置计算环境"阶段开始。如果使用不同于协议提供的数据,请参见"实验设计"部分获取关于数据选择阶段和预处理的指导。

数据准备:准备计算环境 

用时1-3分钟

1.首先使用以下命令克隆GitHub仓库。该仓库包含必要的代码和示例数据。然后使用pip安装Python包并将它们导入Python环境(可以是Google Colab或计算机上的本地Python安装),如下所示:git clone https://github.com/predictive-clinical-neuroscience/PCNtoolkit-demo.git

图片

数据准备:准备协变量数据 

时间 5-8分钟

2.数据集(在步骤1中下载)包括来自人类连接组计划青年成年人研究(https://humanconnectome.org/study/hcp-young-adult)和IXI(https://brain-development.org/ixi-dataset)的多站点数据集。在这一步骤中也可以使用不同的数据集(即您自己的数据或其他公共数据集)。如果在此处使用您自己的数据,建议加载示例数据以查看列名,以便将您的数据与此格式匹配。使用pandas读取数据文件,然后使用以下命令将每个站点的协变量(年龄和性别)数据合并到单个数据框(命名为cov)中。这个协变量数据框的列代表预测变量。根据研究问题,可以在此处添加额外的列。

图片

数据准备:准备脑数据 

时间 10-15分钟

3.接下来,使用以下命令格式化和合并MRI数据。示例数据包含通过运行Freesurfer(版本6.0)的recon-all估计的皮层厚度图。通过使用Desikan-Killiany图谱的ROI降低了数据的维度。还建议将欧拉数(https://mathworld.wolfram.com/EulerCharacteristic.html)作为协变量包括在内,因为这是数据质量的代理指标。每个受试者的recon-all输出文件夹中的欧拉数被提取到文本文件中,并合并到皮层厚度数据框中。欧拉数是特定于站点的;因此,为了在站点之间使用相同的排除阈值,重要的是通过从一个站点的所有受试者中减去站点中位数来使站点居中。然后取平方根并乘以-1,排除任何平方根>10的受试者。

图片

关键步骤 

    如果可能,应该对数据进行视觉检查,以验证数据包含不是太严格或太宽松。应该手动检查超过欧拉数阈值的受试者,以验证和证实由于数据质量差而排除他们是合理的。这只是PCNtoolkit开发者使用的自动QC方法之一。其他方法,如ENIGMA QC流程(https://enigma.ini.usc.edu/protocols/imaging-protocols)或UK Biobank的QC流程也是自动QC的可行选择。

数据准备:检查协变量和脑数据框中的受试者(行)是否对齐 

时间 3-5分钟

4.规范建模函数要求协变量预测器和脑特征在单独的文本文件中。但是,首先使用以下命令将它们(内部)合并在一起很重要,以确认每个文件中有相同的受试者,且行(代表受试者)对齐。这要求两个数据框都有'subject_id'作为列名。一旦确认,排除带有NaN值的行,并使用以下命令将脑特征和协变量预测器分离到它们自己的数据框中。

图片

关键步骤 

     roi_ids是一个代表将被建模的脑区的变量,如果您不希望为整个大脑运行模型,可以用它来选择数据框的子集。

数据准备:添加变量以建模站点/扫描仪效应 

时间 3-5分钟

5.目前,不同的站点编码在单个列(命名为'site')中,并表示为字符串数据类型。然而,PCNtoolkit需要二进制变量。使用pandas包按如下方式解决这个问题,它有一个内置函数pd.get_dummies,该函数接收字符串'site'列并对站点变量进行虚拟编码,这样现在每个站点都有一个列,这些列包含二进制变量(0=不在此站点,1=存在于此站点)。

图片

数据准备:训练-测试集分割 时间 5-10分钟

6.在这个例子中,我们使用80%的数据用于训练,20%用于测试。在使用您自己的数据进行此步骤时,请仔细阅读有关训练-测试集分割考虑因素的实验设计部分。使用scikit-learn的函数(train_test_split),使用站点变量来分层训练-测试集分割,以确保训练和测试集都包含来自所有站点的数据,使用以下命令。接下来,使用以下命令确认您的训练和测试数组大小相同(列)。训练和测试数组中的行(受试者)不需要相同大小,因为训练(80%)和测试(20%)集中有不同比例的样本,但列代表协变量和响应,这些应该在训练和测试数组中相同。换句话说,训练和测试集中的受试者数量(行)不同,但每个受试者必须具有相同的脑区集(响应)和协变量变量。

关键步骤 

     如果一个站点的所有数据只在测试集中,模型就不会学习站点效应。因此,我们使用站点变量来分层训练-测试集分割。

7.当数据被分割成训练和测试集时,行索引没有被重置。这意味着训练和测试数据框中的行索引仍然对应于完整数据框(在分割数据发生之前)。测试集行索引告知哪些受试者属于哪个站点,这些信息需要用来评估每个站点的性能指标。重置训练-测试数据框的行索引可以解决这个问题。然后将站点行索引提取到列表中(每个站点一个列表),并创建一个名为site_names的列表,用于决定评估模型性能的站点,如下所示:

图片

数据准备:设置输出目录 

时间 1-3分钟

8.使用以下命令将每个脑区保存到其自己的文本文件中(在单独的目录中组织),因为对于每个响应变量Y(例如,脑区),我们拟合一个单独的规范模型。

图片

算法和建模:使用B样条的基函数展开 

时间 1-3分钟

9.现在,使用以下命令设置B样条基函数集,这允许我们使用线性模型执行非线性回归。这个基函数被故意选择为不太灵活,以便它只能建模相对缓慢变化的趋势。要增加模型的灵活性,您可以更改参数化(例如,通过向B样条基函数添加节点点或增加插值多项式的阶数)。请注意,在神经影像文献中,更常用的是使用多项式基函数展开。分段多项式(如B样条)优于多项式基函数展开,因为它们不会引入全局曲率。有关使用B样条的更多详细信息,请参见Fraza等人引文25。

图片

算法和建模:估计规范模型 

时间 每个模型3-5分钟(乘以ROI/模型的数量)

10.设置一个变量(data_dir),指定在步骤7中创建的ROI目录的路径。初始化两个空的pandas数据框,其中评估指标是列名,如下所示;一个将用于总体测试集评估(blr_metrics),一个将用于特定站点测试集评估(blr_site_metrics)。在估计规范模型后,这些数据框将被保存为单独的csv文件。

图片

11.使用for循环遍历脑区来估计规范模型,使用以下命令。estimate函数使用一些值得注释的特定参数:

     alg = 'blr':指定我们应该使用BLR。参见表1了解其他可用算法

    optimizer = 'powell':使用Powell的无导数优化方法(在这种情况下比L-BFGS更快)

     savemodel = False:不将最终估计的模型写入磁盘

     saveoutput = False:直接返回输出而不是将它们写入磁盘

     standardize = False:不对协变量或响应变量进行标准化

     一个重要的考虑因素是是否要重新缩放或标准化协变量或响应。虽然这通常只对最终模型精度有轻微影响,但它对模型的解释和配置方式有影响。如果协变量和响应都被标准化(standardize = True),模型将返回标准化系数。如果(如本例中)响应变量没有标准化(standardized = False),那么协变量和响应的缩放将反映在估计的系数中。此外,在这里采用的线性建模方法下,如果系数未标准化且没有零均值,则需要向设计矩阵添加一个截距列(这在上面的步骤9(B样条)中完成)。

图片

关键步骤 

     这段代码将遍历roi_ids列表(在步骤4中创建)中的每个ROI,使用BLR并在独立测试集上评估模型。原则上,我们可以一次性在整个数据矩阵上估计规范模型(例如,响应变量存储在n_subjects乘以n_brain_measures的NumPy数组或文本文件中,而不是保存在单独的目录中)。然而,迭代运行模型提供了一些额外的灵活性,因为它不要求每个脑测量包含的受试者都相同。

评估和解释:评估规范模型性能 

时间 5-10分钟

12.在步骤11中,当我们遍历roi_ids列表(在步骤4中创建)中的每个ROI并在独立测试集上评估规范模型时,它还计算了评估指标,如解释方差、平均标准化对数损失和真实值与预测测试响应之间的皮尔逊相关。评估指标是针对完整测试集计算的,并针对每个扫描站点单独计算的。这些指标被保存到csv文件中。在这一步中,将评估指标加载到pandas数据框中,并使用describe函数显示每个评估指标的范围、均值和标准差,使用以下命令。表2显示了如何解释良好模型拟合的范围/方向。

图片

图片

评估和解释:可视化规范模型输出 

时间 15-20分钟 

13.有几种方法可以可视化步骤12中的评估指标。通常会在不同脑区拟合许多模型,要跟踪所有脑区的性能可能需要大量工作。数据可视化将有助于理解是否存在任何新出现的模式,并找出模型拟合不佳的任何脑区(或特定站点)。通过计算测试集中有多少受试者具有"极端"偏差(正偏差或负偏差)来总结偏差分数,并使用单独的Python笔记(https://github.com/predictive-clinical-neuroscience/PCNtoolkit-demo/blob/main/tutorials/BLR_protocol/visualizations.ipynb)将极端负偏差和正偏差的计数在3D脑图上可视化。

评估和解释:使用规范建模输出的事后分析思路 

时间 1-2小时 

14.使用规范建模输出(偏差分数)可以进行许多有趣的分析。对这些分析中的每一个进行深入教程超出了本协议的范围。但是,在GitHub(https://github.com/predictive-clinical-neuroscience/PCNtoolkit-demo/blob/main/tutorials/BLR_protocol/post_hoc_analysis.ipynb)上,我们包含了以下事后分析的代码示例(可以通过Colab运行的Python笔记本):

  • 使用偏差分数作为回归和分类的预测变量,并将其性能与使用真实数据作为预测变量进行比较。提供了实现几个常见预测建模框架(在与其他方法比较部分中提到的)的代码。规范建模的偏差分数可以用作这些预测建模框架中的任何一个的输入特征

  • 使用预训练的规范模型并将其迁移到新的、未见过的数据集

  • 对偏差图进行经典的病例-对照检验(单变量t检验),并与对真实数据的单变量t检验进行比较

故障排除 

   我们重申,在 https://pcntoolkit.readthedocs.io/en/latest 上有额外的在线文档,包括其他算法实现(GPR和HBR)的额外教程、用于说明软件相关术语的词汇表、包含规范建模出版物链接的参考指南,以及一个常见问题页面,其中详细讨论了许多常见错误(及其解决方案)。在规范建模分析故障排除时遇到的问题可分为三类:计算错误、数据问题和对输出的误解或误读。

时间 

     规范建模部分(包括评估和可视化)可在约57-72分钟内完成。如果使用规范建模输出的额外事后分析代码(步骤14),需要增加约1-2小时。这些时间估计是基于使用Google Colab平台运行代码。在您自己的计算机上运行此协议(需要安装Python和依赖项)将增加协议所需时间。

预期结果 

      运行规范模型分析会产生多个最终产品。首先,每个模型(脑区)的评估指标被保存到文件中。在本协议中,我们将指标保存为CSV文件格式;但是,在pcn.estimate()函数中,您可以设置参数'binary = True',这将以pickle (.pkl)格式保存指标。如果您在大型数据集上并行估计许多模型,Pickle格式是很好的选择,因为它通过避免读/写中间文本文件而更快。这些指标进一步汇总为每个站点的指标,以检查测试集中包含的每个站点的模型拟合情况。表2总结了评估指标的简称和全称以及简要的解释指南。评估指标可以用多种格式可视化,包括直方图/密度图、带有拟合百分位的散点图或脑空间可视化。图4显示了这些可视化的几个例子,创建这些图的代码已在GitHub上共享。应该对规范模型评估指标进行质量检查,以确保正确的模型估计。如果模型很好地拟合数据,评估指标应该遵循高斯分布。模型估计(步骤11)应该正确处理混杂的站点效应;尽管如此,检查每个站点的指标也是个好主意,以确保模型对所有站点的拟合程度相同,并且没有明显的站点异常值。除了总结级别的评估指标外,还有许多个体指标(每个模型/脑区每个受试者一个值)。这些个体级别的输出对解释非常有帮助,因为它们精确量化了每个预测值在大脑各个位置的不确定性。如果某个个体被识别为具有"极端"偏差,且不确定性较低,您可以确信这是一个生物学上有效的发现,而不是由于建模错误。反之,如果存在极端偏差和高水平的不确定性,对这些结果的解释应该更加谨慎,偏差可能是由于建模错误而不是真实的生物变异。不确定性估计被分为两个组成部分(噪声和建模,见表2描述)以帮助确定不确定性的来源。

图片

图4:规范模型评估指标的可视化

    a. 脊线图显示了测试集中每个站点的标准化均方误差(SMSE)在所有脑区的分布,这是一个代表准确性的评估指标。对每个测试站点进行可视化可以帮助识别模型表现不佳的站点。理想情况下,分布将是高斯分布,并在所有站点看起来相似。站点之间平均值的小幅偏移,如此处所示,是可以预期和可接受的。

    b. 显示了Destrieux分区中每个脑区的皮层厚度和皮下区域体积的解释方差。在脑空间中可视化评估指标有助于识别模式并看到全局图景。

    c. 统计测试集中每个个体的极端偏差(正负)数量;使用组ID绘制每组极端偏差计数的分布。可以对计数进行统计检验,以确定组间是否存在显著差异。测试偏差计数的组间差异不要求组内偏差在空间上重叠(即,此测试可以解释偏差的组内异质性)。

    d. 一个示例脑区(侧脑室)的规范轨迹,显示年龄(x轴)与预测体积(mm3)(y轴)的关系。变异的百分位数由线条和阴影置信区间显示。测试集中的每个受试者都被绘制为单个点。

    e,f. 极端偏差分为正(e)和负(f),按组进行汇总。对于每个脑区,计算该区域有极端偏差的受试者数量,然后除以组样本量,以显示具有极端偏差的受试者百分比。这些可视化展示了规范建模的优势,因为存在组内异质性,其他方法(即病例-对照组差异检验)无法处理。

HC,对照组;MDD,重度抑郁障碍;SZ,精神分裂症;SAD,社交焦虑障碍;EP,早期精神病。

     PCNtoolkit软件用于规范建模的一个优势,使我们的方法区别于其他规范建模实现,是模型允许的精细分辨率。其他规范建模工作主要关注建模总脑容量或灰质容量等粗略特征,这对于应用于精神健康状况和神经发育障碍的规范建模来说是不够的,因为效应是微妙的且广泛的(患者组内的个体倾向于在不同区域偏离;图4e,f)遍布皮层和皮下,平均大脑区域通常会忽略这些难以捉摸的精神病效应。这种分辨率还允许更好的机制理解,因为您可以以高空间精度量化每个个体的偏差和相关的不确定性。

     可靠性(测量给出非常一致结果的程度)和有效性(测量衡量其应该衡量的程度)是解释结果时需要牢记的重要概念。在最近的工作中,通过复制建立了使用结构性MRI测量精神分裂症和双相障碍的规范建模的可靠性。有效性可以说更难评估,但应通过样本外模型拟合来建立。在其他最近的工作中,使用寿命(3-100岁)大数据样本(N = 58,836)拟合规范模型,并在样本外(不包括在训练集中的样本和站点)仔细测试(解释方差、偏度、峰度和标准化均方误差),显示出优秀的模型拟合(12-68%的解释方差)。这项工作表明了有效性,但这是一个持续的评估,必须始终考虑和报告样本外模型拟合。

计算错误 

      计算错误可能涉及Python或计算机硬件。潜在的Python错误可能包括Python的安装或必要包及其依赖项的安装。我们建议使用Anaconda在您的系统上安装Python 3.8(本协议需要),并为PCNtoolkit使用虚拟环境,以确保规范建模所需的包不会干扰您系统上可能安装的其他Python版本和包。一般来说,为每个项目或分析设置虚拟环境是很好的。如果您不熟悉设置虚拟环境,并遇到Python问题,通过Colab在云端运行分析始终是一个选项,这样就不需要在您自己的系统上设置Python。硬件问题可能包括缺乏存储数据的内存或由于过时的硬件导致模型运行非常慢。这些硬件错误没有简单的解决方案,如果您的个人计算机或服务器非常慢或缺乏存储空间,我们建议使用Google Colab运行规范建模分析。

数据问题

     可能遇到的数据问题包括非随机缺失的数据(关于使用数据插补的注意事项,请参见"实验设计")、编码不当的数据(即字符串而不是整数或浮点数,NaN值编码错误)、协变量设计矩阵中列的共线性或不符合生物学意义的异常数据(即负的皮层厚度值、负的年龄值)。虽然这些数据错误在故障排除时可能非常令人沮丧,但通常可以通过仔细检查输入数据的质量并根据需要删除不良的ROI或受试者来修复。

解释混淆 

      最后,解释混淆的一个例子可能是模型在某个脑区或站点的表现不佳。这通常可以通过返回输入数据进行额外的质量检查来解决,以确认性能不佳不是由于数据质量问题造成的。如果没有数据质量问题,那么可能确实是模型对某些脑区拟合不好,您可能需要考虑在模型中包含额外的协变量来帮助解释更多的方差。另一个解释混淆可能出现在看到负的解释方差值时。在样本外测试时,解释方差不限于为正;如果是负的,这意味着模型拟合非常差(比仅有截距的模型更差)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值