格兰杰因果 / EEG脑电数据分析

(因为处理数据的时候需要用到格兰杰因果关系检验,相关的文献里又没有详细解释,但看格兰杰因果又有一些一知半解,于是自己学了一些相关的东西,整理了一下。)

格兰杰因果关系检验为2003年诺贝尔经济学奖得主克莱夫·格兰杰(Clive W. J. Granger)所开创,用于分析经济变量之间的格兰杰因果关系。他给格兰杰因果关系的定义为“依赖于使用过去某些时点上所有信息的最佳最小二乘预测的方差。”

所以说,这个格兰杰因果其实是一个时间序列计量经济学模型,但它的应用不仅限于计量经济学,比如这里我就用它来分析脑电数据。

于是,说到时间序列,我觉得吧,要想前后真正理清楚思路然后把它和我要做的东西关联起来,我决定自学一把信号与系统的比较浅显的一些概念和数学原理还有EEG脑电信号的处理。

写这个博客是记录自己的思考和学习过程,但想到它也可能有幸被人参考于是,列个大纲,可以根据需要看看。

1.信号与系统的基础概念梳理

什么是信号

定义:消息有用的部分

转换成信号的目的:便于传输、梳理

三大热点:传输、交换、处理

信号处理:特征提取、噪声消除、优化

什么是系统

定义:处理输入,生成想要的输出

信号描述

信号可表示为1/多个变量的函数

即,信号=函数

描述方式 :时域分析、频域分析、波形(函数图像)

信号分类

  1. 确定&随机
  2. 周期&非周期
  3. 连续(模拟信号)与离散(数字信号/抽样信号)
  4. 一维&多维
  5. 能量受限&功率受限

典型连续时域信号

  1. 指数信号(常用)
  2. 复指数信号(可表示各种常见信号)3e12eb30e6b94b919a8821926ba13ab4.png

复指数信号可分为实、虚两部分。其中,实部包含余弦信号,代表时域,体现信号大小,振幅、波峰等。虚部则为正弦信号代表频域,体现信号方向,频率变化。

抽样信号

描述:很小区间里有很大的值

Sa函数

用处:过滤、处理(小波变换)

脑电信号的分析方法

时域分析法——自回归AR模型

自回归模型是脑电分析中常用的一个传统模型,它会根据采集到的数据的更新不断更新参数,以更好地描述数据,然后在此基础上我们就可以用这个模型来进行谱估计和特征提取等等工作。

在时域空间,AR模型可以表述为一个线性预测问题。

我们假设时间序列是  x(1),x(2),........x(N),当前采样值为x(n),这个采样值可以用最邻近的前p个数据x(n-p),x(n-p+1),...,x(n-1)的线性加权和来近似。

x(n)的预测值即为

{x(n)}' = -\sum_{i=1}^{p} c_{pi}x(n-i)

其中p表示的是模型的阶数,c_{pi}表示的是权重。我们把预测值和实际值的差值称为前向预测的误差,

e_{p}(n) = x(n) - {x(n)}' =x(n) + \sum_{i=1}^{p} c_{pi}x(n-i)

对于整个x(1),x(2),........x(N)序列,定义其预测误差功率为预测误差的平方和,于是有

E = \frac{1}{N}\sum_{n=1}^{N}[x(n)+\sum_{i=1}^{p}c_{pi}x(n-i)]^{2}(假设x(1)前的值均为0)

对于参数c_{pi},一般用最小二乘法估计,目的就是使得我们在用这个p阶模型拟合给定数据的时候,预测误差功率E是最小的。

(这里我就不详细写了,大概思路就是令\frac{\partial E}{\partial c_{pi}} = 0 (1\leqslant i\leqslant p),然后我们能得到p个方程的方程组,代入预测误差功率的那个计算公式,得到最小预测误差功率)

 让我比较头秃的是这个AR参数的自相关估计法,这里定义了一个无穷实数据序列的自相关函数

 ,可以看到这个东西其实就是在最小预测误差功率的计算公式当中右边括号内的项,但是我确实没理解为什么是这样(早饭吃了鸡蛋,依旧没能捣鼓出来)

所以我当机立断决定先把参考资料截图,未来可能某天就突然明白了呢。

                                                

                                            

还有一个问题就是,前面提到了这个模型有一个阶数p,那这个p应该怎么确定呢?从减小计算复杂度的层面考虑应该尽量选用低阶的模型,这个常用的方法就有预测误差准则法和赤池信息准则法AIC。

最终预测误差准则法,它定义AR模型的阶数为使得预测误差功率最小的阶数。假设p阶模型所对应的预测误差功率为E_{p},FPE(p)=\frac{N + p}{N - p}E_{p}

赤池信息准则也不难理解,它的理念就是最小化信息量,但是信息量是比较抽象的一个概念,在这里可以用似然函数对数的均值估计。于是得到定义AIC(p) = Nlog(E_{p}) + 2p,使得这个式子最小的p就是AR模型的参数。

格兰杰因果关系检验

 格兰杰因果关系检验的统计学本质是对平稳时间序列数据的一种预测。在时间序列情形下,两个经济变量X、Y之间的格兰杰因果关系定义为:若在包含了变量X、Y的过去信息的条件下,对变量Y的预测效果要优于只单独由Y的过去信息对Y进行的预测效果,即变量X有助于解释变量Y的将来变化,则认为变量X是引致变量Y的格兰杰原因。

(其实把格兰杰因果关系检验应用在EEG信号的处理问题上我是有点困惑的,因为在我参考的一些资料当中很多也都提到了进行格兰杰因果关系检验的一个前提条件是时间序列必须具有平稳性,否则可能会出现虚假回归问题,而脑电数据它并不属于平稳的时间序列,maybe分段之后会稍微好一点点?然后我还看到有一个在格兰杰因果关系检验之前首先对各个指标时间序列的平稳性进行单位根检验的东西,我个人觉得吧,这个主要是在计量经济学里会用到的,没有细看)

