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

article/2025/7/22 17:01:23

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

格兰杰因果关系检验为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

 

 


http://chatgpt.dhexx.cn/article/qchyDfrc.shtml

相关文章

ZincSearch轻量级全文搜索引擎入门到

ZincSearch轻量级全文搜索引擎入门到 Zinc是一个用于对文档进行全文搜索的搜索引擎。它是开源的&#xff0c;内置在 Go 中。Zinc不是从头开始构建索引引擎&#xff0c;而是构建在 bluge 之上&#xff0c;这是一个出色的索引库。ZincSearch特点&#xff1a; 无模式索引资源利用…

轻量级神经网络MobileNet全家桶详解

本文是转载文章&#xff0c;转载自从MobileNet看轻量级神经网络的发展&#xff0c;删除了文中冗余的部分&#xff0c;加入许多自己的理解&#xff0c;有些部分也通过pytorch进行了实现&#xff0c;并通过引入具体的计算更清晰的反映出轻量级神经网络的本质。 文章目录 一、前言…

mysql轻量级的管理工具

mysql轻量级的管理工具 最近用mysql老是发愁&#xff0c;为什么呢&#xff1f;&#xff1f; 因为很多调用mysql的工具都很大型&#xff0c;我想要个轻量级的。 在进过百度谷歌的各种搜索&#xff0c;发现一个在windows平台下非常好的mysql工具&#xff1a;HeidiSQL 官网&am…

轻量级git服务gogs平台

1. gogs安装 1. 官网地址下载 https://dl.gogs.io/ 选择需要的版本 本文下载最新版本 2. 解压安装 # 下载 wget https://dl.gogs.io/0.12.6/gogs_0.12.6_linux_amd64.tar.gz# 解压到指定目录 tar -zxvf gogs_0.12.6_linux_amd64.tar.gz -C /usr/local/ 3. 启动 /usr/loca…

轻量级网络之CondenseNet

轻量级网络之CondenseNet CondenseNet: An Efficient DenseNet using Learned Group Convolutions 2018CVPR的网络&#xff0c;文章的贡献从名字就能清晰明了的Get。利用可学习分组卷积&#xff0c;对DenseNet的进行轻量化改造。 首先看一下是如何替换网络中的普通卷积&#xf…

轻量级大数据计算引擎esProc SPL,Hadoop Spark太重

​强烈推荐一个大神的人工智能的教程&#xff1a;http://www.captainai.net/zhanghan 前言 背景:随着大数据时代的来临&#xff0c;数据量不断增长&#xff0c;传统小机上跑数据库的模式扩容困难且成本高昂&#xff0c;难以支撑业务发展。应对之法:很多用户开始转向分布式计算…

轻量级神经网络架构综述

轻量级神经网络架构综述 深度神经网络已经被证明可以有效的解决图像、自然语言等不同领域的问题.同时伴随着移动互联网技术的不断发展,便携式设备得到了迅速的普及,用户提出了越来越多的需求.因此,如何设计高效、高性能的轻量级神经网络是解决问题的关键.本文详细阐述了三种构…

轻量级锁的原理与实战

文章目录 1. 轻量级锁的核心原理2. 代码演示3. 轻量级锁的分类4. 轻量级锁的膨胀 1. 轻量级锁的核心原理 轻量级锁的执行过程&#xff1a;在抢锁线程进入临界区之前&#xff0c;如果内置锁&#xff08;临界区的同步对象&#xff09;没有被锁定&#xff0c;JVM首先将在抢锁线程的…

轻量级深度学习网络概览

调研了一下最近的一些轻量级网络&#xff0c;列举并简单介绍各个网络的设计思路 PVANET 2016年1月在arxiv网站第一次提交 文章地址&#xff1a;https://arxiv.org/abs/1608.08021 代码链接&#xff1a;https://github.com/sanghoon/pva-faster-rcnn 文章目的是减少网络计算量…

详细且通俗讲解轻量级神经网络——MobileNets【V1、V2、V3】

文章目录 轻量级神经网络——MobileNetsMobileNetV1深度可分离卷积1、**深度卷积**✨✨✨2、**逐点卷积**✨✨✨ 参数量和计算量1、**标准卷积**2、**深度可分离卷积**✨✨✨ MobileNetV1的网络结构及效果 MobileNetV2Linear Bottlenecks✨✨✨Inverted Residuals✨✨✨MobileN…

