使用时间信号分解和多变量模式分析结合的方法从混合脑电脑信号中解码表征

本教程致力于将时间信号分解方法(RIDE,残差迭代分解)与多变量模式分析(MVPA)结合起来,探讨脑电信号中不同信息成分编码表征的时间稳定性问题。本教程展示了如何预处理EEG数据,以及基于MATLAB的RIDE和MVPA工具箱的设置和使用。本文发表在STAR Protocols杂志。

写在开始前

脑电图(EEG)是认知神经科学中最广泛使用的技术之一,而“表征”是当代认知神经科学的核心。脑电信号实际上是各种不同来源的信号组合,同时编码了信息的不同成分(例如在目标导向行为的情境下)。根据认知功能的总体理论概念,感知过程、运动过程和这些过程之间的关系,都储存在一个共同的表征格式中。由于存在"共同编码 "现象,我们必须考虑在电生理信号中存在可分离的编码。该编码已证实可通过残差迭代分解(RIDE)来实现分离,而表征内容的动态变化则可以通过多变量模式分析(MVPA)来研究。

这种同时编码的信息,在表征激活/失活的方式上很可能是不一样的。因此,分解脑电信号并使其与MVPA相结合,将有助于将研究重心从功能定位转移到如何同时表征信息的各个成分,并实现目标导向行为。

任何基于''共同编码''原则的研究皆可从中受益,因为该方法可以对共同编码信息中的不同成分进行精细分析。该方案适用于:1)外部事件与脑电生理过程具有锁时性,2)且不能基于不同的空间信息(即头皮的地形)使用独立成分分析(ICA)分离过程的情况。而ICA适用于:1)存在空间权重不同的独立源成分;2)且波动独立于时间的情况。该方案在ICA适用性受限时依然可行(如,源活动高度相关但头皮分布不同的情况,或源活动不相关但头皮地形活动高度相似等)。

本文基于Petruo等人(2021)的文章,提出了将RIDE和MVPA的方案,并阐明如何将二者结合起来,以深入了解脑电信号不同成分编码过程的时间稳定性。

文章首先介绍了ADAM MVPA工具箱。该工具箱可通过反向解码(BDM)和正向编码模型(FEM)实现EEG或MEG的多变量分析。

文章还会介绍ADAM的替代包——MVPA Light工具箱。

注:以上工具箱均基于Matlab。本教程介绍了如何对经过RIDE时间分解的脑电数据进行分类和时间泛化分析。然而该教程无法替代其他同类解码方法。强调:本文所展示的代码均为精简后的内容,仍需使用者根据自身数据条件及被试自行修改。详情可参考RIDE、ADAM MVPA工具箱。

数据采集

时间分解和MVPA在许多脑电实验中是可以结合使用的。但RIDE和MVPA对输入数据都有要求,其适用于适当的样本量、任务设计(例如,试次数量、试次长度)、传感器数量(例如,电极数量)以及必要的预处理步骤。RIDE分解的数据进行MVPA(分类和时间泛化)没有额外要求。 本文使用Petruo等人2021的数据集(N=86,健康青年)。为了方便读者跟随教程练习,Takacs公开了20名被试样本。这20名被试参与的是一项测试认知灵活性的转换任务。该项任务包含一个基于线索的子任务和一个基于记忆子任务。两个任务作为独立的block交替出现,各有198个试次(由于本教程不涉及认知灵活性理论验证,实验详请参见Petruo et al., 2021)。

相关信息:对于感兴趣的读者,我们推荐以前的论文中成功结合RIDE和MVPA的方法部分,以研究刺激-反应结合(Takacs等人,2020a)、反应-反应绑定(Takacs等人,2021)和抑制控制(Prochnow等人,2021)。

注:该数据采用60个Ag/AgCl等距电极,在光线昏暗条件下,使用BrainAmp放大器和Recorder软件记录下来的。采样率500Hz。接地电极和参考电极坐标分别为:θ=58,φ=78,及θ=90,φ=90。该教程适用于任何可用的研究级脑电系统。

预处理:

在采集完毕后,Takacs使用BrainVision Analyzer 2软件包对数据进行预处理。预处理遵循两个原则:1)预处理与同一任务范式的研究保持统一,2)确保满足RIDE的要求(参见准备工作一:建立RIDE)。

注:预处理未必会改善MVPA的结果。此外,大多数对MVPA至关重要的预处理步骤可在ADAM中完成(详见定义配置设置)。然而,由于MVPA预处理缺乏统一标准,EEG数据的标准,且RIDE-MVPA组合存在附加效应,还建议使用已预处理过的数据。即,在RIDE分解之前,对数据进行滤波,之后使用ICA校正眼电、心电伪影,分割时间窗并基线校正,最后清除其余伪影:

一、信号降采样256 Hz。

二、进行0.5–20 Hz的高低通滤波,及50 Hz的凹陷波滤波(斜率48 dB/oct)。

三、手动检查数据,删除非任务段数据和明显的技术伪影。

四、使用ICA(infomax算法)去眨眼、水平及垂直眼动、心电伪影。

