脑电独立成分分析(independent component analysis)「建议收藏」

脑电独立成分分析(independent component analysis)「建议收藏」相比其它成像方法,EEG更为便捷低价,无论是拿erp成分还是做时频分析,提高信噪比始终是EEG分析的重点。将ICA应用在EEG分析中,可以较好的识别并去掉眼动和其它噪音(heartbeat,linenoise,musclenoise)。但对ICA分析前的预处理和后期成分的识别,缺少详细的说明。以下的分析方法主要参考EEGLAB给的非官方说明,tutorial的第九章和第十章,BoyLu…

大家好,又见面了,我是你们的朋友全栈君。

相比其它成像方法,EEG更为便捷低价,无论是拿erp成分还是做时频分析,提高信噪比始终是EEG分析的重点。将ICA应用在EEG分析中,可以较好的识别并去掉眼动和其它噪音(heart beat,line noise,muscle noise)。但对ICA分析前的预处理和后期成分的识别,缺少详细的说明。

以下的分析方法主要参考EEGLAB给的非官方说明,tutorial的第九章第十章,Boy Luck的The ERP Boot Camp,并结合我自己实际分析的血泪经验而来。

1,导入数据

确保导入的数据格式是正确的,并且以双精度格式存储。有的eeglab版本并不能自动识别导入的data是32bit还是16或其他format,一旦手动选错,后果非常严重。如果本来是32bit存储的,导入后的format选为16bit,那么会有一半的数据看起来就是weird。在neuroscan的机子上采集的数据需要特别注意这个问题。 

导入后,plot出来看是否有坏电极,如果只看到少数几条线,那么需要remove DC. 

数据记录和存储的形式跟采集时使用的set up文件有关,所以导入之前,最好也要熟悉一下里面的参数。

2,导入坐标信息(channel info)

导出的EEG,如果不包含坐标信息,那么建议在这一步就加上。电极坐标对后续的ICA分析非常重要,没有坐标信息无法做地形图,而地形图可以让人对成分的分布有基本的认识。

这里需要注意的是,有些厂家总有一套自己的标准,如neuroscan,检查一下坐标,并plot出来,对比和自己实际的电极坐标及label是否一致,有益无害。(被小坑过!)

3,滤波

滤波的标准,此处略有分歧,boy luck认为0.1Hz的 高通就够了。

EEGlab的非正式建议认为1~2 HZ较好,较多的低频噪音会影响ICA的结果分析,而ICA对识别高于这个标准的成分表现较好。并且不会因为如此高的(1~2 Hz)的标准而影响erp成分。用这个标准,分析出来的成分更干净。

如果担心如此做会招致humiliation,可以用个大家接受的方法:用1 HZ高通算出来的ICA weights放回原来的dataset,不影响后续分析。。。(简直了!)

我不想太麻烦,选择0.1 Hz高通。此外,有些被试高频噪音很多,如果能做一个低通,数据更clean。

*滤波要在连续数据上做。不然boundary的地方会有distortion。

3 Epoch

对epoch的态度有两种。

一种是认为用整段eeg data来做后续的分析(当然,block之间的休息和开始前的准备,即所有的非任务状态的eeg data要去掉)。

另一种是认为将信号按照event来epoch成小段小段来分析,这样的信号里neural activity更多。

无论哪种,都要求进入分析的点要足够多,至少大于N^2*20。N是进入分析的通道数。

4 检查坏电极

坏电极的识别很麻烦,有些看起来很差的信号,做个低通(low pass 40Hz),就平滑多了。但是可以在粗糙的检查中发现是否存在别的问题,例如,很有可能不是有坏电极,是电极导联到接地了,满屏都被巨大的电压值覆盖。

对于坏电极,不要在这个时候interpolate掉,因为会造成rank deficiency,跑ICA跑出乱七八糟的东西。

同样不要让它进入ICA分析,它的noise会影响ICA的成分识别。

最好的方法就是,不让这个通道进入分析。

分析完了后,再替换它。

5 进行ICA

用EEGlab进行ICA分析,只有一句简单的命令。但是注意留心运行后给出的info,它可以提示此时是否是full rank,进行的是否是ICA。

以免被坑(血泪教训)。

6 移除噪音

run完ICA后,根据“经验”识别眼动和其他噪音并移出。

我非常讨厌“经验”这个词,对于新手来说,这个经验似乎就是宣告你不行。幸运的是,我的确找到了不错的网站教人如何根据规律识别ICA,让新手也可以按图索骥。

识别ICA,可以:

1,将不同的成分plot出来,看他们的频谱特征。

2,画地形图,看成分的空间分布。

3,比较去掉前后,原始波形的差异。

4,看这个成分占的variance比例,一般大于15的,都需要留心一下。

此外还有其他的标准有助于识别,但是永远不要只看一个地形图的位置就做出判断。

确定了这是噪音就去掉,多个成分都可以去掉,不要想再做一次ICA,再去成分,it never works!(坑到想哭)

7 回去检查原始信号是否clean




下面是问答:

1 EOG通道要放进去做ICA分析吗?

这取决于EOG的信号是如何采集的,如果它们是bipolar互为参考,那就去掉。如果是和其他电极共用同样的参考,那就留下,一起做ICA。

