如何从matlab中按trial导出EEG数据?

先说目的。

以往EEG数据的分析,都是对每个被试在每个条件下所有有效trial数据进行的。

在重复测量的实验设计当中,很多时候随机效应不仅来自于被试,也来自于项目。既实验材料也是从某一总体中随机抽取而来。

以往的分析,只是将所有被试在各个条件下的测量数据进行平均,然后进行诸如t检验或方差分析。这种分析忽视了项目带来的随机变异。因此,一般采用既包含固定效应也包含随机效应的混合效应模型来进行分析。在混合效应模型中,随机效应可以只包括被试随机,也可以纳入项目随机。

按trial导出EEG数据,主要就是为了这一目的。让所分析的数据,既包含被试信息,也包含项目信息。

EEGLAB虽然提供了非常好的预处理功能,但是对于统计分析的支持,还不够灵活。如果按trial导出数据,可以使用更专业的统计软件,如R语言,进行灵活的分析和结果呈现。

直接上代码:

在对EEG数据处理后,需要将所有clean的数据文件一并导入到EEGLAB中,并创建study文件。在这之后,运行如下代码:

eegdata=struct2cell(EEG); %结构体数据转化为cell类型

path=''%%这里改成输出文件存储的路径
subIndex=[]%初始化
dataIndex=[]%初始化
itemIndex=[]%初始化

for y = 1:size(eegdata,3)
    
    subIndex(y)=1+(y-1)*size(eegdata,1);  %获取被试,条件的信息,其实是获取当前文件名
    dataIndex(y)=16+(y-1)*size(eegdata,1);  %获取当前数据的index
    itemIndex(y)=26+(y-1)*size(eegdata,1);

    sub=eegdata{subIndex(y)}; %当前的被试和条件
    data=eegdata{dataIndex(y)}; % 当前的某一个被试某一个条件下的数据
    item=eegdata{itemIndex(y)};
    item2=struct2cell(item);
    
    [m,n,z]=size(data);
    
    mkdir('/Users/finch/Desktop/',num2str(sub));  %创建数据存储文件夹
    
    R={};%R是某个被试,在某一个条件下,某一个trial的数据
    r={};
    for x = 1 : z %x是trial数,即某一个被试在某一个条件下的有效trial数
        for i = 1 : m  %m是电极点
            for j = 1:n % n是time frame
            R{i,j} = data(i,j,x);
            end
        end
        r=R'; % 转置矩阵
        dlmwrite(strcat(path,num2str(sub),'/',num2str(x),'_',num2str(item(x).item),'.txt'), r, 'delimiter', '\t');%写入myfile.txt文件中,如果myfile.txt不存在,则自动创建
    end
end

这样导出的文件,是每个trial一个txt文件。被试信息和项目信息都在文件名中得到体现。

也可以根据需要,直接将所有数据导出到1个文件当中,其中被试信息和项目信息作为数据列存在。


扫描二维码关注公众号,回复: 2248407 查看本文章

猜你喜欢

转载自blog.csdn.net/muxiaosa/article/details/80869531