五、针对不同条件分割时间窗口。该条件可以是不同的任务集,或任务重复条件和任务切换条件,或分别对基于线索和记忆的block。(并且只针对正确反应的试次,分段从刺激呈现前200毫秒开始,到呈现后1000毫秒结束)。

注:无论是当前教程、还是Petruo本身的处理,都没有引入特定于针对任务集(即子条件)的结果。然而我们建议将数据以最小的、有意义的单位进行分割,以进行潜在的故障排除。

六、自动去伪影(标准:信号振幅高/低于G200微伏;脑电波小于0.5微伏且至少持续200毫秒;在200 ms窗口内,两个连续峰值差大于200微伏)。

七、将分段数据转换为电流源密度(CSD,一种球面拉普拉斯运算子,其中n=4 splines,m=10 Legendre polynomials;Lambda=1*10^-5)。

八、以刺激出现前200毫秒(-200~0ms)的脑电活动为基线进行校正。

九、从BrainVision中导出预处理的EEG数据(含全部60个通道),作为单试次、单被试锁时数据。

强调:本教程中的预处理流程仅用于举例。预处理详情应取决于任务性质、样本大小、数据记录设备和环境。请根据实际情况调整步骤。

准备工作:设置工具箱

耗时:30分

请按以下步骤在Matlab中安装所有必需的工具箱(第15步为非必选)。

十、检查系统要求

a.基于Win10系统,其他系统尚未进行测试。

b.不低于8G的内存,越大越好。

c.Matlab 版本≥2012b

d.Matlab 工具包:‘Image processing toolbox’,‘signal processing toolbox‘ ,‘statistics toolbox’。

e.EEGLAB版本≥13

f.FieldTrip版本≥2015

十一、安装EEGLAB。

a.下载最新版EEGLAB版本,链接为:https://eeglab.org/download/

b.创建指定文件夹并将文档解压缩至此。

c.若需要,可安装数据导入扩展包:https://eeglab.org/others/EEGLAB_Extensions.html#data-import

十二、安装FieldTrip。

a.下载最新的FieldTrip版本,链接为:https://www.fieldtriptoolbox.org/download/

b.将文档解压缩至指定文件夹。

十三、安装RIDE。

a.下载最新版RIDE工具箱,链接为:https://cns.hkbu.edu.hk/RIDE.htm

十四、安装ADAM 工具箱。

a.下载最新的ADAM工具箱,链接为:http://www.fahrenfort.com/ADAM.htm, 备用链接为:https://github.com/fahrenfort/ADAM

b.将文档解压缩至指定文件夹。

c.打开“install”文件夹下的“startup.m”文件,第一行代码如下:

d.将指FieldTrip工具箱('ft_path')、EEGLAB('eglab_path')和ADAM工具箱('ADAM_path'”)指定的路径替换成实际使用路径。

e.保存关闭“startup.m”文件。

十五、可选项:安装MVPA Light工具箱。

a.下载MVPA Light工具箱,链接为:https://github.com/treder/MVPA-Light

十六、示例代码及数据设置(可选)。

a.下载示例代码和数据集,链接为:https://osf.io/4qgp2/

b.将文档解压缩至指定文件夹。

c.Matlab用户可以跟随下述步骤按部就班运行示例代码。

d.运行RIDE 中的“Example code/star_protocol_RIDE.m”和“Example_data/RIDE”进行时间信号分解。

e.运行“Example code/star_protocol_concatenate.m”和“Example_data/Concatenate”导入RIDE分解后的数据。

f.运行ADAM中的“Example code/star_protocol_ADAM.m”和“Example_data/ADAM”进行First-level分析。

g.运行ADAM中的“Example code/star_protocol_ADAM.m”和“Example_firstlevel_results/ADAM”进行Second-level分析。

h.采用15)步中的MVPA-Light工具箱进行MVPA,需运行“Example code/star_protocol_MVPALight.m”和“Example_data/MVPALight”

相关资源列表

逐步分析

Part 1: RIDE时间信号分解

耗时:20秒/数据集(取决于电脑配置)

这一步开始使用RIDE处理脑电数据。1)使用EEGLAB工具箱在Matlab中导入已分段的单试次脑电数据,为RIDE处理做准备。2)基于试次提取反应时(RT)。3)设置配置,运行RIDE。4)从RIDE输出结果中提取出单试次分解数据。5)将单试次转码成ADAM工具箱和MVPA-Light工具箱可与格式。

注:使用存储数据时,可在Matlab中打开“Example code/star_procol_RIDE.m”按照此节内容逐步操作。此节所需示例数据集位于文件夹“Example_data/RIDE”中。此文件夹包含RIDE的输入数据。

一、导入脑电数据

分段后的单被试和单试次的数据可输入RIDE。每个数据集应只包含单个被试在一个条件下的试次。

强调:此处输入的数据应经过伪迹删除和基线校正。所有与大脑活动无关的电极通道必须移除。

提示:这些试次是与刺激锁定的。RIDE工具箱要求数据是三维矩阵格式。其中第一个维度是样本,第二个维度是电极或通道,第三个维度是试次(样本*电极通道*试次)。

