开源仓库py-why/causal-learn1,646 Stars

causal-learn

从观测数据中自动学习变量间的因果结构图,覆盖三大流派

面向需要从观测数据(无需干预实验)中发现因果结构的研究者。提供基于约束、基于评分和基于函数因果模型三类方法,输出因果图供后续因果推断使用。

bo老师判断:值得观察

方向值得关注,建议先确认当前任务是否真正需要它。

...互动状态已更新

什么时候用

先判断任务是否合适

  • 有观测数据但没有干预实验,需要探索变量间可能的因果结构时
  • 需要用因果图指导后续的因果效应识别和估计时
  • 需要比较不同因果发现方法对同一数据的不同结论时

先准备什么

材料越清楚,结果越有用

  • 准备观测数据矩阵(样本数×变量数),确保数据质量
  • 判断数据类型:线性/非线性、连续/离散、是否有时间维度
  • 明确是否有先验因果知识(已知的必边或禁边)

它会怎样推进

从材料到可以检查的结果

  1. 01

    选择方法

    根据数据性质选择约束法(PC/FCI)、评分法(GES)或函数因果模型法(LiNGAM)

  2. 02

    选检验方式

    为约束法选条件独立性检验:线性连续用fisherz,非线性用kci,离散用chisq

  3. 03

    运行发现

    调用对应算法从数据中学习因果图结构

  4. 04

    检查输出

    检查CPDAG/PAG中的等价类方向和SHD等评估指标

  5. 05

    交叉验证

    用不同方法或参数验证因果结构的稳定性

第一次这样开始

把仓库地址直接交给 AI

先让 AI 说明环境和风险,再完成最小安装验证。跑通以后,再把自己的真实材料放进去。

第一次直接复制

帮我安装这个库:https://github.com/py-why/causal-learn
安装前先告诉我需要什么环境,安装后帮我跑通一个最小示例。

结果出来后

先看这些检查点

  • 输出的因果图是CPDAG(等价类,部分方向不确定)还是确定方向图
  • 条件独立性检验方法是否匹配数据类型
  • 因果充分性假设是否成立(如有潜在混杂需用FCI而非PC)
  • 使用BIC评分时lambda惩罚值是否合理,图是否过密或过疏

常见误区

这些判断仍由你负责

  • 把PC算法输出的等价类(CPDAG)当作确定因果方向
  • 对非线性数据用fisherz检验导致错误骨架
  • 在存在潜在混杂时仍用假设因果充分的PC算法而非FCI
  • 用Granger因果(预测性因果)替代结构因果解释

技术依据

查看能力拆解、验证范围与来源

能力地图6 项已拆解能力
  1. 01

    因果图操作与评分

    为因果发现算法提供底层支撑:(1) 因果图的统一表示与操作(DAG/CPDAG/PAG/PDAG 的端点矩阵表示、转换、查询);(2) 结构学习的评分函数库(BIC/BDeu/CV/marginal 六类局部评分);(3) 发现结果与真值的评估指标(SHD、邻接/箭头混淆矩阵)。这些是算法能运行和被评价的基础设施。

  2. 02

    基于函数因果模型的因果发现

    利用特定函数因果模型(Functional Causal Model, FCM)的可识别性约束:主要是非高斯性(LiNGAM)、非线性加性噪声(ANM)或后非线性(PNL):把数据拟合到结构方程模型后,通过残差独立性检验判定因果方向,从而在有向无环图上确定(而不仅是等价类)因果结构。覆盖线性非高斯(LiNGAM 家族)、非线性加性噪声(ANM)、后非线性(PNL)。

  3. 03

    基于分数的因果发现

    不从条件独立性出发,而是为每个候选 DAG 定义一个评分函数(BIC/BDeu/CV 似然/marginal 似然),在 DAG 等价类空间或排列空间中搜索评分最优的因果结构,输出 CPDAG。覆盖贪心等价搜索(GES)、精确搜索(ExactSearch,DP/A)、排列类搜索(BOSS/GRaSP)和连续优化类方法(CALM)。

  4. 04

    基于约束的因果发现

    从观测数据出发,用条件独立性检验(conditional independence test)反复检验变量间是否独立,先学出无向骨架(skeleton),再按 v-结构(collider)和 Meek 规则定向,得到表示因果结构的 CPDAG(PC)或允许潜在混杂的 PAG(FCI),或处理非平稳/异质数据的增广骨架(CDNOD)。

