dowhy icon indicating copy to clipboard operation
dowhy copied to clipboard

Implement complete adjustment criterion that generalizes backdoor

Open amit-sharma opened this issue 3 years ago • 9 comments

Adjustment Criterion by Shpitser (here, Definition 5)

This criterion generalizes the backdoor criterion. @gianlucadetommaso

amit-sharma avatar Apr 04 '22 05:04 amit-sharma

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:

  1. 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).
  2. (possible)-descendants of a node
  3. 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.

adam2392 avatar Jan 26 '23 01:01 adam2392

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.

amit-sharma avatar Jan 27 '23 09:01 amit-sharma

@adam2392 @amit-sharma I would love to contribute to this PR. Anything that I can get started on?

aryan26roy avatar Feb 18 '24 04:02 aryan26roy

Perhaps a good plan of action is:

  1. Implement a few unit tests that will return adjustable vs not?
  2. Perhaps then implement the sketch of the algorithm in dowhy
  3. Patch any necessary graph search algorithms into pywhy-graphs
  4. Implement a short example in the docs demonstrating usage
  5. Merge PR and have pywhy-graphs be an optional dependency.

I can of course work with you on various parts @aryan26roy

Wdyt @amit-sharma?

adam2392 avatar Feb 18 '24 14:02 adam2392

Agree, that sounds like a plan! Thanks Adam.

@aryan26roy you can work with @adam2392 to get started on this

amit-sharma avatar Feb 19 '24 04:02 amit-sharma

Sounds good to me @adam2392 @amit-sharma.

aryan26roy avatar Feb 19 '24 05:02 aryan26roy