a.使用EEGLAB和EEGLAB bva-io插件从Brain Vision Analyzer导出数据,导入BrainVision Core Data Format 1.0b.将数据矩阵转码成样本*电极通道*试次格式。

二、提取反应时

注:为分离与R成分相关的信号,传给RIDE的数据必须是基于单个试次的、以毫秒为单位的RTs向量。该向量的长度必须和脑电数据矩阵的三维数据大小相一致(即试次维度)。

a.在导入EEG数据后,从EEGLAB中可用的事件信息变量中提取RTs。

强调:在EEGLAB中,单个试次在“EEG.event.type”中以“TLE”编码。该脚本可查找该反应首次出现时的反应类型(例如,左键是“S1”、右键“S2”)。基于试次的RTs是使用特定TLE事件和响应事件之间的数据点数量来计算。

三、配置并运行RIDE

所有用于RIDE的参数都在结构变量“cfg”中传递。参见以下基本参数。详细列表请参见RIDE主页的RIDE手册:http://cns.hkbu.edu.hk/RIDE.htm

参数配置

cfg.comp.name:提取指定成分的单元变量。将信号分解为“S”、“C”、“R”三个成分。“S”是与刺激开始时相锁定的ERP成分集群,“R”是与RT相锁定的ERP成分集群,“C”是未与任何事件锁定的中央成分集群。详情见Ouyang et al. (2015b)。

cfg.comp.twd:Ouyang等人(2015b)使用时间窗函数来优化成分的分解。对于每个成分,必须指定一个以毫秒为单位的时间窗口,将分解限制在特定成分可能发生的窗口内。通过观察数据确定典型的事件相关电位的潜伏期在这里提供了一个很好的方向。S成分时间窗应涵盖知觉和注意过程相关的ERP。C成分时间窗应涵盖反应选择相关的电位。R成分时间窗应涵盖与反应直接相关的过程,相对于基于试次的RT具有明确的指定性。注:时间窗口请见Petruo et al(2021)。

cfg.comp.latency:RIDE 分解旨在估计 C 成分的潜伏期。因此,此处将 C 成分指定为“未知”。S 成分的潜伏期假定为 0,R 成分的潜伏期由 RT 计算。

cfg.samp_interval:数据的时间分辨率,以毫秒为单位,即两个连续数据点之间的时间cfg.epoch_twd:单试次时间窗口,单位为毫秒,即每个试次的第一个和最后一个采样点的时间。

b. 调用函数“RIDE_cfg”传递“cfg”结构变量创建RIDE配置。

c. 调用函数“RIDE_call”传递“data”矩阵变量和“cfg”配置变量开始分解数据。

四、提取基于单试次分解后的成分数据

RIDE_call输出的变量(“results”)包括“s”、“c”、“r”字段。这些代表了分解后的、经潜伏期校正过的、平均后的S-、C-、R-成分。

注:RIDE默认输出的不是单试次数据,但稍后的MVPA需要在试次水平上操作。此处可以使用RIDE工具箱函数“move3”提取单试次数据。该函数将三维试次数据(样本*通道*试次)转换成一段相对的时间段。

a.从未分解的单试次数据中减去move3转换后的C和R成分数据(得到S集群数据)。输出的是单试次的分解数据。

提示:与平均的“RIDE_call”输出相比,我们在这里不处理潜伏期位移。

五、以EEGLAB格式存储单试次数据。

a.使用EEGLAB中原始的“EEG”变量。

b.用指定的RIDE分解后的成分数据覆盖“data”字段。

提示:在下面的例子中,将C成分数据矩阵移回原始的EEG变量中,并将变量保存为EEGLAB.set文件。

c.对S和R成分数据重复上述步骤。

d.导出数据前对数据进行基线校准。

RIDE分解后,数据可能未正确对齐基线。而实施MVPA则强烈推荐使用基线校准。在示例中,我们使用 EEGLAB 函数“pop_rmbase”进行基线校正。时间窗口为锁时点前200毫秒(-200~0毫秒)。

其他可选相:ADAM工具箱也提供了多种预处理功能,包括基线校准。

注:在检测RT期间,请确保检测到正确的反应事件。根据实验范式或分段标准,可能存在多个反应事件,或对于特定试次来说可能缺少响应事件(例如,如果分段同时包括命中试次和漏报试次)。

Part 2: 基于ADAM工具箱进行MVPA

耗时:30分钟/数据集(取决于电脑配置)

这一步通过ADAM工具箱对分解后的脑电图数据进行一套对角线解码(diagonal decoding,跨时间分类)和时间泛化分析。经过RIDE分解S-、C-、R-成分获得相对应的单次试验数据。接下来则可以针对C成分进行分析。首先,将RIDE分解的数据集导入为FieldTrip格式。然后开始展示如何在ADAM中运行1-level和2-level分析。以下代码基于Fahrenfort等人(2018)的公布的示例,采用Petruo等人(2021)的参数。