能力主要输入主要输出人工检查

因果图操作与评分

源码已核对

  • 图类:节点列表 nodes(GraphNode 对象)、边定义(endpoint 组合)。
  • DAG2CPDAG:G(Dag 对象)。
  • PDAG2DAG:PDAG 邻接矩阵。
  • 图操作:GeneralGraph 对象(可被 drawpydotgraph 可视化、tonxgraph 转 networkx)。
  • 转换:新的 GeneralGraph(CPDAG/DAG/PAG)。
  • 评分:float(局部评分值,越大约好或越差取决于评分定义)。
  • 端点矩阵的读图约定是否正确(迁移/比较时)。
  • 评分函数选择是否匹配数据(线性→BIC、离散→BDeu、非线性→CV/marginal)。
  • SHD 评估时真值图与估计图是否在同一端点约定下。

基于函数因果模型的因果发现

源码已核对

  • X:numpy ndarray,shape=(nsamples, nfeatures),观测数据。
  • LiNGAM 共有(BaseLiNGAM):randomstate(种子)、priorknowledge(先验因果顺序矩阵,0=禁路径/1=必路径/-1=未知)、applypriorknowledgesoftly、measure('pwling' 或 'kernel',DirectLiNGAM 用)。
  • ICALiNGAM:maxiter(FastICA 最大迭代,默认 1000)。
  • LiNGAM:adjacencymatrix(B 矩阵,B[i,j]=j→i 的系数)、causalorder(因果顺序列表)。
  • VARLiNGAM:结构 VAR 系数 + 同期因果邻接矩阵 + BootstrapResult。
  • ANM:方向判定(X→Y 或 Y→X)。
  • 数据是否满足非高斯(LiNGAM)/非线性加性(ANM)/后非线性(PNL)假设:核心可识别性人工门。
  • causalorder 是否与领域时间/逻辑顺序一致。
  • VARLiNGAM 的滞后阶是否合理(用 BIC 选后仍需人工确认)。

基于分数的因果发现

源码已核对

  • X:numpy ndarray,shape=(nsamples, nfeatures),观测数据。GES 支持用 cov(协方差矩阵)+ n(样本量)替代 X(仅 BIC 类评分)。
  • scorefunc:评分函数名,localscoreBIC / localscoreBDeu / localscoreCVgeneral / localscoremarginalgeneral / localscoreCVmulti / localscoremarginalmulti / localscoreBICfromcov。
  • maxP(GES):允许的最大父节点数。
  • GES:Record 字典。
  • ExactSearch:GeneralGraph(最优 DAG)。
  • BOSS/GRaSP:GeneralGraph(CPDAG)。
  • scorefunc 是否匹配数据类型(线性/非线性、连续/离散):核心人工门。
  • lambdavalue / maxP 是否合理(控制稀疏与复杂度)。
  • GES 贪心结果是否需要用 ExactSearch 复核全局最优。

基于约束的因果发现

源码已核对

  • data:numpy ndarray,shape=(nsamples, nfeatures),观测数据矩阵。
  • alpha:显著性水平,默认 0.05。
  • indeptest:条件独立性检验方法名,fisherz/chisq/gsq/kci 等(见 causal-learn-能力-条件独立性检验)。
  • PC/CDNOD:CausalGraph 对象。
  • FCI:GeneralGraph 对象(PAG),含 endpoint 矩阵、ambiguoustriples、underlinetriples。
  • CI 检验方法是否匹配数据类型(线性/非线性、连续/离散):核心人工门。
  • causal sufficiency 是否成立(决定用 PC 还是 FCI)。
  • alpha 是否合理(过小漏真因果边,过大引入假边)。

时间序列因果发现

源码已核对

  • Granger:
  • VARLiNGAM:
  • Granger:pvaluematrix(逐滞后阶的 p 值矩阵)、adjmatrix(逐滞后阶的二值邻接矩阵)。
  • VAR-LiNGAM:adjacencymatrices(同期因果 B + 滞后 AR 系数)、causalorder、TimeseriesBootstrapResult(bootstrap 稳定性)。
  • 时间序列是否平稳(决定 Granger 可用性):核心人工门。
  • VAR-LiNGAM 残差是否满足非高斯(决定同期因果可识别性)。
  • 滞后阶 maxlag/lags 是否合理(BIC 选择后仍需人工确认)。