如果将互为参考的EOG纳入分析,第一个成分exactly是眼动,因为眼动还是肌电呢,可比其他信号强多了。但是从一个本来就是眼动的通道去掉眼动信息并不是我们的目的,而是去掉其他EEG通道里的眼动。Give ICA a better chance to decompose。

 

2,为什么不能做第二次ICA,为什么不能提前替换掉坏电极?

这所有的答案指向一个,他们会造成rank defiency。在不满秩的情况下做ICA会出现奇怪的现象,我恰好都遇到了三个。而这三种情况都让我精疲力尽。以下答案搬运自Makoto和我自己的草稿。注意,这里提到的第二次ICA,仅指去除component后继续做ICA的做法,而不是指去掉坏的epoch的做法,后者是可行的。

Why there is no need to run the second ICA?

Rejecting ICs to improve the next ICA is the idea that keeps alluring many of us but never works. Let us confirm the process and the reason why it does not work.

You have 100ch data.

You run ICA on it to obtain 100 ICs.

You identify 1 eye-blink component.

You reject it. Now you have 99 ICs.

You back-project the 99 ICs to obtain 100ch reconstructed scalp channel signals.

You run ICA again on the reconstructed 100ch data, hoping to obtain another 100 ICs. The new ICA result should be cleaner because this time ICA is free from eye-blink artifact.

You find somehow 100ch ICA gives you only 99 ICs. Certainly the blink IC is gone, but the rest of 99 ICs remains identical as before.

What would happen if I want to run the second ICA? 

       If we have removed some components after the first ICA, the data is no longer full rank now. Under such rank deficiency condition, weird things would happen in running ICA:

First, it gives the info warning such as the following sentence, but this sentence we won’t see under the full rank condtion.

‘Warning: fixing rank computation inconsistency (66 vs 65) most likely because running under Linux 64-bit MatlabAttempting to convert data matrix to double precision for more accurate ICA results.’

Sometimes, the info would say ‘the learning rate is low’, the ICA run goes into repeated rounds of the weights blowing up and the learning rate being reduced. It cannot start and end. Here is a similar question from EEGLAB mail list. And it does happen to me a lot before I figure out what happened!

Sometimes, it can pass the Irate test, but get strange components, such as the following picture. (Due to privacy, the picture is removed). Makoto calls it as ghost ICs, anyway, we should avoid to do the ICA in the rank deficiency condition.

Sometimes, if the infomax of runica has detected the rank deficiency successfully, it would go to run PCA dimension reduction first and run PCA, evidence can be found from the original script. The info will be:

‘Data rank (64) is smaller than the number of channels (66)’

‘Input data size [64,406296] = 64 channels, 406296 frames/nAfter PCA dimension reduction.’

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145422.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • tiptop开发webservice详细步骤

    tiptop开发webservice详细步骤4gl,webservice,tiptop,t100

    2022年7月12日
    19
  • bwapp通过教程

    bwapp通过教程用户名:bee,密码:bug,点击start登录后即可进行相应测试。HTMLInjection-Reflected(GET)那我们直接开始第一题吧这里有两个框让我们输入,先看看源码这里把我们输入的fistname和lastname直接带进htmli了Htmli是按照我们等级来给函数的,我们看看no_check函数没有过滤就直接输入了,所以我们直接…

    2022年9月23日
    3
  • springboot整合kafka配置_kafka怎么使用

    springboot整合kafka配置_kafka怎么使用本文是SpringBoot+Kafka的实战讲解,如果对kafka的架构原理还不了解的读者,建议先看一下《大白话kafka架构原理》、《秒懂kafkaHA(高可用)》两篇文章。一、生产者实践 普通生产者 带回调的生产者 自定义分区器 kafka事务提交 二、消费者实践 简单消费 指定topic、partition、offset消费 …

    2022年4月19日
    690
  • docker 启动容器出现 Exited[通俗易懂]

    有时候在启动容器的时候,启动没报错,但是在执行dockerps-a时发现刚启动的容器状态为Exited(1),这个时候查看日志dockerlogs-f-t–tail20容器ID,发现报chown:changingownershipof’.’:Permissiondenied提示没有权限,这个时候将容器删除,在执行容器启动的命令中加入–privi…

    2022年4月17日
    1.3K
  • 如何在excel2019指定的单元格中插入图片

    如何在excel2019指定的单元格中插入图片最近,要完成一些论文的调研及整理工作,针对各个论文中提到的方法,系统模型等。原想在单元格中插入图片,发现单元格右键插入,压根就没插入图片这一项功能,如图所示故在菜单栏中,找到插入-》图片-》此设备,插入完成后,图片能在整个界面上移动。完全不是我想要的结果。问题解决办法如下:1、选中一个想要放入的单元格,尽量拉的大一点。2、把已插入的图拖到这个单元格内,大致调整一下大小,使其和单元格大小差不多。3、选中图片右键“大小和属性”。4、作如图设置,将属性选为“随单元格改变位置和大

    2025年6月29日
    2
  • opencv videocapture参数_opencv显示图像

    opencv videocapture参数_opencv显示图像importcv2ascvcapture=cv.VideoCapture(0)whileTrue: ret,frame=capture.read() cv.imshow(“Video”,frame) c=cv.waitKey(1) ifc==27: break capture.release() cv.destroyAllWindows()VideoCapture()中参数是0,表示打开笔记本的内置摄像头cap.read()按帧读取视频,re

    2025年7月16日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号