1. 非线性时间序列分析概述
非线性时间序列分析是研究复杂系统动态行为的重要工具。与传统的线性时间序列不同,非线性序列往往表现出混沌、分形等复杂特性,这使得传统的统计方法难以准确刻画其内在规律。在实际应用中,从金融市场的价格波动到气象系统的温度变化,再到生物医学信号,非线性时间序列无处不在。
复杂性分析和相似性分析是非线性时间序列研究的两个核心方向。复杂性分析旨在量化序列的不可预测程度和结构复杂度,而相似性分析则关注不同序列或同一序列不同片段之间的关联特性。这两个方向的结合,可以帮助我们更好地理解系统的演化机制,并为预测、分类等任务提供理论基础。
2. 复杂性分析方法解析
2.1 熵度量方法
熵是量化时间序列复杂性的经典指标。样本熵(Sample Entropy)通过比较序列中相似模式的概率来评估复杂性,对噪声具有较强的鲁棒性。近似熵(ApEn)是其前身,但存在偏差较大的问题。多尺度熵(MSE)则进一步考虑了不同时间尺度下的熵值变化,能更全面地反映系统复杂性。
实际计算时,建议序列长度至少为1000个点,嵌入维度m通常取2,相似容限r取0.1-0.25倍序列标准差。
2.2 分形分析方法
分形维数可以刻画时间序列的自相似特性。Hurst指数通过重标极差分析(R/S分析)计算,当H=0.5时表示随机游走,H>0.5表明长期记忆性。DFA(去趋势波动分析)则能更稳健地估计标度指数,特别适用于非平稳序列。
2.3 递归定量分析
递归图(RP)将序列的递归特性可视化,递归定量分析(RQA)则提供了量化指标:
- 递归率(REC):递归点比例
- 确定性(DET):对角线结构比例
- 层流性(LAM):垂直/水平结构比例
- 熵(ENTR):对角线长度分布的香农熵
3. 相似性分析技术实现
3.1 动态时间规整(DTW)
DTW通过寻找最优时间对齐路径来比较不同长度序列的相似性。相比欧氏距离,DTW能更好地处理时间轴上的非线性形变。改进的FastDTW算法将复杂度从O(n²)降至O(n),适合长序列分析。
from dtw import dtw def compute_dtw(seq1, seq2): alignment = dtw(seq1, seq2, keep_internals=True) return alignment.normalizedDistance3.2 形状相似性度量
基于形状的相似性方法关注序列的局部特征:
- 峰值位置和幅度
- 过零点间隔
- 局部极值序列
- 符号化表示(SAX)
3.3 相位空间重构
通过Takens定理重构相位空间后,可以计算:
- 相关性维度
- 最大Lyapunov指数
- 相位空间轨迹的Hausdorff距离
4. 完整分析流程与代码实现
4.1 数据预处理
import numpy as np from scipy import signal def preprocess_ts(series): # 去趋势 detrended = signal.detrend(series) # 归一化 normalized = (detrended - np.mean(detrended))/np.std(detrended) # 平滑处理 smoothed = np.convolve(normalized, np.ones(5)/5, mode='same') return smoothed4.2 复杂性分析实现
import nolds def complexity_analysis(series): results = {} # 样本熵 results['sampen'] = nolds.sampen(series) # DFA分析 results['dfa'] = nolds.dfa(series) # Hurst指数 results['hurst'] = nolds.hurst_rs(series) return results4.3 相似性分析实现
from sklearn.metrics.pairwise import cosine_similarity from pyts.metrics import dtw def similarity_analysis(seq1, seq2): # 余弦相似度 cos_sim = cosine_similarity([seq1], [seq2])[0][0] # DTW距离 dtw_dist = dtw(seq1, seq2) # 形状特征相似度 peak_corr = np.corrcoef(signal.find_peaks(seq1)[0], signal.find_peaks(seq2)[0])[0,1] return {'cosine':cos_sim, 'dtw':dtw_dist, 'peak_corr':peak_corr}5. 实际应用中的关键问题
5.1 参数选择经验
- 嵌入维度选择:
- 假近邻法(FNN)确定最小充分嵌入
- 通常取值为2-10,取决于序列复杂度
- 时间延迟选择:
- 自相关函数第一次过零点
- 互信息法第一个极小值
- 相似容限r:
- 一般为0.1-0.25倍数据标准差
- 太小会包含噪声,太大会丢失细节
5.2 常见问题排查
- 熵值计算为NaN:
- 序列长度不足
- 容限r设置过大
- 数据存在大量重复值
- DTW距离异常大:
- 检查序列是否已归一化
- 考虑使用约束窗口限制路径搜索
- 分形分析标度区间不明显:
- 检查数据是否满足幂律分布
- 尝试不同的区间划分方法
6. 进阶技巧与优化建议
- 多变量分析扩展:
- 多尺度多变量样本熵
- 交叉递归定量分析
- 计算效率优化:
- 对于长序列,使用PAA降维
- 并行化计算各尺度熵值
- 采用Cython加速核心计算
- 结果可视化:
- 递归图与交叉递归图
- 多尺度熵曲线
- 相位空间轨迹投影
实际项目中,我发现将多种方法组合使用往往能获得更可靠的结果。例如先通过DFA判断序列的长程相关性,再针对不同相关特性选择合适的熵度量方法。对于金融时间序列,建议重点关注5-20个时间尺度的多尺度熵变化。