条件独立性检验

源码已核对

  • data:numpy ndarray,shape=(nsamples, nfeatures),完整观测数据矩阵(初始化 CIT 时传入一次)。
  • method:检验方法名,'fisherz'/'mvfisherz'/'mcfisherz'/'kci'/'fastkci'/'rcit'/'chisq'/'gsq' 之一。
  • Xs、Ys:要检验独立性的变量索引列表。
  • pvalue(float):条件独立性检验的 p 值。
  • CIT 实例可被 pc/fci/cdnod 直接作为 indeptest 参数传入(传方法名字符串或 CIT 对象)。
  • 缓存的中间对象(相关矩阵、核矩阵)。
  • method 是否匹配数据类型(线性连续→fisherz、非线性→kci/rcit、离散→chisq/gsq、含缺失→mvfisherz):核心人工门。
  • alpha 阈值是否合理。
  • 大数据用 kci 是否需要降采样或改用 rcit/fastkci。

处理机制

  1. 01

    核心处理链

    从观测数据中自动学习变量间的因果结构图,覆盖三大流派

已核对范围

  • 静态读取 causallearn/graph/(GeneralGraph、Dag、Edge、Endpoint、GraphClass、GraphUtils、SHD、AdjacencyConfusion、ArrowConfusion)
  • 静态读取 causallearn/utils/DAG2CPDAG.py、DAG2PAG.py、PDAG2DAG.py、TXT2GeneralGraph.py
  • 静态读取 causallearn/score/LocalScoreFunction.py(6 类评分)、LocalScoreFunctionClass.py
  • 静态读取 causallearn/utils/GraphUtils.py
  • 静态读取 causallearn/search/FCMBased/lingam/(directlingam、icalingam、varlingam、varmalingam、rcd、CAMUV、multigroupdirectlingam、longitudinallingam、causaleffect、bottomupparcelingam)
  • 静态读取 causallearn/search/FCMBased/ANM/ANM.py
  • 静态读取 causallearn/search/FCMBased/PNL/PNL.py
  • 静态读取 causallearn/search/FCMBased/lingam/hsic.py、hsic2.py(HSIC 独立性检验)

仍待核对

  • 未运行图转换(dag2cpdag/pdag2dag),未验证转换输出
  • 未运行 SHD 评估,未验证指标计算
  • 未验证 LocalScoreFunction 各类的实际评分值
  • 未运行任何 LiNGAM/ANM/PNL,未验证邻接矩阵和因果顺序输出
  • 未验证 ICA-LiNGAM 与 Direct-LiNGAM 在同一数据上的差异
  • 未验证 VAR-LiNGAM 的时间序列滞后因果输出
  • 未运行 ges/exactsearch/boss/grasp,未验证实际评分搜索输出
  • 未验证 BIC 与 BDeu 在离散数据上的评分差异

读取版本

e30895b7ad41c429be73975a6a0b6bdea8146a7e

许可

MIT

最近核对

内容 2026-07-10
Stars 2026-07-11

已完成源码核对

科研之我见

AI 可以参与科研的哪些环节?一张 11 环节工作流全景图

从选题、文献、理论、数据到投稿,逐环节判断 AI 可以主导、需要人工校验和必须由研究者把关的工作。

查看内容

文献 · 分析 · 写作

grobid

把学术论文PDF解析成结构化TEI XML,提取元数据、全文结构和参考文献

查看内容

设计 · 分析 · 验证

CausalPy

用贝叶斯方法做准实验因果推断,含10+方法和稳健性诊断套件

查看内容

文献 · 设计 · 分析 · 写作

Scientific-Agent-Skills

为AI科研代理提供文献检索、写作、统计、实验设计和同行评审的结构化能力。

查看内容

相关课程

把单项工具放进完整研究设计流程

课程一从研究问题、文献判断、理论假设和方法骨架继续推进,帮助你建立可以复用的研究设计档案。

查看课程一