继续说这个格兰杰因果。上面的内容里已经说了这个AR自回归模型的东西,格兰杰因果关系检验中用到的是受约束回归的思想。就是在这里有一个向量自回归模型,它能够尝试去说明一个变量的当前值受到自身和其他变量的过去值的影响。

由于我的脑电数据是用matlab读取的,所以格兰杰因果关系检验我也想尝试用matlab去实现。

先说一下实现的思路,在这里我们也假设两个时间序列 XY,然后判断X对Y是否有格兰杰因果关系。步骤如下:

首先,把时间序列 Y 对所有的滞后项  y_{t-1},y_{t-2},......,y_{t-q} 做一个受约束的回归(不包含滞后项 x),得到受约束的残差平方和RSSR。然后,在回归式中加入滞后项 x 做一个无约束的回归,得到无约束的残差平方和RSSUR

假设H_{0} : \alpha _{1}=\alpha _{2}=...=\alpha _{q}(我的理解就是假设这个x对y的预测没有起到帮助,也就是说我们先假设x不是y的原因)。 

然后就是上面笔记中写到的去做自回归和联合回归误差的F检验,即:遵循自由度为 q 和 (n-k) 的 F分布。在这里,n 是样本容量,q 等于滞后项 x 的个数,即有约束回归方程中待估参数的个数,k 是无约束回归中待估参数的个数。如果在选定的显著性水平α上计算的F值超过临界值Fα,则拒绝y原假设,我们就可以认为XY有格兰杰因果关系。

其中用到了AIC(赤池信息量)、BIC(贝叶斯信息量)的概念,感觉还没怎么弄明白,先甩个链接放着,等弄明白了再补充叭——(摆烂)https://blog.csdn.net/CHIERYU/article/details/51746554?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166210106516782428610074%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166210106516782428610074&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-4-51746554-null-null.142^v44^pc_ran_alice&utm_term=BIC&spm=1018.2226.3001.4187

然后就是代码实现的部分 ——

function granger(x,y,alpha,max_lag)

T = length(x);

BIC = zeros(max_lag,1);

RSSR = zeros(max_lag,1);

i = 1;

while i <= max_lag

        ystar = x(i+1:T,:);

        xstar = [ones(T-i,1) zeros(T-i,i)];

        j = 1;

        while j <= i

                xstar(:,j+1) = x(i+1-j:T-j);

                j = j+1;

        end

        [~,~,r] = regress(ystar,xstar);

        BIC(i,:) = T*log(r'*r/T) + (i+1)*log(T);

        RSSR(i,:) = r'*r;         % 受约束的残差平方和

        i = i+1;

end

x_lag = find(min(BIC));

BIC = zeros(max_lag,1);

RSSUR = zeros(max_lag,1);

i = 1;

while i <= max_lag

        ystar = x(i+x_lag+1:T,:);

        xstar = [ones(T-(i+x_lag),1) zeros(T-(i+x_lag),x_lag+i)];

        j = 1;

        while j <= x_lag

                xstar(:,j+1) = x(i+x_lag+1-j:T-j,:);

                j = j+1;

        end

        %加入滞后项

        j = 1;

        while j <= i

                xstar(:,x_lag+j+1) = y(i+x_lag+1-j:T-j,:);

                j = j+1;

        end

        [~,~,r] = regress(ystar,xstar);

        BIC(i,:) = T*log(r'*r/T) + (i+1)*log(T);

        RSSUR(i,:) = r'*r;         % 不受约束的残差平方和

        i = i+1;

end

y_lag = find(min(BIC));

F_num = ((RSSR(x_lag,:) - RSSUR(y_lag,:))/y_lag);

F_den = RSSUR(y_lag,:)/(T-(x_lag+y_lag+1));

F = F_num/F_den;

c_v = finv(1-alpha,y_lag,(T-(x_lag+y_lag+1)));         % 计算p值,参数分别为置信度、组内自由度、组间自由度

p = 1-fcdf(F,y_lag,(T-(x_lag+y_lag+1)));         % fcdf()用于计算f分布的累积函数

end

 

 

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
脑电信号格兰杰因果分析(Granger Causality Analysis)是一种用于研究脑电信号之间因果关系的方法,可以揭示不同脑区之间的信息传递方向。MATLAB是一种常用的科学计算软件,提供了丰富的工具箱,可以实现格兰杰因果分析。 MATLAB中可以利用信号处理工具箱中的函数进行脑电信号预处理和分析。首先,我们需要加载脑电信号数据并进行预处理,例如去除噪音和伪迹,滤波等。接下来,我们可以利用时间序列分析工具箱中的格兰杰因果分析函数,如grangercausality(),通过计算不同脑区之间的因果关系来揭示它们之间的信息传递方向。 格兰杰因果分析的基本原理是通过使用时间序列的前向和反向模型来比较预测误差的方差。如果一个脑区的时间序列对另一个脑区的预测误差有更显著的贡献,那么我们可以推断前一个脑区对后一个脑区有因果关系。 在MATLAB中,我们可以使用改进的格兰杰因果分析方法,如multivariate Granger causality(MVAR GC)和adaptive multivariate Granger causality(AMVARGC)来更准确地分析脑电信号之间的因果关系。这些方法使用了更复杂的模型和参数估计技术,提供了更可靠的结果。 总而言之,脑电信号格兰杰因果分析是一种重要的方法,可以帮助我们理解脑区之间的信息传递和功能连接。利用MATLAB中的函数和工具箱,我们可以实现对脑电信号的格兰杰因果分析,并得到相关的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N._

piu~打个赏吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值