今天来介绍一下如何通过GUI操作生成批处理代码进行预处理数据分析。
以上期使用EEGLAB GUI界面进行单一数据为例,如果想要查看其代码,可以有两种方式可以查看代码。
第一种的操作是(见下图)File > History scripts > Save dataset history script > 保存代码为.m文件。
第二种方式是在命令行键入:EEG.history (见下图)
那么针对多被试的数据处理,我们可以使用GUI界面进行一个一个的被试数据加载,但是会花费大量的时间,效率很低。如果能使用代码进行批预处理,将是非常棒的。
对于预处理过程,其实是要先理解所做的步骤是为了改变数据的什么类型,哪些步骤是自动化的,哪些步骤是需要手动进行的。批处理的本质是,在单次处理GUI代码的基础上,加上循环(for – end循环)并添加或修改一些必要的信息(如文件名,路径名等)。
通常可分为ICA前的批处理和ICA后的代码,
ICA前进行导入数据、通道编辑、重参考、删除电极、滤波、分段、基线校正、保存数据,因为这些步骤是可重复的,无需手动干预。最后手动查看剔除坏段和插值坏导
ICA后进行ICA运行、剔除眼动成分等、保存数据
代码编写:
ICA前:
首先手动新建保存预处理后的文件夹:. set文件(跑完ICA后保存set文件);
不建议与原始文件夹放在一起。
改写单个被试的代码:
EEG.etc.eeglabvers = '2023.0'; % 使用的eeglab版本
EEG = pop_loadbv('/Users/chenrui/Documents/MATLAB/raw_EEG/BP/', 'AuditoryOddball_P300_1.vhdr', [1 143720], [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22]);
EEG=pop_chanedit(EEG, []);
EEG = pop_select( EEG, 'rmchannel',{'VEOG'});
EEG = pop_reref( EEG, [20 21] );
EEG = pop_eegfiltnew(EEG, 'locutoff',0.1,'plotfreqz',1);
EEG = pop_eegfiltnew(EEG, 'hicutoff',30,'plotfreqz',1);
pop_eegplot( EEG, 1, 1, 1);
EEG = pop_epoch( EEG, { 'S11' 'S22' }, [-0.2 1], 'epochinfo', 'yes');
EEG = pop_rmbase( EEG, [-200 0] ,[]);
pop_eegplot( EEG, 1, 1, 1);
EEG = pop_runica(EEG, 'icatype', 'runica', 'extended',1,'interrupt','on');
EEG = pop_iclabel(EEG, 'default');
EEG = pop_subcomp( EEG, [2], 0);
EEG = eeg_checkset( EEG );
pop_eegplot( EEG, 1, 1, 1);
EEG = pop_saveset( EEG, 'filename','eeg.set','filepath','/Users/chenrui/Documents/MATLAB/raw_EEG/BP/');
第一部分:ICA前的批处理代码
第一步:定义读取和保存数据的路径名文件夹
从单次处理的代码中,我们看到第一步是读取BP设备所采集的原始数据vhdr格式的文件,其中涉及文件所在的路径和文件名。前提你可以看到的是其命名是有一定的规则的,最简单的建议是通过数字命名。
%读取数据的文件夹路径,根据自己的路径进行修改即可;
dataPath = '/Users/chenrui/Desktop/Raw/Raw';
%保存数据的文件夹路径,根据自己的路径进行修改即可;
savePath = '/Users/chenrui/Desktop/Raw/Pre_ICA';
第二步:通过for循环读取被试的名称
for subj = [1:10];
...
end
第三步:通过上面单个的eeglab的函数进行步骤的组合
定位电极
EEG = pop_chanedit(EEG,[]);
上面这一行代码的功能对应的是定位电极,选择对应的定位文件即可
剔除无效电极
EEG = pop_select(EEG, 'rmchannel',{'VEOG'});
上面代码的功能对应着删除无用电极,大括号里面的内容是要删除的电极名称,这个可以根据需要自行删减。
重参考(离线参考)
EEG = pop_reref(EEG, [20 21]);
上面的代码的功能对应转换参考,用到的函数pop_reref也是eeglab的内置函数,如果用双侧乳突作为参考,就要填写双侧乳突电极点对应的编号,并用中括号括起来,如果用平均参考,就直接改成一个空的中括号。