今日更新DKM_1.3,版本更新内容:CCM收敛交叉映射、两阶段嵌套泰尔指数、三阶段嵌套泰尔指数。此前嵌套泰尔指数分解是单独的脚本,这次一并合并到DKM_1.3中。

目前因果检验常用的格兰杰因果检验,主要是依据时间序列的预测能力来识别序列之间的因果关系。如,我们有一个模型来预测时间序列Y,如果在模型中移除时间序列X,则模型对Y的预测能力大大降低,此时可以说X是Y的一个原因。

但是,格兰杰因果检验的前提是时间序列之间要满足可分离性,这就要求系统之间,各变量是纯随机的,或者线性的。但是,有些系统中,各个时间序列之间彼此依赖,并不能分离,又或者彼此之间是弱耦合的,这时格兰杰因果检验就不再适用。

针对这个问题,Sugihara等(2012)在Detecting Causality in Complex Ecosystems这篇文章中,提出了CCM收敛交叉映射算法。

具体做法如下:

假设有X和Y两个时间序列如下:

{X} = { X(1) ,X(2) ,X(3) ,…,X(L) }

{Y} = { Y(1) ,Y(2) ,Y(3) ,…,Y(L) }

分别构造X和Y的影子流形MX和MY。

MX= < X(t) ,X( t-τ) ,X( t-2τ) ,…,X( t-( E-1) τ) >

MY= < Y(t) ,Y( t-τ) ,Y( t-2τ) ,…,Y( t-( E-1) τ) >

其中τ为时间滞后,E为嵌入维度。t最小值为E+2,最大值为L。

对生成的影子流形MX和MY,用欧式距离计算MX和MY中每个点到其他点的距离,找到E+1个邻居节点,用这些点构造权重wi,然后利用公式:

收敛交叉映射python 收敛交叉映射延误_权重

分别估计Y和X的值。

计算估计值和实际值的相关系数,即CCM相关系数,在不同的时间序列长度中重复计算CCM相关系数,绘制CCM相关系数随长度L的变化情形,判断相关系数的收敛性。

权重wi的构造如下:

收敛交叉映射python 收敛交叉映射延误_时间序列_02

在DKM_1.3中,准备好数据,可以直接生成CCM相关系数随时间序列长度L变化的情形:

收敛交叉映射python 收敛交叉映射延误_权重_03

在这张图中,红色曲线表示,用时间序列B的影子流形预测时间序列A,在库长达到一定长度后,相关系数逐渐趋向于1;绿色曲线表示,用时间序列A的影子流形预测时间序列B,随着库长的增加,相关系数仍然很低,这说明A对B的驱动比B对A的驱动更强,也就是说,A是B的原因。

CCM收敛交叉映射,是对格兰杰因果检验的补充,当变量间是弱耦合关系,或者不可分离时,可以使用CCM收敛交叉映射来识别因果关系。