时间序列分析中的互相关与相干性分析:前导-滞后关系的理论基础与实际应用

简介: 时间序列数据在现代数据分析中广泛应用,从金融市场到生物医学领域。本文重点介绍两种分析工具:互相关和相干性分析。互相关用于量化两个时间序列的时域关系,揭示前导-滞后关系;相干性分析则评估信号在频率域的相关性,适用于脑电图等研究。通过实际案例和Python代码示例,展示了这两种方法的应用价值。

时间序列数据在现代数据分析中无处不在。从金融市场的股票价格波动到生物医学领域的心电图与脑电图信号,甚至是日常生活中的用水量变化,都可以通过时间序列来表征。深入理解时间序列信号之间的关联性对于提取有意义的数据特征至关重要。本文将重点介绍两种基本但强大的分析工具:互相关相干性分析。这些方法能够有效地揭示信号之间的内在关系,既可以用于识别前导-滞后关系,也可以用于检测频率域上的共振特性

互相关分析:时域关系解析

互相关是一种用于量化两个时间序列信号之间相似度的数学工具,其计算基于对一个信号施加时间延迟。通过互相关分析,可以确定一个信号是否在时间上"前导"或"滞后"于另一个信号,并量化它们在时间轴上的对齐程度。

从数学角度而言,两个时间序列x(t)y(t)之间的互相关函数定义如下:

互相关函数的数学表达式

公式分析:

以下我们将通过分析苹果公司(AAPL)微软公司(MSFT)的股票价格来演示互相关分析的应用。

我们将使用

yfinance

库获取实际的股票市场数据。分析目标是通过考察不同时间延迟下的互相关性,确定微软(MSFT)股价变动是领先于还是滞后于苹果(AAPL)的股价变动。

 importyfinanceasyf  
 importmatplotlib.pyplotasplt  
 importnumpyasnp  

 # 从Yahoo Finance获取指定时间段的股票数据 
 start_date="2019-01-01"  
 end_date="2024-01-01"  

 # 提取AAPL和MSFT的收盘价数据  
 aapl=yf.download("AAPL", start=start_date, end=end_date)['Adj Close']  
 msft=yf.download("MSFT", start=start_date, end=end_date)['Adj Close']  

 # 对数据进行标准化处理以便进行比较分析  
 aapl_norm= (aapl-aapl.mean()) /aapl.std()  
 msft_norm= (msft-msft.mean()) /msft.std()  

 # 设定延迟范围(±30天)  
 lags=np.arange(-30, 31)  

 # 计算互相关系数  
 cross_corr= [aapl_norm.corr(msft_norm.shift(lag)) forlaginlags]  

 plt.figure(figsize=(10, 6))  
 plt.plot(lags, cross_corr, marker='o')  
 plt.title('Cross-Correlation between AAPL and MSFT Stock Prices')  
 plt.xlabel('Lag (Days)')  
 plt.ylabel('Correlation')  
 plt.axhline(0, color='black', linestyle='--')  
 plt.grid(ls=':',lw='2')  
 plt.show()

互相关分析结果的解读需要关注以下几个关键点:

  • 正延迟区间:当延迟值为正(例如+10天)时,表示MSFT的价格变动领先于AAPL。如果在此区间观察到较高的相关性,即说明MSFT的价格变动可能对AAPL的未来走势具有预示作用。
  • 负延迟区间:当延迟值为负(例如-10天)时,表示AAPL的价格变动领先于MSFT。在此区间的高相关性表明AAPL的价格变化可能预示MSFT的后续走势。
  • 零延迟点:零延迟处的相关系数反映了两支股票的即时关联程度。

举例来说,如果在+5天延迟处观察到显著的正相关性,这表明MSFT的价格变动模式在约5天后往往会在AAPL的价格中得到体现。这种关系可以为量化交易策略的制定提供重要参考。

相干性分析:脑电信号频域关联性研究

相干性分析是一种评估两个信号在频率域上相关程度的方法,用于揭示特定频带内的同步活动。这种分析方法在脑电图研究中具有特殊意义,因为不同脑区在执行认知任务时可能表现出频率同步现象。

对于时间序列信号x(t)y(t),其在频率f处的相干性定义为:

值得注意的是,该公式形式与概率论和统计学中的标准化相关系数有着深刻的数学联系。

下面我们将使用MNE库进行脑电图数据的相干性分析。这个示例将考察两个脑电通道之间的相干性,以识别它们的频率同步特征。

 importmne  
 fromscipy.signalimportcoherence  
 importnumpyasnp  
 importmatplotlib.pyplotasplt  

 # 导入MNE示例脑电数据  
 eeg_data=mne.datasets.sample.data_path()  
 raw=mne.io.read_raw_fif(eeg_data+'/MEG/sample/sample_audvis_raw.fif', preload=True)  

 # 选择脑电通道  
 raw.pick_types(meg=False, eeg=True)  
 eeg_data=raw.get_data()  

 # 提取待分析的两个通道数据  
 eeg_channel_1=eeg_data[0, :]  
 eeg_channel_2=eeg_data[1, :]  

 # 获取采样频率  
 fs=int(raw.info['sfreq'])  

 # 计算通道间相干性  
 f, Cxy=coherence(eeg_channel_1, eeg_channel_2, fs=fs, nperseg=1024)  

 plt.figure(figsize=(20, 11))  
 plt.semilogy(f, Cxy)  
 plt.title('Coherence between EEG Channel 1 and 2')  
 plt.xlabel('Frequency [Hz]')  
 plt.ylabel('Coherence')  
 plt.grid(lw=2,ls=':')  
 plt.show()

