EEGLAB数据分析:预处理与后续处理
来源:http://blog.sina.com.cn/s/blog_13171a73d0102v4zx.html
数据预处理主要包括数据导入、电极定位、电极返回、滤波、去除伪迹、重建参考、分段、叠加平均等步骤。只有经过预处理的数据,才能进行特征值提取以进一步进行方差分析等操作。EEGLAB对数据处理的优点无需赘述。很多情况下,后续被试的预处理与第一个被试的处理过程是一样的。在这种情况下就可以采用批处理的方式进行,以便减少处理数据的时间并保持数据间参数的一致性,有利于后续数据的统计分析。在此主要有两种方法。第一,最简单的方法就是采用EEGLAB里面的插件Batch。该插件无需编程知识,在第一个数据处理后,其他数据都可以根据对第一个数据的处理步骤依次进行,方便快捷。这里需要注意的是,第一个被试的处理必须通过GUI(界面)实现,而不能通过Script实现。第二,就是通过编写简单的程序进行批处理。两种方法都是数据处理的好方法。
方法一:通过Batch插件进行批处理
- 预处理
在批处理之前,我们必须对第一个数据进行完整且适当的分析。因为后续所有被试的分析都是和第一个被试的分析一样的,因此第一个数据的分析是非常关键的,它决定了后续被试的数据处理是否得当以及能否保持数据间参数的一致性。这里提醒一点,就是ERP实验前,必须打好分段标记!!这是后续数据处理中一个基本且重要的方面。
1 在第一个被试预处理全部做完后,在Batch中保存,默认选中第一个后缀名为set。
2 将刚才处理的过程保存为一个历史过程文件,路径为存储当前数据的文件夹。
3 将刚才处理的数据在EEGLAB里面清除(切记)。
4 打开Batch选项,选择历史文件,就是刚才处理第一个数据是保存的文件,第二打开要处理的其他文件,直接点击就进行批处理。另外旁边有一个选项是并行处理,选择这个选项可以加快处理速度,但是对内存要求很大。
Batch批处理,第一个数据
1 数据导入;
2 将采样率降为250 Hz: (非必须步骤);
3 导入电极位置;
4 声明原始参考点:可以在导入电极位置之后,在最后一个电极点后增加参考点,电极自动寻找,就生成原来的参考电极的位置FCz。同时,需要制定这个电极点为参考点,其他所有的电极点都以这点为参考(1:63);
5 在重建参考,进行平均参考(加入FCz,去除两个眼电电极点);然后进行双耳参考(TP9, TP10),两步之后,就生成了FCz的数据值且是以TP9和TP10为参考点的矩阵;
6 自动检测电极点,坏电极点采用用插值法进行差值处理。
7 对连续数据删除正式试次开始和中间间隔的数据,减少数据处理对内存的要求。
8 采用ASR方法对上述连续数据进行伪迹矫正,这里注意不使用删除电极功能(off即可),在ASR之前最好用自动检测电极点程序。
9 滤波:高通、低通分别进行;(注意高通滤波)
10 分段:选择需要分析的所有marker;
11 基线矫正(自动步骤);
12 删除错误试次和波幅过大试次;这步骤可以在下面操作;
上述就是采用Batch进行批处理的第一步;然后依次进行第二到第四步,处理剩余的数据。全部被试的数据进行批处理完毕后,对每个被试的数据进行如下操作:
13 删除特定试次:这里的主要是指波幅范围标准和极端值分布标准;
请注意有些步骤不能用批处理进行,比如坏电极的处理,这是属于个体差异
14 检查是否有坏导:
① 检查是否有坏导; 如果有坏导,进行第 ②步操作;
② 替换坏电极:采用命令的方法或者采用差值方法进行替换,以下是命令方法:
EEG.data(62,:,:)=(EEG.data(4,:,:)+EEG.data(9,:,:)+EEG.data(13,:,:)+EEG.data(40,:,:))/4
EEG.data(63,:) = mean(EEG.data([4,9,13,41],:),1);
- 后处理
插值法可用工具菜单的interploration命令进行。经过上述处理的步骤,只是初步进行了处理,主要是滤波,重建参考,替换坏点,删除变异试次等操作。还没有去除眼电(上述盲源分析方法有效,如果已经处理过,就略过这步),因此还需进一步进行去除除眼电的操作ICA。方法同上述操作步骤一样,过程如下:
1 先进行第一个数据的操作,然后进行批处理。
2 最后对每个被试的数据进行去除眼电成分,再次进行基线矫正,得到干净的数据。
3 从每个被试的数据中提取各个条件的数据;建立dataset。
进过上述两步的操作后,所有被试的数据都已经预处理完毕,就可以对这些数据进行后期的特征值提取,主要是指数据统计分析等工作。
方法二:通过编程进行批处理
EEGLAB最方便之处在于,经过每步处理后,都可以通过脚本的历史命令查询出相应的脚本,这样的话就可以在这些脚本的基础上进行编程,从而减少数据处理时间。可以通过EEG.history命令也可以通过菜单将处理过的数据的脚本进行保存。编程的批处理可以分两步进行:
1 全部数据进行预处理(无ICA);
2 把第一步进行处理过的数据进行ICA,目的是去除眼电、肌电和其他噪音,得到干净的数据。经过第1步的预处理后,统一对已经生成的文件进行ICA。通过ICA,可以分别对生成的文件去除眼电、肌电和其他噪音ICA,这里笔者根据以往的经验,只去除眼电的噪音,而且对数据依次处理。不推荐使用独立成分自动去除的程序(如AJUST等自动软件)。
方法三:通过编程进行批处理
第二种方法中,我们首先对所有数据进行了批处理,然后通过ICA的方法去除伪迹。实际上,有很多种去除伪迹的方法,一种比较直接的方法就是对原始的数据进行去除。这里推荐使用ASR方法,即伪迹空间重建的方法。这种方法只能用在原始数据即没有分段前的数据进行处理。步骤包括导入数据、电极定位、返回参考(可选择)、重建参考、滤波、ASR自动校正、分段、去除Epoch以及叠加平均过程。如果原始数据较大,则可以在预处理前分别对所有的原始数据进行处理,删除在刺激前和实验中途休息的是大段数据,达到减少数据量的目的。
EEGLAB数据分析
- 时间/波形分析
EEGLAB中,有个独特的模块就是study模块,可以方便的进行预处理后的数据分析。但是目前来看,通过这种方法虽然可行,但是较为麻烦。因此,更简便的方法就是不利用study编写脚本程序的方法进行后续的数据分析。因此,可以充分利用matlab的函数进行波幅和潜伏期分析。需要注意的是,在提取波幅和潜伏期之前,必须建立每种条件下的所有被试的总平均文件,利用总平均文件才可以进行后续的波幅和潜伏期特征值的提取。利用总平均文件,可以方便的提取波幅和潜伏期,进行方差分析;另外,总平均文件的建立还有利于以后论文投稿中的波形图和地形图的准备,一石二鸟。
画出总平均波形图/画出总平均地形图
总平均波形图 要画出总平均波形图,必须首先建立总平均的文件。这里通过GUI操作的方式通过Grand-average选项,对每一种条件下所有被试的.set数据进行总平均,建立一个N个不同条件总平均文件。需要注意的是,总平均后需要再一次进行电极点定位,这样才能进行后续操作,否则无法画出总平均地形图。然后通过脚本命令方式的进行画出总平均图。该命令可以根据输出的电极点的数量,以及投稿时的要求进行适当的修改,以输出符合要求的图片(分辨率和大小)。利用上述语句可以在九个子图里分别画出两种条件以及差异波的总平均图,优点是方便快捷,无需对图片进行额外的准备,方便后续的投稿和图表准备。
图片制作分为三步:
(1) 完成画图及相关设置(字体大小、线宽、图例大小也是正常尺寸),
(2) 此时WindowStyle is 'docked',要改为normal,有两种操作:在Figure properties——more properties中找到Windowstyle,然后用鼠标改为normal;或者直接用命令:set (gcf,'windowstyle','normal')
(3) 将图片保存成TIFF格式图片。
(4) 将图片拷贝到word里,并生成PDF文件,用Photoshop软件打开刚才生成的PDF文件,然后对之进行操作,设置最终的图片大小和分辨率。
总平均地形图 前提是首先利用Grand-average插件进行不同条件的总平均,得到两个总平均文件。再利用相关的EEGLAB函数进行画图。如需要改变电极点,在上述命令中修改需要的点即可,方便快捷。利用上一步生成的总平均文件和总平均地形图的命令,可以画出所需要的总平均地形图。可以根据某些特定要求简单的改变某些参数的设置即可。该命令可以很轻易的调整要输出的总平均地形图的数量,地形图的时间点和是否画出总平均差异地形图等。利用这个命令可以容易的画出总平均地形图,与上述总平均波形图一样。
当总平均文件建立以后,如果不利用脚本提取波幅和潜伏期的值,则可以采用第二种方法。所有数据导入letswave中,很方便进行提取,然后导入SPSS,进一步进行方差分析(参见相关文献)。该软件的优点之一是,在进行传统的波幅和潜伏期分析后,还可以进一步进行时间-频率分析;而且这个软件是线性的,无需过多的编程知识,有利于初学者学习。
- 时间/频率分析
利用每个被试的处理过后的文件,可以进行时间-频率分析。这里主要采用的是EEGLAB自带的newtimef()函数,该函数是进行时频分析的主要函数,这里我们主要采用的是FFT函数,可以对感兴趣的较低的频率进行分析。
总平均时间频率图/ROI频率的时间频率图 在这里,需要辨别两个图,一个是总平均时间-频率图,第二个是感兴趣的频率的时间能量波形图。前者是指根据newtimef()进行参数设置后,计算每个被试每种条件下的时频图,然后进行平均得出的。后者是根据自己研究的兴趣点,只计算和分析自己感兴趣的频带的能量分布图。要画出上述两个重要的图,首先必须建立总平均时间频率文件,这个文件是进行后续数据处理的基础,从中可以提取出自己感兴趣的频带的ERSP的值,进行进一步的ANOVA等操作。
EEGLAB数据分析:预处理与后续处理的更多相关文章
- 基于pandas python的美团某商家的评论销售数据分析(可视化)
基于pandas python的美团某商家的评论销售数据分析 第一篇 数据初步的统计 本文是该可视化系列的第二篇 第三篇 数据中的评论数据用于自然语言处理 导入相关库 from pyecharts i ...
- 透过表象看本质!?之二——除了最小p乘,还有PCA
如图1所示,最小p乘法求得是,而真实值到拟合曲线的距离为.那么,对应的是什么样的数据分析呢? 图1 最小p乘法的使用的误差是.真实值到拟合曲线的距离为 假如存在拟合曲线,设直线方程为.真实值到该曲线的 ...
- 图计算 on nLive:Nebula 的图计算实践
本文首发于 Nebula Graph Community 公众号 在 #图计算 on nLive# 直播活动中,来自 Nebula 研发团队的 nebula-plato 维护者郝彤和 nebula-a ...
- 从技术经理的角度算一算,如何可以多快好省的做个app
[导读]前端时间,一篇“从产品经理的角度算一算,做个app需要多少钱”的文章在网上疯传,可见大家对互联网创业的热情!这次,从一名技术经理的角度再给大家分析一下,如何使用跨平台开发技术为你节省上百万的开 ...
- Java EE (8) -- Java EE Patterns
Java EE 模式目录由以下三个层组成: – 整合层(4) – 业务层(9) – 表示层(8) 涉及 Java EE 平台代码与其它类型应用程序或遗留系统的集成: 服务激活器 ...
- 多快好省的做个app开发
从技术经理的角度算一算,如何可以多快好省的做个app [导读]前端时间,一篇“从产品经理的角度算一算,做个app需要多少钱”的文章在网上疯传,可见大家对互联网创业的热情!这次,从一名技术经理的角度再给 ...
- java注解(转并做修改)
本文由 ImportNew - 人晓 翻译自 idlebrains.欢迎加入翻译小组.转载请见文末要求. 自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也 ...
- PA教材提纲 TAW12-2
Unit1 Adjustment of SAP Standard Software(SAP标准软件修改) 1.1 Adjusting SAP Standard Software(如何修改SAP标准软件 ...
- Java注解的原理
自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解.这篇文章中,我将向大家讲述 ...
随机推荐
- C#中 反射中的Assembly(装载程序集):
反射中的Assembly(装载程序集):可以通过Assembly的信息来获取程序的类,实例等编程需要用到的信息. String assemblyName = @"NamespaceRef& ...
- MVC中实现Area几种方法
概述 ASP.NET MVC中,是依靠某些文件夹以及类的固定命名规则去组织model实体层,views视图层和控制层的.如果是大规模的应用程序,经常会由不同功能的模块组成,而每个功能模块 ...
- Idea开发环境中搭建Maven并且使用Maven打包部署程序
1.配置Maven的环境变量 a.首先我们去maven官网下载Maven程序,解压到安装目录,如图所示: b.配置M2_HOME的环境变量,然后将该变量添加到Path中 备注:必须要有JAVA_HOM ...
- Mvc视图的那些事
最近参与项目底层重写,在代码组织方式,类型使用上已经与之前有了很大的不同,这里总结一下视图的使用. 一.视图中命名空间的使用 视图命名空间的使用方式大致有三种:一,完全限定名,如 @System.Da ...
- Googlehack之Github hack
site:aircrk.com smtpsite:aircrk.com smtp @mail.comsite:aircrk.com root passwordsite:aircrk.com smtp ...
- Centos6_64 rpm打包实践
安装rpmbuild sudo yum install rpm-build 普通用户的配置 /home/you/rpmbuild/ 假设是要构建rpm的目录 先说说rpmbuild有什么用,给一个例子 ...
- Android Handler、Loop 的简单使用
1.子线程和子线程之间的通信 package lib.com.myapplication; import android.os.Bundle; import android.os.Handler; i ...
- Android 手机卫士--设置界面&功能列表界面跳转逻辑处理
在<Android 手机卫士--md5加密过程>中已经实现了加密类,这里接着实现手机防盗功能 本文地址:http://www.cnblogs.com/wuyudong/p/5941959. ...
- ListView setOnItemClickListener无效原因分析
前言 最近在做项目的过程中,在使用listview的时候遇到了设置item监听事件的时候在没有回调onItemClick 方法的问题.我的情况是在item中有一个Button按钮.所以不会回调.上百度 ...
- 在数组中找出x+y+z=0的组合
就是找x+y=-z的组合 转化为找出值为-z满足x+y=-z的组合 解法一: 为了查找,首先想到排序,为了后面的二分,nlogn, 然后x+y的组合得n^2的复杂度,加上查找是否为-z,复杂度为nlo ...