算法介绍
在捕获了未观测变化因素的增广数据集上执行用于因果发现的 Peter-Clark 算法 (CD-NOD [1])。
用法
推荐使用 pydot 进行可视化。如果需要特定的标签名称,请参考此使用示例 (例如, ‘cg.draw_pydot_graph(labels=[“A”, “B”, “C”])’ 或 ‘GraphUtils.to_pydot(cg.G, labels=[“A”, “B”, "C"]))。
from causallearn.search.ConstraintBased.CDNOD import cdnod
# default parameters
cg = cdnod(data, c_indx)
# or customized parameters
cg = cdnod(data, c_indx, alpha, indep_test, stable, uc_rule, uc_priority, mvcdnod,
correction_name, background_knowledge, verbose, show_progress)
# visualization using pydot
# note that the last node is the c_indx
cg.draw_pydot_graph()
# or save the graph
from causallearn.utils.GraphUtils import GraphUtils
pyd = GraphUtils.to_pydot(cg.G)
pyd.write_png('simple_test.png')
参数
data: numpy.ndarray, shape (n_samples, n_features)。数据,其中 n_samples 是样本数量,n_features 是特征数量。
c_indx: 捕获未观测变化因素的时间索引或领域索引。
alpha: 所需的显著性水平 (float),范围在 (0, 1) 之间。默认值: 0.05。
indep_test: 独立性检验方法函数。默认值: ‘fisherz’。
- “fisherz”: Fisher's Z 条件独立性检验。
“chisq”: 卡方条件独立性检验。
“gsq”: G 方条件独立性检验。
“kci”: 基于核的条件独立性检验。(作为一种核方法,其复杂度与样本大小的立方成正比,因此如果样本大小不大,速度可能会很慢)。
“mv_fisherz”: 缺失值 Fisher's Z 条件独立性检验。
(对于更高效的非参数检验,您可以尝试 FastKCI 和 RCIT。这两种实现都仍处于初步阶段,可能存在一些问题)。
stable: 如果为 True,运行稳定化的骨架发现 [3]。默认值: True。
uc_rule: 如何定向未受保护的碰撞点 (unshielded colliders)。默认值: 0。
- 0: 运行 uc_sepset。
- -1: uc_rule 中的默认值。
0: 覆盖。
1: 定向为双向边。
2: 优先处理已存在的碰撞点。
3: 优先处理更强的碰撞点。
4: 优先处理更强*的碰撞点。
mvpc: 是否使用缺失值 PC。默认值 (CDNOD 推荐): False。
correction_name: 如果使用缺失值 PC,则进行缺失值校正。默认值: ‘MV_Crtn_Fisher_Z’
background_knowledge: class BackgroundKnowledge。根据指定的因果连接添加先验边。默认值: None。详细用法请参考其使用示例。
verbose: 如果应打印详细输出,则为 True。默认值: False。
show_progress: 如果应在控制台中显示算法进度,则为 True。默认值: True。
返回值
cg : 一个 CausalGraph 对象,其中 cg.G.graph[j,i]=1 且 cg.G.graph[i,j]=-1 表示 i –> j;cg.G.graph[i,j] = cg.G.graph[j,i] = -1 表示 i — j;cg.G.graph[i,j] = cg.G.graph[j,i] = 1 表示 i <-> j。
Huang, B., Zhang, K., Zhang, J., Ramsey, J. D., Sanchez-Romero, R., Glymour, C., & Schölkopf, B. (2020). Causal Discovery from Heterogeneous/Nonstationary Data. J. Mach. Learn. Res., 21(89), 1-53.