本帖最后由 matlab的旋律 于 2018-6-4 04:03 编辑
最近事情比较多,一直没来得及更新这篇有关脑电的博客。这篇博客主要介绍时间序列到网络结构的映射,其中的这种方法使用网络结构统计数据来表征时间序列的特征。在该方法中,时间序列通过分位数映射到图的节点中。这种方法能够捕获和量化诸如原始信号底层动态中存在的长范围相关或随机性等特征,作者在论文中将生成的网络称为分位图(QGs)。按照作者提出的方法,将QG方法应用于检测健康和不健康受试者的脑电时间序列(EEG)之间差异的问题,其主要目标是说明动力学的差异如何反映在拓扑结构中相应的QG。作者的实验结果表明,QG方法不仅可以区分癫痫和正常数据,还可区分癫痫发作前的不同发作阶段/模式,如发作前的EEG变化和癫痫发作期的EEG变化。由于作者用python做的仿真,并且没有给出源码,本文用Matlab重现了论文的仿真,具体仿真过程如下(具体程序参考附件压缩包): dataLen = 60; randQ = 4; K = 1; randData = randn(1,dataLen); randQG = getQG(randQ,randData,K); quanSec = quantile(randData,randQ-1); edgePlot = [min(randData),max(randData)]; 生成一段长度为dataLen白噪声,并且定义QG的Q(即位)为4,转换矩阵的时间延迟为K = 1;其中getQG为生成转换矩阵函数(可用转换矩阵绘制QG图);quantile返回数据中值的分位数,这里Q等于4,因此quanSec有三个值,这三个值为将randData个数等分为4的位值; edgePlot为randData的边界值,在fill中绘制边界。其中得到的图如下: 其中绘制QG图的过程包括:先使用dtmc从指定的状态转换矩阵创建离散时间的有限状态时均齐马尔可夫链mc,然后使用graphplot绘制Network图,具体程序如下: mc =dtmc(randQG); graphplot(mc) 这里需要注意的graphplot函数是Matlab2018a新出的函数,之前的版本没有该函数。 下面来看论文作者的数据库,一共分为五大类,分别是:数据A,正常人,睁眼状态数据;数据B,正常人,闭眼状态数据;数据C,癫痫患者,癫痫对面区域数据;数据D,癫痫患者,癫痫区域数据;数据E,癫痫发病数据。每类数据包括100组长为4096时序信号,其中的一组原始数据如下图所示: 对每一组时序信号计算Q为30的QG矩阵,其中一组数据的QG矩阵如下图所示: 从图上可以看出患者以及发病状态与正常人的信号都有比较明显区别,其中在集合E中发现的高振幅和准周期模式被映射到QG转换矩阵中,其权重主要分布在次对角线上。另外绘制QG矩阵对应的network图如下: 从network图看不出明显区别,或许绘制network图需要从对应的长度上做下区分,这个后续会继续做下分析,有兴趣的朋友也可以一起分析沟通。 最后论文作者为了寻找不同类数据QG节点之间的相关性,对时延K从1到100进行了穷举验证,用平均跳跃长度进行评价,其中平均跳跃长度与时延K的关系图如下: 这里为了消除随机误差影响,其中的平均跳跃长度为五大类所有数据计算跳跃长度的平均值。从数据中可以看出:正常(A和B)和癫痫(C和D)患者的曲线在大约k = 4时形成具有最大间隔的两个不同的簇。对于k > 30,QG节点之间的相关性消失,并且所有曲线几乎重合。 最后通过boxplot绘制k = 4时的箱形图,其中在每个箱形图中,中心标记表示中位数,框的底部和顶部边缘分别表示第25和第75百分位数。晶须扩展到不被视为离群值的最极端的数据点,并且使用'+'符号单独绘制离群值。其中的箱形图如下所示: 从上面的分析中可以看出QG方法能够检变异的的EEG信号与正常EEG信号数据结构的差异,从EEG信号进行拓展到其他时序信号,如ECG信号做心律失常分析,机器故障诊断等等。 另外可以关注作者的微信公众号(扫描附件二维码),会有最新消息更新通知
|