相比其它成像方法,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.'