相干性谱图中,横轴表示频率(Hz),纵轴表示相干性系数(取值范围0-1):

  • 高相干性区域:在特定频率点(如10 Hz)出现的高相干性表明两个通道在该频率上存在显著的同步活动,这可能对应于特定认知任务期间的α波同步现象。
  • 低相干性区域:相干性较低的频带表明这些频率上两个通道的活动缺乏显著的同步性。

这种分析方法可以有效地揭示大脑不同区域在视觉处理听觉任务或静息状态下的功能连接模式。

在临床应用中,α频带(8-12 Hz)的高相干性通常与视觉注意力任务相关。这种相干性特征可以作为特定认知状态的客观指标,还可以用于神经系统疾病的诊断,例如在癫痫患者中常可观察到异常的神经元同步化现象。

总结

本文详细介绍了时间序列分析中的两种重要工具:互相关相干性分析,并阐述了它们在信号关系研究中的应用:

  • 互相关分析能够有效识别时间序列之间的前导-滞后关系,这在金融市场分析中具有重要应用价值。
  • 相干性分析则专注于揭示信号的频率域特征,在神经科学研究中发挥着关键作用。

通过实际数据分析和Python实现示例,读者可以将这些方法应用于自己的研究领域,从时间序列数据中挖掘有价值的信息。

https://avoid.overfit.cn/post/3800d6eb1c884ea6a22de4a31c68cf85

作者:Thomas Konstantinovsky

目录
相关文章
|
机器学习/深度学习 数据采集 数据处理
掌握时间序列特征工程:常用特征总结与 Feature-engine 的应用
本文介绍了时间序列特征工程,包括滚动统计量、滞后特征、差分和变换等技术,用于提升机器学习模型性能。文章还推荐了Python库`feature-engine`,用于简化特征提取,如处理缺失值、编码分类变量和进行时间序列转换。示例代码展示了如何使用`feature-engine`提取时间戳信息、创建滞后特征和窗口特征。通过创建管道,可以高效地完成整个特征工程流程,优化数据预处理并提高模型效果。
2793 15
|
机器学习/深度学习 数据采集 算法
时间序列结构变化分析:Python实现时间序列变化点检测
在时间序列分析和预测中,准确检测结构变化至关重要。新出现的分布模式往往会导致历史数据失去代表性,进而影响基于这些数据训练的模型的有效性。
2092 1
|
机器学习/深度学习 算法 数据处理
一文讲懂“预测滞后性”:详细解析
本文介绍了预测分析中常见的“预测滞后性”现象及其原因,包括数据收集延迟、模型训练耗时、预测算法延迟及模型特性等。文章还提供了应对策略,如实时数据处理、选择合适模型、在线学习及多方法结合,并附有使用简单移动平均法进行时间序列预测的Python代码示例,帮助读者理解和优化预测过程。
|
机器学习/深度学习 PyTorch TensorFlow
Pytorch学习笔记(二):nn.Conv2d()函数详解
这篇文章是关于PyTorch中nn.Conv2d函数的详解,包括其函数语法、参数解释、具体代码示例以及与其他维度卷积函数的区别。
4107 0
Pytorch学习笔记(二):nn.Conv2d()函数详解
|
10月前
|
机器学习/深度学习 传感器 人工智能
拔俗AI预警数字化系统:让风险“看得见、防得住”的数字化哨兵
AI预警系统是企业的“数字哨兵”,通过机器学习实时分析海量数据,自动识别异常、提前预警风险,将传统“事后救火”变为“事前防火”。它更早发现、更准判断、持续进化,助力企业实现主动防御,守护业务稳定。
580 0
|
机器学习/深度学习 人工智能 Java
Java 技术支撑下 AI 与 ML 技术融合的架构设计与落地案例分析
摘要: Java与AI/ML技术的融合为智能化应用提供了强大支持。通过选用Deeplearning4j、DJL等框架解决技术适配问题,并结合Spring生态和JVM优化提升性能。在金融风控、智能制造、医疗影像等领域实现了显著效果,如审批效率提升3倍、设备停机减少41%、医疗诊断延迟降低80%。这种技术融合推动了多行业的智能化升级,展现了广阔的应用前景。
795 0
|
机器学习/深度学习 资源调度 自然语言处理
长短时记忆网络(LSTM)完整实战:从理论到PyTorch实战演示
长短时记忆网络(LSTM)完整实战:从理论到PyTorch实战演示
21136 0