注:此处只展示了RIDE中C成分的某类别/条件的示例性分析。除文件夹名外,以下下步骤均不针对给定的RIDE成分类别。因此,对不同成分进行MVPA的顺序并不重要。同样,如果将RIDE定义为少量(即,没有R成分)或多量(即,两个C成分),那么也应该按照当前示例操作。也就是说,可以忽略使用R成分数据的迭代,或者C成分可以运行两次(首先使用C1成分,然后使用C2成分)。

六、导入RIDE分解数据

注:Matlab用户在使用本地存储的数据时可以打开“Example code/star_protocol_concatenate.m”,该步骤使用的样本数据集位于文件夹“Example_ data/Concatenate”内。

强调:输入ADAM的数据是单试次数据集,需要符合EEGLab或FieldTrip格式。所有要进行MVPA的实验条件都必须存储在一个数据集中。由于每个RIDE输出文件只包含一个实验条件下的试次,所以要先拼接数据集。为了能够将每个试次与对应的条件联系起来,需要添加一个试次信息字段[1*试次数],将每个试次用特定条件的数值进行编码。例如,第一个条件被编码为1,第二个条件被编码为2,以此类推。这些编码在ADAM中可用来定义类别。

1.使用FieldTrip函数‘ft_preprocessing’将RIDE分解数据导入到FieldTrip中。

2.使用函数‘ft_appenddata’拼接数据集。

3.通过向FieldTrip的数据集添加“trialinfo”字段(试次维度数*1)来添加试次类别信息。

4.将整合的数据集保存为Matlab文件。该步骤的示例数据集可以在文件夹“example_data/Concatenate”中找到。

单被试水平(1st-level)分析。

在ADAM中设置1-level的参数,即单被试水平分析。注:以下步骤所需样本数据可在文件夹“Example_data/ADAM”中找到。Matlab用户可以运行代码star_protocol_ADAM。事先检查ADAM启动文件中的工具箱路径。a. 定义输入文件:使用被试1-4的数据集。可以通过添加其他行来添加更多被试。注:这一步的示例数据集有20个被试。被试编号从1到23随机分配。如遇到程序故障等问题,则该编号弃用。

b. 定义类别

将相关的条件定义为类别。这对训练分类器区分分解后的数据实验条件是必要的。本示例通过区分线索block中的任务重复试次和记忆block中的任务重复试次来对C成分数据进行分类:

注:对任务重复条件来说,可计算线索与记忆的block效应。下面的代码示例详述了全部子条件及相互的组合。推荐使用实验中最小有意义的单元(条件)来定义类别。这可用于后续2-level分析、合理性检测、故障排除等。备选项:以下全部类别名都特指数据类型(“_stC”作为单试次的C成分数据)。这似乎是多余的,因为示例数据的C成分、S成分和R成分对单被试来说都是独一无二的。当创建分段文件格式作为ADAM的输入文件时,这三种成分类型也是分别保存的。因此,不同成分的数据和类别不太可能被弄混。然而,在这种情况下,额外命名规定可以很容易地识别代码的不同部分,否则这些内容很大程度上很难被区分开来。

c. 配置1st-level分析参数。在此步骤中定义常规配置参数。非必要参数标记为“可选”。

1.创建一个名为’cfg’的空变量。

2.cfg.class_spec:指定类别。示例代码将获取的脑电活动分类为 (1) 线索任务重复或 (2) 基于记忆任务的重复。

3.cfg.datadir:指定输入文件位置。该示例的输入文件以每种成分为类型单独存储。

4.cfg.filenames:指定输入文件名。该示例的输入文件在上一步中的变量“filenames”中指定了。

5.cfg.outputdir:指定1-level分析结果的输出文件夹。

6.cfg.model(可选):指定选择的 MVPA 模型。

注:“BDM”后向解码模型是基于神经生理模式预测实验条件(类别)。为了构建预测模型,ADAM以线性判别分析(LDA)为默认设置。还有一种是前向编码模型(FEM)。从应用的角度来看,BDM适用于研究EEG数据和类别之间的分类关系,而FEM适用于研究类别和神经生理数据之间的连续关系。当前方法目通过区分线索和记忆引起的不同情形来区分任务重复和任务切换。由线索或记忆任务的反应选择是离散类别,因此采用BDM。适用ADAM进行FEM,请参见Fahrenfort(2020)。BDM在ADAM中是默认设置,因此,该行代码可有可无。

7.cfg.raw_or_tfr(可选):区分时域数据('raw')或时频数据('tfr')。ADAM 中的默认设置是“raw”。如果选择了“tfr”,ADAM 将在分类前使用 FieldTrip工具箱进行时频分解。详请参阅Fahrenfort et al.,(2018)。另外,选择“tfr”将显着增加分类的时间。

8.cfg.nfolds(可选):定义拆分折叠数。适用5折的话,分类器将在 80% 的数据上进行分类训练,在剩余20% 的数据上进行测试。此过程一直重复直到所有数据点都经过了测试(5折训练)。全部测试结果的平均值为最终结果。折数最多可以增加到试次次数,但通常不会超过10折。默认设置为10,即分类器将在90%的数据上进行训练,在剩余10%的数据上进行测试。当前数据采用5折即可获得良好的分类精度和稳定的泛化模式。我们推荐每个研究项目都采用此参数测试。

