准备工作
这本免费公开电子书的性质是“教程”,所以理论不会过多涉及。然而,理论对掌握一门技术和方法是不可或缺的,所以将会适当提及并且提供相关参考资料,读者需要自己去阅读。如果因为基本原理没有弄明白而导致对脑电数据分析中的步骤不理解,那么还是请再反复理解背后的原理。需要强调的是,本人非专业出身,半路出家,数学功底薄(别被吓到,并不是说要懂多少数学),所以不懂的地方可能会极不负责人的搬上参考文献。这也说明,学会脑电数据处理并不是非把原理都弄明白不可。大家可以放心了,你不需要学数学的。
言归正传!学习 EEGLAB,需要做好一些心理和物理上的准备。
心理准备
来学 EEGLAB 的朋友,肯定不会说自己就是来学 EEGLAB 吧?说自己就是学 EEGLAB 的,那么赶紧改口。学习 EEGLAB 目的其实在于,对脑电数据进行相应的分析,提取相应的指标,来完成老板给你的“使命”。什么使命?发文章呗!开个玩笑。我希望各位来学 EEGLAB 并不是抱着学 EEGLAB 的心态,而是要有以下几个目的:
- 通过 EEGLAB 掌握脑电信号或者数据处理的流程,并借此弄明白一些原理;
- 通过 EEGLAB 掌握基本的 Matlab 编程知识;
所以说,EEGLAB 只是个直接目的,为了实现以上两个间接目的(当然,你有啥其他不可告人的目的,我就不管啦)。而以上的间接目的,是对你自身职业发展有长远影响的。如果仅仅为了完成一批数据写完论文就完事儿?那我觉得你将无法把这本教程仔细地读完,而且也不会踏实得按照教程里头的建议去学习。那么这本教程的目标受众也不会是你。
你一定要把 EEGLAB 当成个幌子,作为初学者,你一定得这样做。EEGLAB 只是一个工具,还有许多与它有着同样功能的工具,甚至更强大。那么学习 EEGLAB 就不能仅仅是 EEGLAB,而是信号处理和数据分析。这是通用的技能,当你在接触其他工具时,你可以很快地上手,因为他们背后的原理是一样一样的。而且,当你掌握了背后的基本原理,你才能融会贯通,在这个领域你才有自信。
可能会有人发出哀怨,为什么非得掌握 Matlab 呢?不学不行吗?
首先,你不用精通 Matlab。你所需要了解的仅仅是一个很简单的 Matlab 的基本语法,数据类型和结构,常用函数,另外会知道怎么简单的调试代码(也就是看到红红的一串报错信息不惊慌,并且能够根据报错解决脚本里的 Bug)。这方面的内容,相信你一周能弄明白。当然,真正掌握还需要你不断实践。
然后,学会使用和写 Matlab 脚本进行分析可以成倍提高效率。这些时间你是要用来打麻将呢,还是逛街看电影,还是读文献?自己看着办吧,(笑)。
最后,提高研究的透明度,践行开放科学,只有使用代码和文本,才能践行开放科学,提高研究的可重复性。因为你分析过的脚本是可复用的,是可以像论文一样被审查的(貌似有人意识到这是个坑了,笑)。
为什么非学不可呢?
不懂 Matlab,你将难以真正掌握 EEGLAB,这将影响你真正掌握脑电信号处理和数据分析。在你处理数据时,你会发现效率低下,不得不总是厚着脸皮问师兄师姐,或者在某些不靠谱的论坛和 QQ 群里提问,然后就没有然后了。如果碰到个热心肠的帮你解答,算你运气好。有时候,你会看到报错就罢工骂娘,不知所措。某天,老板或者师兄师姐好心地给你分享了一些脚本,然后“指导”你怎么修改这些脚本。好吧,天堂或是地域,你将看造化。若是脚本靠谱,能“正常运行”,看似你可以长嘘一口气,并且准备请师兄师姐吃顿大餐,感谢他们拯救了你。但是别急,虽然请客是必须的,(笑)。但是你得回头仔细检查脚本是不是靠谱的。啥是靠谱?怎么检查呀?这就是你要懂 Matlab,懂原理了。很多时候,脚本不报错,但可能隐藏着更严重的问题。直接拿着别人的甚至不明来源的脚本用,首先不说代码难不难读懂(编程规范与否),重要的是其流程不一定适合你的数据和研究。学着站在别人的肩膀上解决问题没错,但是你得会灵活运用别人的脚本。当你能够根据自己的需要,对脚本进行必要的删减或者补充,至少对一名非程序员来说,算是掌握了。学习计算机有关的东西,首先得会用别人造的轮子,切莫自己闷声码代码。
最后附上我整理的零基础学编程的经验。
小结一下,心理准备主要包括:建立长远的学习动机(Motivation);摆明正确的学习态度(Attitude)。
物理准备
物理准备很简单,首先一台不会让你抓狂的计算机,安装好所需要的软件,准备好练习需要的数据。
按照惯例,我又要“安利”一下 Linux 操作系统了。当然应该没几个人会真正去把系统换成 Linux 吧。不过在作为开源粉,推广是我的职责,(笑)。
为什么搞科研要用 Linux 呢?肤浅一些的理由是国外大牛大神用啊。当然,我们得明白,为什么他们要用 Linux 来分析数据。首先,降低研究成本,尊重版权。Linux 是免费开源的系统,里头一般也装的是免费开源的软件,除了游戏和某些特殊行业要求,基本可以替代 windows 系统。Linux 系统轻巧但性能好,使用起来更流畅,大型服务器都是 Linux。然后,Linux 上配置科学计算和编程环境比 windows 要方便。Linux 更安全,在 Linux 上工作比 windows 上要高效许多。Linux 的工作方式能够让你习惯通过命令行去与计算机交互,这是提高效率的关键点。点到为止,感兴趣的朋友自己去检索 Linux 相比 windows 优势在哪儿。
既然是用 EEGLAB,那么首先得把 Matlab 安装好,并且准备好 EEGLAB。
如何安装 Matlab 请去用搜索引擎检索(Matlab 是商业软件,盗版软件我可不提供哦,这是为什么我要改用 Python 的原因)。这里提几个建议:
- 不要安装太老和太新的版本,免得出现不兼容问题;
- 安装时不要把所有 toolbox 都给选中,一般来说信号处理、统计、图像处理等几个工具包就够了,免得浪费硬盘空间;
- 安装路径请使用英文字母,尽量不要用空格;
- EEGLAB 文件夹随便你放在哪里,同样的,路径尽量使用罗马文字和下划线;
安装好 Matlab 后,请把 EEGLAB 的文件夹加入到 Matlab 的搜索路径中。为了让大家习惯命令行的工作方式,请把 Matlab 的工作界面改成 “only command window”。然后在 command window 里头输入:
addpath('<eeglab root directory>'); % 把 EEGLAB 的根目录加入搜索路径
% 或者
addpath(genpath('<eeglab root directory>')); % 把 EEGLAB 根目录下的子目录全都加入搜索路径
% 然后保存
savepath;
当你把搜索子路径都加入搜索路径时,对于较新版本的 EEGLAB,命令窗口会出现警告。不过没关系,问题并不大。为什么出现警告呢?可能因为工具包里可能有与 Matlab 自身环境相冲突的重名函数。如果只添加根目录至搜索路径,这时运行 eeglab
时,该命令会自动添加所需要的路径至搜索路径。
现在测试一下 EEGLAB 是否加载成功,在命令窗口输入 eeglab
,按回车。如果出现 EEGLAB 的 GUI(图形用户界面),表示已经加载成功。
学习数据分析,没有数据是不行的。一般来说,想到要学 EEGLAB 的,应该是已经有了数据了,因为不是老板“逼”,谁吃饱了没事儿干来学 EEGLAB 呢?!(笑)。如果没有数据,EEGLAB 官网教程有练习数据。个人建议最好用自己熟悉的数据练习。毕竟数据分析要带着问题和目的,没有绝对的“数据驱动”。纯数据驱动我个人并不提倡。很多人可能认为数据驱动很高大上,是个趋势,好发文章,其实不然。首先,数据量足够大,这种量级的数据,我们是 HOLD 不住的。然后,数据驱动使用的方法也是“数据驱动型”的,例如机器学习中的非监督学习,没有对模型进行假设。你用个参数检验的方法,试来试去,各种指标做相关。这可不是“数据驱动”,这是保守诟病的光撒网钓鱼的策略。另外,数据驱动,换个称谓,探索性分析,是需要谨慎行事的。对于探索性的发现,标准更严格,下结论要保守。不能一看到“发现”了结果,就像中了彩票似的,欢天喜地。如果你认为自己是一名严谨的科研工作者,请一定要批判地看待你探索性地发现的结果。因为很有可能结果是假阳性,特别是对于 EEG 和 fMRI 这种高维的且受噪声影响大的数据。对于出现的结果,一定要秉持科学精神,严肃看待,不要偷着乐。不过话又说回来,谁又会在乎这所谓的科学精神呢?又不能换成票子,买房子和车子,(笑)。何况咱们的老板们只求结果,不求你怎么得到结果,结果靠不靠谱更不是他们关心的问题。老话说得好,不管啥结果,能灌水的结果就是好结果,(笑)。
刚才扯远了一些,总的来说,最好用自己了解的数据来操练,分析数据最开始的过程就是了解数据。
小结
明确学习目的,学习内容,做好必要的准备,然后才能正儿八经地去学。下一部分,将总结自己两年的 EEGLAB 学习经验,分享给大家,如何优雅地学习 EEGLAB。