dowhy
dowhy copied to clipboard
Implement complete adjustment criterion that generalizes backdoor
Adjustment Criterion by Shpitser (here, Definition 5)
This criterion generalizes the backdoor criterion. @gianlucadetommaso
Leaving this here as a note since I've been reading this paper a lot:
As an option, we can also just implement the following: https://auai.org/uai2015/proceedings/papers/155.pdf and https://www.jmlr.org/papers/volume18/16-319/16-319.pdf, which is a complete adjustment criterion for all common causal graphs: DAG, ADMG, CPDAG, MAG, PAG.
This would need to use functions in upstream pywhy-graphs:
- visibility (not currently implemented): determine in a graph whether or not a given edge is visible. There are existing graphical algorithms for determining this based on discriminating paths. (discriminating paths is also implemented within pywhy-graphs).
- (possible)-descendants of a node
- generator for m-separating sets from Van Zander 2015 (not implemented): given an ancestral graph (CPDAG/MAG/PAG), generate in polynomial-delay time separators and adjustment sets (see adjustmentSets in dagitty R package)
Combining these 3 functionalities, one can then implement the complete generalized adjustment algorithm. Happy to help if anyone becomes interested.
Reference: [1]_ Benito van der Zander, Maciej Liśkiewicz, and Johannes Textor. Constructing separators and adjustment sets in ancestral graphs. In Proceedings of UAI 2014, pages 907–916, 2014.
thanks for sharing @adam2392 This is great since it will work for multiple types of graphs. Clearly an improvement over the current implementation!
If anyone would like to contribute, let us know in the comments below.
@adam2392 @amit-sharma I would love to contribute to this PR. Anything that I can get started on?
Perhaps a good plan of action is:
- Implement a few unit tests that will return adjustable vs not?
- Perhaps then implement the sketch of the algorithm in dowhy
- Patch any necessary graph search algorithms into pywhy-graphs
- Implement a short example in the docs demonstrating usage
- Merge PR and have pywhy-graphs be an optional dependency.
I can of course work with you on various parts @aryan26roy
Wdyt @amit-sharma?
Agree, that sounds like a plan! Thanks Adam.
@aryan26roy you can work with @adam2392 to get started on this
Sounds good to me @adam2392 @amit-sharma.