注意:不可能为不同的研究应用提供最佳数量。作为一般建议,如果较少的折数得到的分类结果在机遇水平上下波动,可尝试使用多折训练。

9.cfg.class_method(可选):选择分类结果标准。我们这里选择曲线下面积(AUC)。AUC是ADAM中的默认设置,因此代码可以跳过此行。但由于此参数对于解释结果至关重要,因此我们建议保留此行以清楚起见。该参数源于信号检测理论,指接受者操作特征曲线下面积。也就是说,当以累积真阳性率与累积假阳性率为坐标画在同一个ROC空间里,覆盖的总面积将决定 AUC 值。AUC是ADAM的默认参数。其他结果评判标准分别是准确率、d‘、命中率和误报率。

10.cfg.crossclass:计算时间泛化。如果设置为“yes”,则将在训练和测试时间点之间计算完整的矩阵。如果此参数为“否”(默认设置),则只有该数据的一个子集可用(即,当在同一时间点进行测试和训练时)。

注意:推荐将cfg.crossclass设置为“yes”,此步骤不会显着增加计算时间,但可为后续分析提供了更多选项。本教程的主要目的之一是对RIDE分解数据进行时间泛化分析,所以我们计算了整个矩阵。

11.cfg.channelpool(可选):选择电极通道的数量和类型。'ALL NOSELECTION'选择全部可用通道进行解码,这也是默认设置。通道的数量将部分决定解码的特征数量。通常特征越多、越可以增加分类的成功率。对分类贡献高的特征权重也将比贡献低的特征更高。如果假设某些通道对模型贡献更大,则可在此步预先选择相关通道,从而进一步提高分类性能。在任务切换的情况下,没有哪个通道贡献更大的假设,因此使用“ALL NOSELECTION”来赋予全通道均等加权。该操作也保持了最大的特征数量(至少在通道上是这样)。另外,保存1-level分析结果的文件夹是以选择的通道命名的。本教程得到的结果将保存在名为“ALL NOSELECTION”的新建子文件夹中。

12.cfg.resample(可选):重采样。为了减少计算时间,将数据降采样至55Hz。降低采样率会不可避免地丢失信息,这可能会影响到分类的准确性。因此我们分别计算了55Hz和256Hz,但没有可观察到显著差异。最后保留了55Hz的结果。我们推荐其他项目也采用类似的方法。对低分辨率数据的初步探索和随后的更高分辨率验证可以提供计算时间和分类精度之间的最优解。默认设置为“no”。

13.cfg.erp_baseline(可选):基线校正。基线已在上一步中校正过。默认设置为“no”。如在ADAM中进行基线校正,需输入基线窗口开始和结束的时间,单位为秒。例如,刺激呈现前200毫秒的基线期将为cfg.erp_baseline = [-.2, .0]。

注:基线校准是一种线性变换,用户可以在ADAM之前或进行ADAM时的任何时段操作。

分类前姑且暂停一下,检查一下目前为止的配置。

d. 调用函数“adam_MVPA_firstlevel”进行分类。输出结果即为1-level分析结果,存储在指定的输出文件夹中。

八、组水平(2nd-level)分析。

首先,计算每一个时间点上组水平的解码表现(对角线解码)。使用“cfg.nfolds”设置进行训练和测试数据拆分和迭代,并计算1-level分析。其次,在组水平上进行时间泛化分析,测试分类器是否可以泛化应用到其他时间点上。

注:ADAM对各数据集使用t检验比较分类表现与参考水平。分类水平已于1-level分析时经由“cfg.class_method”定义过了。本教程采用AUC,因此参考则为二元选择的机会水平(AUC = 0.5)。AUC和其他表现指标详见配置和运行1-level分析步骤中的“cfg.class_method”。输入文件在“Example_firstlevel_results_ADAM”中。相关代码为star_protocol_ADAM.m。

a. 执行对角线解码。

1.调用“adam_compute_group_MVPA”函数提取1-level分析结果,并在此基础上计算组水平的AUC评估解码是否成功。

2.使用参数“cfg.startdir”定义输入文件夹。

注:本教程中,通过1-level分析得到的C成分的结果,对比了线索block和记忆block中的任务重复分类(“Example_firstlevel_results_ADAM/Task repetition”)。运行下面的代码示例会触发一个选择子文件夹的弹窗。选择包含“ALL_NOSELECTION”子文件夹的文件夹。“All_NOSELECTION”这个文件夹是根据“cfg.channelpool”设置生成的。如需移动1-level的结果文件,请确保它们仍直直接保存在“cfg.channelpool”命名的文件夹中。故障排除:问题3:ADAM的2-level分析无法加载数据。

3.在字段“cfg.timelim”(可选)中指定分析的时间窗口。本教程选择的是包括基线在内的整个试次长度(-200~1000 ms)。时间间隔必须定义为毫秒。

强调:当输入数据的分段窗口时长比组分析感兴趣的窗口时长更长时,这一步很重要。如果整个分段都将纳入分析,此行可跳过。

