colliders#

colliders(G)[source]#

生成表示图 G 中的碰撞器的 3-节点元组。

在有向无环图(DAG)中,如果你有三个节点 A、B 和 C,并且存在从 A 到 C 和从 B 到 C 的边,那么 C 是一个碰撞器 [1]。在因果图设置中,这意味着事件 A 和 B 都在“导致”C,并且对 C 进行条件化可以提供 A 和 B 之间的关联,即使 A 和 B 之间不存在直接的因果关系。

Parameters:
G

一个 networkx DiGraph

Yields:
一个表示碰撞器的 3-元组

每个碰撞器是一个包含父节点、碰撞器节点和其他父节点的 3-元组。

Raises:
NetworkXNotImplemented

如果 G 是一个无向图。

See also

v_structures

Notes

此函数是为在 DAG 上使用而编写的,但它也适用于循环图。由于碰撞器在循环因果图文献 [2] 中被提及,我们允许在此函数中使用循环图。建议您在需要该属性时测试输入图是否为无环图,如示例所示。

References

[2]

A Hyttinen, P.O. Hoyer, F. Eberhardt, M J ̈arvisalo, (2013) “Discovering cyclic causal models with latent variables: a general SAT-based procedure”, UAI’13: Proceedings of the Twenty-Ninth Conference on Uncertainty in Artificial Intelligence, pg 301–310, doi:10.5555/3023638.3023669

Examples

>>> G = nx.DiGraph([(1, 2), (0, 4), (3, 1), (2, 4), (0, 5), (4, 5), (1, 5)])
>>> nx.is_directed_acyclic_graph(G)
True
>>> list(nx.dag.colliders(G))
[(0, 4, 2), (0, 5, 4), (0, 5, 1), (4, 5, 1)]