Causal Inference

Average Causal Effect

Here’s how you may estimate the Average Causal Effect ACE using Pearl’s do-operator [Pea88, Pea00, Pea16, Pea18]. In this example, we want to estimate the ACE of drug on recovery where recovery is true.

digraph { node [fixedsize=true, width=0.3, shape=circle, fontname="Helvetica-Outline", color=crimson, style=filled] Z -> X Z -> Y X -> Y }

Z is confounding X and Y.

 1from pybbn.causality.ace import Ace
 2from pybbn.graph.dag import Bbn
 3from pybbn.graph.edge import Edge, EdgeType
 4from pybbn.graph.node import BbnNode
 5from pybbn.graph.variable import Variable
 6
 7# create a BBN
 8gender_probs = [0.49, 0.51]
 9drug_probs = [0.23323615160349853, 0.7667638483965015,
10              0.7563025210084033, 0.24369747899159663]
11recovery_probs = [0.31000000000000005, 0.69,
12                  0.27, 0.73,
13                  0.13, 0.87,
14                  0.06999999999999995, 0.93]
15
16X = BbnNode(Variable(1, 'drug', ['false', 'true']), drug_probs)
17Y = BbnNode(Variable(2, 'recovery', ['false', 'true']), recovery_probs)
18Z = BbnNode(Variable(0, 'gender', ['female', 'male']), gender_probs)
19
20bbn = Bbn() \
21    .add_node(X) \
22    .add_node(Y) \
23    .add_node(Z) \
24    .add_edge(Edge(Z, X, EdgeType.DIRECTED)) \
25    .add_edge(Edge(Z, Y, EdgeType.DIRECTED)) \
26    .add_edge(Edge(X, Y, EdgeType.DIRECTED))
27
28# compute the ACE
29ace = Ace(bbn)
30results = ace.get_ace('drug', 'recovery', 'true')
31t = results['true']
32f = results['false']
33average_causal_impact = t - f