多重分形去趋势交叉相关性分析(Multifractal Detrended Cross-Correlation Analysis, MF-DCCA)
1. 核心概念与理解
要理解MF-DCCA,我们最好将其拆解为几个部分:
- 交叉相关性分析 (Cross-Correlation Analysis): 研究两个不同时间序列 \(x(i)\) 和 \(y(i)\) 之间在不同时间滞后下的相关性。传统的皮尔逊相关系数只能衡量线性相关性,且对非平稳序列效果很差。
- 去趋势波动分析 (Detrended Fluctuation Analysis, DFA): 一种用于分析单个非平稳时间序列长程相关性和自相似性(分形特征)的强大方法。其核心是通过“去趋势”来消除序列中的局部趋势(如线性、多项式趋势),从而揭示其内在的标度特性。
- 去趋势交叉相关性分析 (DCCA): DFA方法的扩展,用于研究两个非平稳时间序列之间的长程交叉相关性。它计算两个序列去趋势后的协方差波动函数。
- 多重分形 (Multifractal): 标准DFA/DCCA假设序列是单分形的,即其标度行为在所有幅度波动下是均匀的。而多重分形意味着不同幅度的波动(大的波动 vs 小的波动)具有不同的标度行为。现实世界中的许多时间序列(如股票价格、心率、湍流)都表现出多重分形特性。
MF-DCCA的本质: 因此,MF-DCCA是DCCA和多重分形分析的结合。它旨在量化两个非平稳时间序列之间交叉相关性的多重分形特征,即分析它们之间不同波动幅度下的长程相关行为。
2. MF-DCCA算法步骤(详细版)
假设有两个长度相等的时间序列:\(x(i)\) 和 \(y(i)\), \(i = 1, 2, ..., N\)。
第1步:构造轮廓函数 (Profile)
计算两个序列的累积离差,将其转换为随机游走过程。
其中 \(\bar{x}\) 和 \(\bar{y}\) 是序列 \(x\) 和 \(y\) 的平均值。这一步将原序列转化为新的序列 \(X(i)\) 和 \(Y(i)\)。
第2步:分割与重叠(可选)
将两个轮廓序列 \(X\) 和 \(Y\) 分成 \(N_s\) 个不重叠的等长子段(窗),每段长度为 \(s\)。\(N_s = \text{int}(N/s)\)。
为了充分利用数据,通常也会从序列尾部重复此操作,从而得到 \(2N_s\) 个片段。
第3步:局部去趋势 (Local Detrending)
在每个长度为 \(s\) 的片段 \(\nu\) (\(\nu = 1, 2, ..., 2N_s\)) 上,对 \(X\) 和 \(Y\) 分别拟合一个多项式(通常为线性或二次)\(P_X^\nu(m)\) 和 \(P_Y^\nu(m)\) (\(m=1,2,...,s\))。然后计算该片段内的去趋势协方差:
第4步:计算波动函数 (Fluctuation Function)
对所有片段 \(\nu\) 的 \(F_{XY}^2(\nu, s)\) 进行 \(q\) 阶平均,得到 \(q\) 阶波动函数 \(F_{XYq}(s)\)。
当 \(q=0\) 时,采用几何平均:
这里的 \(q\) 是一个实数参数,其作用像一个“显微镜”:
- \(q >> 0\): 波动函数 \(F_{XYq}(s)\) 由大的波动(\(F^2(\nu, s)\) 大的片段)主导。它放大并揭示了大幅波动的标度行为。
- \(q << 0\): 波动函数 \(F_{XYq}(s)\) 由小的波动(\(F^2(\nu, s)\) 小的片段)主导。它放大并揭示了小幅波动的标度行为。
第5步:标度行为分析 (Scaling Behavior)
如果两个序列之间的交叉相关性具有多重分形特征,那么波动函数 \(F_{XYq}(s)\) 与尺度 \(s\) 会存在幂律关系:
对两边取对数:
其中 \(h_{XY}(q)\) 称为 广义Hurst指数。通过双对数图上 \(\log(F_{XYq}(s))\) 对 \(\log(s)\) 的线性回归,可以估计出对应于每个 \(q\) 的 \(h_{XY}(q)\)。
- \(h_{XY}(q) = 0.5\): 序列间交叉相关性类似于随机游走(无长程相关性)。
- \(h_{XY}(q) > 0.5\): 序列间存在持久的长程交叉相关性(一个序列的增加倾向于与另一个序列的增加相关,且这种影响是长期的)。
- \(h_{XY}(q) < 0.5\): 序列间存在反持久的长程交叉相关性(一个序列的增加倾向于与另一个序列的减少相关,行为类似于均值回复)。
第6步:多重分形强度评估
如果 \(h_{XY}(q)\) 是依赖于 \(q\) 的函数,则表明两个序列之间的交叉相关性具有多重分形特性。\(q\) 的变化越大,\(h_{XY}(q)\) 的变化也越大,则多重分形强度越强。
通常用奇异谱 \(f(\alpha)\) 来描述多重分形特性:
- Hölder指数 \(\alpha = h_{XY}(q) + qh_{XY}'(q)\) (即 \(h(q)\) 的Legendre变换)
- 奇异谱 \(f(\alpha) = q[\alpha - h_{XY}(q)] + 1\)
多重分形谱的宽度 \(\Delta \alpha = \alpha_{max} - \alpha_{min}\) 直接衡量了多重分形效应的强度:\(\Delta \alpha\) 越宽,多重分形性越强。
3. 代码
MF-DCCA算法的简化MATLAB实现框架。
function [hq, Fq, scales] = MF_DCCA(x, y, sc_min, sc_max, num_scales, q_arr, order)% MF_DCCA 计算两个时间序列的多重分形去趋势交叉相关性分析% 输入:% x, y - 输入时间序列 (列向量)% sc_min - 最小尺度% sc_max - 最大尺度% num_scales- 尺度数量% q_arr - q值的数组,例如 -5:0.2:5% order - 去趋势多项式的阶数 (1:线性, 2:二次, ...)% 输出:% hq - 广义Hurst指数 h(q)% Fq - 波动函数 Fq(s)% scales - 使用的尺度sN = length(x);scales = round(logspace(log10(sc_min), log10(sc_max), num_scales)); % 对数间隔的尺度num_q = length(q_arr);% 1. 计算轮廓序列X = cumsum(x - mean(x));Y = cumsum(y - mean(y));Fq = zeros(num_scales, num_q);for s_idx = 1:num_scaless = scales(s_idx);Ns = floor(N / s);% 确保有足够的分段if Ns < 20continue;endF2_XY = []; % 存储每个片段去趋势后的协方差% 2. 分割与去趋势 (非重叠分段)for v = 1:NssegX = X((v-1)*s + 1 : v*s);segY = Y((v-1)*s + 1 : v*s);% 创建自变量 (时间索引)t = (1:s)';% 拟合多项式并去趋势pX = polyfit(t, segX, order);pY = polyfit(t, segY, order);fitX = polyval(pX, t);fitY = polyval(pY, t);detrendX = segX - fitX;detrendY = segY - fitY;% 计算该片段的去趋势协方差F2_XY(v) = mean(detrendX .* detrendY);end% 3. 计算q阶波动函数for q_idx = 1:num_qq = q_arr(q_idx);if q == 0% 处理q=0的情况Fq(s_idx, q_idx) = exp(0.5 * mean(log(abs(F2_XY))));elseFq(s_idx, q_idx) = (mean(F2_XY .^ (q/2))) ^ (1/q);endendend% 4. 标度分析: 对每个q,拟合log(Fq(s)) ~ log(s)hq = zeros(1, num_q);log_scales = log(scales);for q_idx = 1:num_qlog_Fq = log(Fq(:, q_idx));% 使用线性回归拟合斜率,即h(q)p = polyfit(log_scales(:), log_Fq(:), 1);hq(q_idx) = p(1);end% 绘图: 波动函数figure;for q_idx = [1, floor(num_q/2), num_q] % 绘制几个代表性的qloglog(scales, Fq(:, q_idx), 'o-', 'DisplayName', ['q=', num2str(q_arr(q_idx))]);hold on;endxlabel('Scale s');ylabel('F_q(s)');title('MF-DCCA Fluctuation Function');legend show;grid on;% 绘图: 广义Hurst指数figure;plot(q_arr, hq, 'b-', 'LineWidth', 2);xlabel('q');ylabel('h(q)');title('Generalized Hurst Exponent');grid on;
end
使用示例:
% 生成两个具有长程交叉相关性的模拟序列
N = 3000;
x = cumsum(randn(N, 1)); % 标准随机游走
y = 0.6 * x + 0.4 * cumsum(randn(N, 1)); % y与x相关,但也包含自身噪声sc_min = 10;
sc_max = 200;
num_scales = 20;
q_arr = -5:0.5:5;
order = 1; % 线性去趋势[hq, Fq, scales] = MF_DCCA(x, y, sc_min, sc_max, num_scales, q_arr, order);
参考代码 多重分形去趋势交叉相关性分析DCCA www.youwenfan.com/contentcnh/55188.html
4. 应用场景
MF-DCCA被广泛应用于需要分析两个复杂系统之间相互作用的领域:
- 金融经济学: 分析不同股票市场、股票与大宗商品、加密货币之间的非线性动态相关性。
- 生理学: 研究不同生理信号(如心率与呼吸、脑电图(EEG)信号从不同脑区)之间的交互作用。
- 地球科学: 分析气候变化变量之间的关系,如温度与降水量、风速与波浪高度。
- 物理学: 研究湍流、颗粒物质等复杂系统中的交叉相关行为。
总之,MF-DCCA是分析两个非平稳时间序列之间复杂的、多尺度的非线性相关性的强大工具,它提供了远超传统相关系数的深刻见解。