4.设置多重比较的校正方法。任何组分析都存在多重比较问题。ADAM有以下两种控制多重比较的方法:1)基于聚类的置换检验。将相邻时间点上显著的t检验结果加总构成一个集群。通过设置“cfg.iterations”重复以上过程,得到一个t值的分布。比较该分布与随机排列的零分布,可计算出校正后的p值。2)伪发现率(FDR)。FDR会控制错误拒绝的可能性(详见Fahrenfort et al.,2018)。以往类似研究均使用基于聚类的置换检验,因此,对本教程将“cfg.mpcompcor_method”设置为“cluster_based”。注:采用何种校正法取决于研究人员需要。没有证据表明对RIDE数据进行分类必须使用某一种方法。

5.设置迭代次数(可选)。默认重复1000次。可以跳过。

注:设置更高的迭代次数可以在集群水平上产生更准确的p值,但也会显著增加计算时间。这时可以使用250-500之间的迭代次数来评估组水平分类表现。设置参数空间后,可以使用1000次或更多次迭代来评估最终结果。如果结果显示伪集群,则需要将迭代次数增至1000以上。

6.指定训练和测试的时间维度。设置“cfg.reduce_dims”参数指定我们想要分析的时间点矩阵。教程设置为'diag'。因此,组水平解码使用的是训练集逐时间点解码该时间点下测试集的表现(即,测试*训练时间点矩阵的对角线)。结果保存在名为“mvpa_stats”的结构数组类型变量中(详见预期结果部分)。

7.调用adam_plot_MVPA将结果可视化。结果图的y轴为组水平AUC值,x轴为所分析的时间窗口(之前在cfg.timelim中定义的)。该图会标识出校正后扔显著的时间集群。ADAM还可以生成自定义图(详见Fahrenfort et al.,2018)。

b. 时间泛化分析

时间泛化分析是将组水平分析应用于整个测试训练时间点矩阵上。其功能是测试分类器是否适用于其他时间点上的表现。

注:也可以指定训练集和测试集的时间窗口或频率范围。详见Fahrenfort et al. (2018)。

Part 2的其他方案:使用MVPA-Light进行MVPA

耗时:30分钟/数据集(取决于电脑配置)

MVPA-Light工具箱也能对分解后的脑电数据进行跨时间分类和时间泛化分析。与ADAM相比,MVPA Light具有更多的自定义分类器和表现指标。此外,它还可以进行探照灯分析(searchlight analysis),有助于分类结果的来源估计。因为ADAM没有这一功能,本教程推荐涉及神经源定位的研究可以采用MVPA Light工具箱。

