/pattern_causality

论文 "Unveiling causal interactions in complex systems" 中 Pattern Casuality 算法的 Python 实现

Primary LanguagePythonMIT LicenseMIT

pattern_causality

本代码使用 Python 重构了“模式因果” skstavroglou/pattern_causalityR 语言算法,并修复了一些错误。论文:https://doi.org/10.1073/pnas.1918269117

说明

由于论文作者的代码经过丑化难以阅读,且有在一些情况下会报错。所以本文只是对源代码的重构,不涉及任何算法上的修改。

所以此仓库的算法没有任何的改动和个人理解,此仓库不讨论该算法的正确性和有效性

有关我对该算法的理解和看法,请移步模式因果(Pattern Casuality)真的有用吗?

使用方法

参照 test.py 中的例子。

  1. 使用 pc.py 中的 PC 类构建 pc 实例,参数如下

    pc = PC(X, Y, E=2, tau=1, p=2, h=0)

    X: 原因时间序列

    Y: 结果时间序列

    E: 嵌入维度

    tau: 滞后期

    p: $L_p$ 距离,1 为曼哈顿距离,2 为欧几里得距离

    h: 预测跨度期,为 0 时为同步预测

  2. 使用 pc.calc(save_to=) 计算 XY 的因果强度:

    pc.calc()

    save_to: 指定结果输出路径,默认为当前目录的 result.csv 文件

    结果输出为三列表格,第一列为各时点正因果,第二列为负因果,第三列为暗因果。

正确性及注意事项

本代码使用测试数据与作者的 R 语言代码进行了结果对比,当 E=2 时所有测试数据均得到相同结果。 当 E=3 时作者代码运行报错,故未测试,用户可自行测试。

本代码只是对论文算法和作者 R 语言代码的 Python 重构未进行任何算法上的改动

如果你觉得本代码对原文算法理解有误,欢迎提 issue 交流,但请注意本代码使用测试数据在 E=2 时通过了测试。关于 Python 语言层面的问题请自行解决。