目标检测--轻量级网络(截至2022-04-21)

目标检测领域&#xff0c;基于深度学习模型的方案 截至目前的轻量级网络&#xff0c;比较有名的有这些 轻量级目标检测算法整理_牧羊女说的博客-CSDN博客_轻量级目标检测随着目标检测算法的快速发展&#xff0c;以及终端应用的日渐广泛&#xff0c;工业界对深度学习网络在终端…

linux的轻量级桌面,适用于Linux的轻量级桌面是最适合您的 | MOS86

当谈到Linux时&#xff0c;似乎大多数人都以最多的眼睛糖果来谈论桌面环境。虽然这些桌面是以自己的方式伟大的&#xff0c;但他们不是每个人都在寻找图形密集和漂亮的东西。 一些Linux用户喜欢在Linux计算体验方面采用更精简和简化的方法。正是因为这个原因 Note:这个列表中的…

轻量级锁与重量级锁

目录 一、轻量级锁 1、使用场景 2.使用过程 2.1每次指向到synchronized代码块时&#xff0c;都会创建锁记录&#xff08;Lock Record&#xff09;对象&#xff0c;每个线程都会包括一个锁记录的结构&#xff0c;锁记录内部可以储存对象的Mark Word和对象引用reference 2.2让锁…

轻量级卷积神经网络

目录 SqueezeNet(2016.11) SqueezeNet(2016.11) 作者认为模型的参数量是影响模型大小以及训练速度的主要因素&#xff0c;因此本篇文章的设计思想就在于如何减少模型的参数量。本篇文章共有6节&#xff0c;其中第1、2节为介绍及相关工作部分&#xff1b;第3节描述了SqueezeNet…

轻量级linux桌面环境,Linux发行版最为轻量级的桌面环境之一Xfce 桌面

开源多样性应该是 Linux 最好的特性之一,用户可以不断尝试各种自己喜欢的新鲜玩法与花样,并从中选择最适合自己的应用。无论你是 Linux 新人还是老鸟,层出不穷的应用和桌面环境可能都会让我们应接不暇,特别是尝试不同的 Linux 桌面环境,可以说是一件非常有趣但也耗时的事情…

鸿蒙轻量级数据存储Preferences

1&#xff0c;概述 鸿蒙轻量级偏好数据库-Preferences。 轻量级偏好数据库主要提供轻量级Key-Value键值对形式操作&#xff0c;支持少量数据&#xff0c;数据存在在本地文件中&#xff0c;同时也加载在内存中&#xff0c;所以速度快&#xff0c;效率高&#xff0c;属于非关系型…

轻量级目标检测算法整理

随着目标检测算法的快速发展&#xff0c;以及终端应用的日渐广泛&#xff0c;工业界对深度学习网络在终端应用的关注度越来越高&#xff0c;尤其是对于如何保持速度和精度上的平衡&#xff0c;也形成了不小的研究热度。本篇整理了一些较新的轻量级目标检测网络&#xff0c;结合…

轻量级网络总结

文章目录 1. SqueezeNet2. ShuffleNet2.1 v12.2 v2 3. MobileNet3.1 v13.2 v23.3 v3 4. GhostNet4.1 v14.2 v2 1. SqueezeNet SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and< 0.5 MB model size 考虑到卷积层的参数量为 C i n ∗ C o u t ∗ K ∗ K …

轻量级c语言开发环境,几款轻量级的C/C++编写软件

因为有同学问我写C用什么软件好点。。。其实这些软件各有优势&#xff0c;只不过看自己需要罢了。 我下了个VS 2017.....不过太大了点。算下来20G左右&#xff0c;硬盘小点的笔记本直接没法玩......(我的就没问题&#xff0c;嘻嘻嘻)&#xff0c;要是你想用VS2017&#xff0c;我…

Synchronized原理(轻量级锁篇)

Synchronized原理&#xff08;轻量级锁篇&#xff09; 简述 介绍 轻量级锁是JDK1.6之中加入的新型锁机制&#xff0c;它名字中的“轻量级”是相对于使用操作系统互斥量来实现的传统锁而言的&#xff0c;因此传统的锁机制就称为“重量级”锁。首先需要强调一点的是&#xff0…