注意:MVPA-Light也需要单试次、单被试数据。所有MVPA分析(跨时间分类、时间泛化)都是在单被试(level、 1)和群组(level 2)这两个水平进行的。接下来的教程仍采用ADAM中的示例进行代码演示(该示例通过区分线索block和记忆block中的任务重复表现来实现对C成分进行分类。演示包括单被试水平上的跨时间分类、时间泛化分析以及相对应的组水平统计与可视化。对S成分和R成分重复以上操作可得到相应结果。

可选:使用“Example code/star_protocol_MVPALight.m” 和 “Example_data/MVPALight.

强调:使用循环结构确保对全部被试都执行了步骤九、十、十一。

九、导入RIDE分解数据。

MVPA-Light的输入数据格式是个三维矩阵(试次特征时间点)。其中特征代表了电极通道或体素。多条件下的试次需要拼接在一个变量中。同时使用trialinfo字段(试验次数*1)中的数值编码对应的条件(第1个条件编码1,第2个条件为2)。

强调:一些分类器(例如,支持向量机)依赖类别标签的值(例如,1为正,-1为负)来评估分类表现。使用其他数字替代1、2来编码标签会导致分类表现失真。

1.调用“ft_preprocessing”函数将RIDE分解数据导入FieldTrip。

2.调用“ft_appenddata”函数拼接数据集。

3.通过添加字段“trialinfo”到FieldTrip数据集中,编码试次对应的类别信息。

4.调用'ft_timelock'函数并将cfg.keeptrials参数设置为'yes', 将数据转置成三维矩阵。此函数还可用来指定通道或时间窗口( 'cfg.channel' 和 'cfg.latency')。

注:对于跨时间和时间泛化的分类,推荐将全部时间点和全脑电极通道都纳入MVPA中。

十、设置1-level参数。

MVPA-Light需要通过指定一组参数来实现1-level(单被试)分析。这些参数决定了预处理步骤、分类算法和预期结果指标。所有参数都将分配给结构变量‘cfg’。

注:本教程仅介绍单被试水平MVPA必须设定的参数或一些常见的参数。更多参数、超参请见Treder (2020)。

1.cfg.preprocess:在训练分类器之前,MVPA-Light通过不同的预处理程序来调整数据集,例如通过样本平均、过采样/欠采样来平衡不同条件的试次数量。

注:如果两种条件下的试次数差异很大,建议使用过/欠采样进行预处理。

2.cfg.classifier:这是决定MVPA算法的最重要设置。MVPA-Light为众多分类器提供了灵活的自定义设置。默认分类器是'lda'(线性分析),特别省时。对于噪音较大的数据集,推荐使用更稳健的‘svm’分类。最后,可在‘cfg.hyperparameter’字段中指定每个分类器的超参。

注:强烈建议尝试不同的分类器和超参数,以最终确定适合特定研究目标的合适分类器。

3.cfg.metric:设置分类输出标准。

注:“Accuracy”表示正确预测分类的分数。另一个重要的参数是'auc'是曲线下的面积。需要注意,'auc'仅用于二分法。其他指标,如'confusion'、'precision'也可以用作输出标准。可以通过'cfg.metric' = {'accuracy','auc','confusion'}设置,让一个计算中包含多个指标。

4.cfg.cv:设置交叉验证类型。MVPA-Light通过配置 'cv' 和其他相关参数实现交叉验证。可选相包括‘kfold’、‘holdout’等。

注:当cfg.cv='kfold'时,数据将被拆分成k折(这个k在'cfg.k'中定义,默认为5)。在每次迭代中,保留其中1折作为测试集,其余为训练集。重复该流程直到每折都作过测试集。当cfg.cv='holdout'时,取出一部分数据作为测试数据,剩下的作为训练数据。通过'cfg.p'设置取出%多少的数据。设置'cfg.repeat'时,也可以使用随机分配新折重复交叉验证。最终结果是所有重复的平均值。

十一、运行1-level分析。**配置完成后,对每个被试分别执行1-level分析。MVPA-Light使用函数’mv_classify‘提供不同的分析。

1.直接调用'mv_acrosstime'函数进行二进制分类。

2.调用’mv_timextime’进行时间泛化分析。

强调:对每个被试分别做这两项分析。每个被试有一个分类表现结果。

注:推荐循环运行该函数,并将全部结果存到一个单元格数组中,如下所示。

十二、运行统计分析。

MVPA-Light可通过配置不同的统计法,来拟合单被试水平下MVPA的结果。

a.从分类结果中选择一个指标。本教程使用’auc‘进行统计。

b.通过’cfg_stat.test‘及其相应的参数指定统计方法和要求,在全部时间点上进行二元分类和时间泛化分析。

1.通过基于聚类的置换检验来检测分类表现显著的时间点。每个时间点的统计都遵循实验设计目的和分类目标。

2.选择被试内设计,将组水平’auc‘与机遇水平0.5做比较。示例见以下代码。

注:此代码可同时应用于单被试水平的二元分类和时间泛化的结果上。

十三、绘制结果。

通过配置MVPA-Light内置函数实现结果可视化。

a.选定指标平均所有被试的分类表现结果。

1.调用'mv_combine_results'函数

2.通过‘result_average’函数选择适当的指标。

b.指定绘图参数。使用平均结果和标记x轴时间点这两个参数,通过’mv_plot_result‘绘制群组在跨时间分类和时间泛化上的平均表现。

注:如果想看显著的时间段,还需变量'stat_level2'中的'mask'参数。以下代码可以绘制每一个MVPA任务的组平均分类表现和统计数据。

预期结果

本教程仅展示了ADAM工具箱的预期结果。经过2-level分析后,可以根据1)创建的图和 (2) 精确的统计值来解释和进一步分析分类表现。下图由’Example_firstlevel_results_ADAM’中的数据生成。如未另行指定名称,这些图将以2-level分析时所选的文件夹名称命名。也就是包含’ALL_NOSELECTION’子文件夹的文件夹。图1为根据保存的示例数据集绘制的ADAM版MVPA结果。

图1 根据RIDE分解中C成分的脑电数据做出来的线索与记忆任务的分类结果。

图A和B是任务重复条件,如C和D显示任务切换条件。时间轴0点为目标刺激呈现的时间点。(A)在相同时间点训练和测试分类器时,任务重复条件下的曲线下面积(AUC)解码正确率(对角线解码)。黑色粗线表示此段的分类表现显著高于机遇水平。(B)在给定时间点训练分类器,并在其他时间点上测试分类器的泛化效果,得到的重复条件下的时间泛化图。y轴为训练时间点,x轴为测试时间点。矩阵中更饱和的颜色表示分类表现更好(即,深红色代表AUC值更高)。 (C)在相同时间点训练和测试分类器时,任务转换条件的曲线下面积 (AUC) 解码正确率。 (D)在给定时间点训练分类器,并在其他时间点上测试分类器的泛化效果,得到的转换条件下的时间泛化图。

C成分信号分类展示了一个明显可释的结果(图1)。图1B和1D的对角线上显示出较高分类精度的时段,也就是对角线解码中显著高于机遇水平的时段(图1A和1C)。对于不同时间泛化模式的解释,推荐参考King和Dehaene(2014)。当然,分类表现不仅可以高于机遇水平,也可以低于机遇水平。图2就展示了这种可能性。

注意,图2不仅展示了显著高于机遇水平的分类结果(深红色),还展示了显著低于机遇水平的结果(暗蓝色)。对这类结果,Petruo等人(2021)、Carlson等人(2011),以及King和Dehaene(2014)都有解释。

