因果图

这是一个表示因果结构的DAGs的类。

通常来说,对于一组变量 \(V\) ,如果 \(V_j\) 能够对应于 \(V_i\) 的变化而变化,那么变量 \(V_i\) 被称为变量 \(V_j\) 的因。在 一个因果结构的DAG中,每个父节点都是它所有的孩子的直接的因。我们把这些因果结构的DAGs称为因果图。对于图的术语,举个例子,可以参考 [Pearl] 的Chapter 1.2。

有五个基本的由两到三个节点组成的结构用于构建因果图。除了这些结构,还有用概率的语言描述的在因果图中的关联和因果关系的流。任意两个节点 \(X\)\(Y\) ,如果被关联流连接在一起,则表示它们是统计不独立的。等价于 \(P(X, Y) \neq P(X)P(Y)\) 。令 \(X, Y\)\(W\) 为三个不同的节点,那么五个基本的结构包括:

  1. :

\[X \rightarrow W \rightarrow Y,\]

\(X\)\(Y\) 是统计不独立的;

  1. :

\[X \leftarrow W \rightarrow Y,\]

\(X\)\(Y\) 是统计不独立的;

  1. 对撞:

\[X \rightarrow W \leftarrow Y,\]

\(X\)\(Y\) 是统计独立的;

  1. 两个不相连的节点:

\[X \quad Y,\]

\(X\)\(Y\) 是统计独立的;

  1. 两个相连的节点:

\[X \rightarrow Y,\]

\(X\)\(Y\) 是统计不独立的。

在YLearn中,使用 CausalGraph 来表示因果结构,首先给一个python的字典,其中每个键都是它对应的通常由字符串的列表表示的值的每个元素的子节点。

类结构

class ylearn.causal_model.graph.CausalGraph(causation, dag=None, latent_confounding_arcs=None)
参数:
  • causation (dict) – 描述因果结构,其中值是对应的键的父节点。

  • dag (networkx.MultiGraph, optional, default=None) – 一个已知的图结构。如果提供了,DAG必须表示存储在因果关系中的因果结构。

  • latent_confounding_arcs (set or list of tuple of two str, optional, default=None,) – 元组中的两个元素是图中节点的名字 其中它们之间存在潜在的混淆弧线。有未观测的混淆因素的半马尔可夫图能够被转化为一个没有未观测到变量的图,其中可以添加双向潜在混淆弧线 表示这些关系。比如,在因果图X <- U -> Y,其中U是一个未观测到的X和Y的混淆因素,可以被等价的转变为X <–> Y,其中<–>是一个潜在的混淆弧线。

ancestors(x)

返回x中所有节点的祖先。

参数:

x (set of str) – 图中的一组节点。

返回:

图中x中节点的祖先。

返回类型:

一组str

descendents(x)

返回x中所有节点的后代。

参数:

x (set of str) – 图中的一组节点。

返回:

图中x中节点的后代。

返回类型:

一组str

parents(x, only_observed=True)

返回图中x节点的直接父节点。

参数:
  • x (str) – x节点的名字.

  • only_observed (bool, default=True) – 如果为True,那么仅找到观测到的在因果图中的父节点,否则,也包含未观测到的变量,默认是True。

返回:

图中x节点的父节点

返回类型:

列表

add_nodes(nodes, new=False)

如果new是False,则把nodes中所有的节点加入到现在的CausalGraph,否则创建一个新图并加入节点。

参数:
  • x (set or list) – 等待被加入到现在的因果图的节点

  • new (bool, default=False) – 如果是新创建,则返回一个新的图。默认是False。

返回:

修改的因果图

返回类型:

CausalGraph的实例

add_edges_from(edge_list, new=False, observed=True)

在因果图中加入边。

参数:
  • edge_list (list) – 列表中的每个元素包含两个元素,第一个元素是父节点

  • new (bool, default=False) – 如果是新创建,则返回一个新的图。默认是False。

  • observed (bool, default=True) – 如果未观测到,添加未观测到的双向混淆弧线。

返回:

修改的因果图

返回类型:

CausalGraph的实例

add_edge(edge_list, s, t, observed=True)

在因果图中加入边。

参数:
  • s (str) – 边的源。

  • t (str) – 边的目的。

  • observed (bool, default=True) – 如果未观测到,添加未观测到的双向混淆弧线。

remove_nodes(nodes, new=True)

把nodes所有的节点从图中移除。

参数:
  • nodes (set or list) – 等待移除的节点。

  • new (bool, default=True) – 如果为True,创建一个新图,移除图中的节点并返回。默认是False。

返回:

修改的因果图

返回类型:

CausalGraph的实例

remove_edge(edge, observed=True)

移除CausalGraph中的边。如果未观察到,移除未观察到的潜在的混淆弧线。

参数:
  • edge (tuple) – 2个元素分别表示边的起点和终点。

  • observed (bool, default=True) – 如果未观察到,移除未观察到的潜在的混淆弧线。

remove_edges_from(edge_list, new=False, observed=True)

移除图中在edge_list中所有的边。

参数:
  • edge_list (list) – 要移除的边的列表。

  • new (bool, default=False) – 如果new为真, 创建一个新的CausalGraph并移除边。

  • observed (bool, default=True) – 如果未观察到,移除未观察到的潜在的混淆弧线。

返回:

修改的因果图

返回类型:

CausalGraph的实例

build_sub_graph(subset)

返回一个新的CausalGraph作为图的子图,子图中的节点为subset中的节点。

参数:

subset (set) – 子图的集合。

返回:

修改的因果图

返回类型:

CausalGraph的实例

remove_incoming_edges(x, new=False)

移除x中所有节点的入射边。如果new为真,在新的CausalGraph做这个操作。

参数:
  • x (set or list) –

  • new (bool, default=False,) – 如果为真,返回一个新图。

返回:

修改的因果图

返回类型:

CausalGraph的实例

remove_outgoing_edges(x, new=False)

移除x中所有节点的出射边。如果new为真,在新的CausalGraph做这个操作。

参数:
  • x (set or list) –

  • new (bool, default=False,) – 如果为真,返回一个新图。

返回:

修改的因果图

返回类型:

CausalGraph的实例

property c_components

图的C-components集合。

返回:

图的C-components集合

返回类型:

str的集合

property observed_dag

返回图的观测到的部分,包含观测到的节点和它们之间的边。

返回:

图的观测到的部分

返回类型:

networkx.MultiGraph

property explicit_unob_var_dag

构建一个新的DAG其中所有未观测到的混淆曲线由明确的未观测的变量取代。

返回:

有明确的未观测到节点的DAG

返回类型:

networkx.MultiGraph

property topo_order

返回观测到的图中的节点的拓扑顺序。

返回:

Nodes in the topological order

返回类型:

generator