dowhy
dowhy copied to clipboard
Clarification on frontdoor identification
A set of variables Z is said to satisfy the front-door criterion relative to an ordered pair of variables (X, Y), if:
- Z intercepts all directed paths from X to Y
- There is no unblocked backdoor path from X to Z
- All backdoor paths from Z to Y are blocked by X
I want to study the causal effect of A on C in the following diagram:

DoWhy identification retrieves B as a valid Z in order to apply frontdoor criterion. Though, I don't think the third condition is being fulfilled. Have I understood anything the wrong way?

Thank you in advance!
thank you for raising this issue @vicbeldo98 This may be a bug. Let me check.
Hi, I am not able to reproduce the output in the OP (in my case no frontdoor estimand is found). However, I similarly believe there is an incorrect behavior in the following graph:

In this case {M} should not satisfy the frontdoor criterion, although {M, R} would. However dowhy identifies {M} as an adjustment set and is impervious even to whether {E, R} are unobserved.

The desired behavior, if I understand it correctly, is that it should return {M, R} or {M, E} as frontdoor adjustment sets if either of E and R are observable, and should return no frontdoor variables found if both are unobservable.
I have been looking at the source code but I haven't found where it might be going wrong. What I did learn is that only 1-variable frontdoor adjustment sets are supported for the moment. I think it would be important that this would be specified in the documentation. But in any case, I would consider the situation above to be a bug (the call should return that no 1-variable frontdoor adjustment sets are found).
As @gabrielgorenroig remarked, this issue has been fixed in recent releases. I tested with v0.10.
Following up on @gabrielgorenroig issue in #971.