图2 在给定时间点训练分类器,并在其他时间点上测试分类器的泛化效果,得到转换条件下的时间泛化图。

y轴为训练时间点,x轴为测试时间点。矩阵中更饱和的颜色(深红或深蓝)代表此处分类表现更好。

接下来,我们可以查看分类表现的量化指标。ADAM将相关参数保存在统计数组中。图3展示了该统计结果图。

图3 保存在Matlab变量中的ADAM统计结果。

根据RIDE分解中的C成分的脑电数据计算出来的线索与记忆的分类结果

图3中的前三个变量和第五个变量是统计数组中最重要的结果。其他变量是用来记录如校正方法的使用、通道选择等配置信息的。第一个变量ClassOverTime为组水平上逐时间点的分类表现(AUC结果)。单被试结果保存在第五个变量individClassOverTime中。分类表现的变异性保存在第二个变量StdError中,校正后的p值在第三个变量pVals中。以上变量被用来绘制分类结果图和后续分析。例如,可以根据pVals值选择显著时段,然后在sLORETA中进行后续源定位分析。此外,individClassOverTime中的单被试结果可用于行为表现与MVPA结果之间的相关分析。

局限

时间信号分解和解码方法的组合似乎不仅可行,而且值得一用。因为人类认知功能混杂了各种成分编码。这种方法的组合可以理清脑电信号的不同成分,增加了MVPA在该领域的应用。不同成分的区分可能是重要的认知控制。这种认知控制同时包含了运动和非运动成分的重叠。但也应该更加慎重定义分类来解码高级功能表征或者抽象表征。当分类表示更高层次的概念时(例如,努力、目标转换,或者抑制),研究者应当确认低级别的成分(例如,刺激的物理特征)不会引起伪影。这就是为什么建议用最小的、有意义的单位来定义分类。将较低级别特征纳入后续分析可以排除错误分类的可能性。

重要的是,信号分解有助于提高脑电信号信噪比。然而,去除噪声及混合信号(例如,从与运动相关的R成分数据中去除与刺激相关的S成分信号)增加了过度拟合的可能性。也就是说,如果分类完全符合训练数据,MVPA无法考察子类别表征的动态性。例如,几乎完美的分类(即,AUC = 0.99或接近0.99)可能表明过度拟合。当然,较低的AUC值并不意味着可以完全排除过拟合。然而,在几乎完美分类的情况下,我们推荐进一步调查这个问题。比如从绘制单被试结果开始。

此外,比较未分解数据分类和RIDE分解数据分类也许是有用的,这对于不完美的分类模型也可能有用。这样的比较可能有助于描述信号分解是否增强了未分解数据中已经表征的类别区分,尽管这种区分很模糊。或者分解引入一种新模式,这种模式被MVPA采纳。对后者需谨慎解释。

本教程仅限于分析人类头皮脑电数据。那些希望通过引入多模态信息源(例如,EEG+近红外或者EEG+心血管信号等)来增强其模型的研究人员,仍需要探索使用RIDE分解多渠道信号并进行MVPA的可行性。

值得注意的是,RIDE只是EEG信号分解方法的其中一种。时间分解可以通过其他方法来实现,或者研究人员可能希望探索不同的技术方法,例如空间分解脑电信号用于后续MVPA。以上不在本教程范围内。

故障排除

问题1

基线错误。

RIDE分解数据的基线平均振幅不等于0。

解决方案

进行基线校正。

调用EEGLAB函数’pop_rmbase’对单试次RIDE结果进行基线校正,详见RIDE时间信号分解。

问题2

工具箱函数异常。

使用ADAM工具箱后,几个FieldTrip或EEGLAB工具箱功能可能无法如常工作。例如,Fieldtrip函数’ft_definestry’不接受’trialdef.pre’参数的正值(所有步骤)。

解决方案

重置Matlab搜索路径。

这些问题可能是由工具箱函数之间的版本冲突引起的。MVPA Light工具箱安装包包括多个FieldTrip和EEGLAB功能,这些功能可能与常规EEGLAB/FieldTrip版本冲突。通过调用函数‘restoredefaultpath’重置Matlab搜索路径,并应解决此问题。

问题3

无法在ADAM的2-level分析中加载数据。

典型的报错是“Error using adam_compute_group_MVPA>drill2data. Cannot find data, select different location in the directory hierarchy and/or check path settings.”(步骤8)

(使用adam_compute_group_MVPA>drill2data时出错,找不到数据,请在目录层次结构中选择其他位置和/或检查路径设置。)

解决方案

更改文件夹选择级别。

当在路径中选择了不正确的目录级别时,就会出现此问题。ADAM查找包含1-level分析结果的文件夹(例如,“ALL_NOSELECTION”)。确保没有选择包含1-level结果的文件夹,而是其上一级文件夹。

问题4

几乎完美的分类。

分类表现(步骤8输出结果)高于预期(接近0.99或高于之前研究的结果)

解决方案

检查单被试结果。

在ADAM的2-level分析中添加一行’cfg.plotsubjects=true’。如果单被试结果没有显示出变异,那么最初的分类设计可能有问题。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值