Do-Calculus (p213)
![]() | ![]() |
Authors: Aymen Merrouche and Pierre-Henri Wuillemin.
This notebook follows the example from “The Book Of Why” (Pearl, 2018) chapter 7 page 213
import pyagrum as gumimport pyagrum.lib.notebook as gnbthe causal diagram
Section titled “the causal diagram”The corresponding causal diagram is the following:
We’re facing the following situation and we want to measure the causal effect of on :
fd = gum.fastBN("w->z->x->y;w->x;w->y")fdWe suspect the presence of some unmeasured confounders, that could explain the correlation between and and between and :
fdModele = gum.CausalModel(fd, [("u1", ["w", "x"]), ("u2", ["w", "y"])], False)# (<latent variable name>, <list of affected variables’ ids>).gnb.show(fdModele)Even with two umeasured confounders :
Section titled “Even with two umeasured confounders :”
- We can measure the causal effect of on using the back-door adjustment:
print(" + Back-door doing Z on Y :" + str(fdModele.backDoor("z", "y"))) + Back-door doing Z on Y :{0}
- We can measure the causal effect of on using the front-door formula:
print(" + Front-door doing W on X :" + str(fdModele.frontDoor("w", "x"))) + Front-door doing W on X :{1}
- In order to measure the causal effect of on , we can use neither the back-door adjustment nor the front-door formula:
print(" + Backdoor doing X on Y :" + str(fdModele.backDoor("x", "y")))print(" + Frontdoor doing X on Y :" + str(fdModele.frontDoor("x", "y"))) + Backdoor doing X on Y :None + Frontdoor doing X on Y :None
- In this case, the only way to measure the causal effect of on is to use the do-calculus:
gnb.showCausalImpact(fdModele, on="y", doing="x")|
|
| ||
|---|---|---|---|
|
| 0.3236 | 0.5246 | |
| 0.2020 | 0.5021 | ||
|
| 0.6764 | 0.4754 | |
| 0.7980 | 0.4979 | ||
