The approach I typically take is to draw them as a pseudo node that points at the middle of a path between two real nodes (see Figure 7 here https://royalsocietypublishing.org/doi/10.1098/rspb.2020.2815 where Q interacts with/modifies X (and how to draw it with R: https://gist.github.com/andrewheiss/6546a22672a13a4eacd8a9a726eac88a). It’s just like Figure 3A in the Attia et al. article too (https://academic.oup.com/ije/article/51/4/1047/6607680), and Laubach, Murray, et al. have a longer appendix about it all too.
It’s a tricky solution because the regular rules of do-calculus don’t apply, since the Q node isn’t really in the DAG in normal ways.
In practice, what I’ve generally seen is that people generally don’t care about interaction nodes because interactions are a statement of functional form and DAGs are supposed to be function-agnostic.
For instance, if you have a situation like y ~ x + a + a*x
, where a
is binary, and your main treatment is x
, the causal effect of x depends on whether or