什么时候用
先判断任务是否合适
- 有观测数据但没有干预实验,需要探索变量间可能的因果结构时
- 需要用因果图指导后续的因果效应识别和估计时
- 需要比较不同因果发现方法对同一数据的不同结论时
先准备什么
材料越清楚,结果越有用
- •准备观测数据矩阵(样本数×变量数),确保数据质量
- •判断数据类型:线性/非线性、连续/离散、是否有时间维度
- •明确是否有先验因果知识(已知的必边或禁边)
它会怎样推进
从材料到可以检查的结果
- 01
选择方法
根据数据性质选择约束法(PC/FCI)、评分法(GES)或函数因果模型法(LiNGAM)
- 02
选检验方式
为约束法选条件独立性检验:线性连续用fisherz,非线性用kci,离散用chisq
- 03
运行发现
调用对应算法从数据中学习因果图结构
- 04
检查输出
检查CPDAG/PAG中的等价类方向和SHD等评估指标
- 05
交叉验证
用不同方法或参数验证因果结构的稳定性
第一次这样开始
把仓库地址直接交给 AI
先让 AI 说明环境和风险,再完成最小安装验证。跑通以后,再把自己的真实材料放进去。
第一次直接复制
帮我安装这个库:https://github.com/py-why/causal-learn 安装前先告诉我需要什么环境,安装后帮我跑通一个最小示例。
结果出来后
先看这些检查点
- 输出的因果图是CPDAG(等价类,部分方向不确定)还是确定方向图
- 条件独立性检验方法是否匹配数据类型
- 因果充分性假设是否成立(如有潜在混杂需用FCI而非PC)
- 使用BIC评分时lambda惩罚值是否合理,图是否过密或过疏
常见误区
这些判断仍由你负责
- 把PC算法输出的等价类(CPDAG)当作确定因果方向
- 对非线性数据用fisherz检验导致错误骨架
- 在存在潜在混杂时仍用假设因果充分的PC算法而非FCI
- 用Granger因果(预测性因果)替代结构因果解释
技术依据
查看能力拆解、验证范围与来源
技术依据
查看能力拆解、验证范围与来源
- 01
因果图操作与评分
为因果发现算法提供底层支撑:(1) 因果图的统一表示与操作(DAG/CPDAG/PAG/PDAG 的端点矩阵表示、转换、查询);(2) 结构学习的评分函数库(BIC/BDeu/CV/marginal 六类局部评分);(3) 发现结果与真值的评估指标(SHD、邻接/箭头混淆矩阵)。这些是算法能运行和被评价的基础设施。
- 02
基于函数因果模型的因果发现
利用特定函数因果模型(Functional Causal Model, FCM)的可识别性约束:主要是非高斯性(LiNGAM)、非线性加性噪声(ANM)或后非线性(PNL):把数据拟合到结构方程模型后,通过残差独立性检验判定因果方向,从而在有向无环图上确定(而不仅是等价类)因果结构。覆盖线性非高斯(LiNGAM 家族)、非线性加性噪声(ANM)、后非线性(PNL)。
- 03
基于分数的因果发现
不从条件独立性出发,而是为每个候选 DAG 定义一个评分函数(BIC/BDeu/CV 似然/marginal 似然),在 DAG 等价类空间或排列空间中搜索评分最优的因果结构,输出 CPDAG。覆盖贪心等价搜索(GES)、精确搜索(ExactSearch,DP/A)、排列类搜索(BOSS/GRaSP)和连续优化类方法(CALM)。
- 04
基于约束的因果发现
从观测数据出发,用条件独立性检验(conditional independence test)反复检验变量间是否独立,先学出无向骨架(skeleton),再按 v-结构(collider)和 Meek 规则定向,得到表示因果结构的 CPDAG(PC)或允许潜在混杂的 PAG(FCI),或处理非平稳/异质数据的增广骨架(CDNOD)。
| 能力 | 主要输入 | 主要输出 | 人工检查 |
|---|---|---|---|
因果图操作与评分源码已核对 |
|
|
|
基于函数因果模型的因果发现源码已核对 |
|
|
|
基于分数的因果发现源码已核对 |
|
|
|
基于约束的因果发现源码已核对 |
|
|
|
时间序列因果发现源码已核对 |
|
|
|
条件独立性检验源码已核对 |
|
|
|
处理机制
- 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 可以主导、需要人工校验和必须由研究者把关的工作。
查看内容具备相关能力的其他库
相关课程
把单项工具放进完整研究设计流程
课程一从研究问题、文献判断、理论假设和方法骨架继续推进,帮助你建立可以复用的研究设计档案。