Program theory is for the DAGs! (Part 2)

In Part 1 we introduced directed acyclic graphs (DAGs) [1] as a better way to represent program theory [2]. A DAG is a Bayesian network where each directed arrow represents a causal link, not merely a probabilistic dependency [3].

Program theory has three components:

  1. Theory of causation (causal model)
  2. Theory of change (selected strategy)
  3. Theory of action (selected intervention that activates change)

Program theory is often called “theory of change.” We prefer “program theory,” but never forget its three components. Now we review the material with another example.

In public health we have two common DAG archetypes [4]: a risk (adverse) event and a benefit (opportunity) event (Figure 1). For both, a trigger is an exposure, condition, activity, or incident that increases the probability of a risk or benefit event. A trigger can be a cumulative process. Before an intervention, these DAGs represent the theory of causation component of program theory.

Figure 1: Causal taxonomy for risk event (left) vs. benefit event (right)

Figure 2 depicts the program theory for a public health intervention to reduce automobile crash injuries (a risk event). The theory of change has three strategies (prevention, control, and mitigation), and the theory of action has three interventions (speed bumps, automatic breaking, and seat belts).

Figure 2: Risk-reduction program theory: theory of causation, theory of change (strategy), and theory of action (intervention)

In a risk-event outcome (consequence), the 5 whys of root-cause analysis move backwards: Why was there an injury? Because of a crash. Why was there a crash? Because of fast driving? Why was there fast driving? We cannot answer this question (yet).

The program theory is not complete. We must also understand why people drive fast. We have not included the theory of causation from drivers’ perspectives. Suppose, for instructional purposes, Figure 3 represents the most common DAG that explains why drivers speed. Therefore, why was he or she driving fast? To make a meeting. Why was this meeting important? To win a contract? Why was this contract important? (unemployment?)

Figure 3: Benefit-event model from the driver’s perspective

We can now really appreciate the importance of evaluating multiple perspectives (other causal drivers—not to be confused with vehicle driver in the example). For example, the motivation to drive fast might cancel out the effect of any traditional public health intervention (Figure 2). We must be able to integrate multiple causal pathways reflecting multiple perspectives.

Figure 4 depicts the unified DAG that integrates driver motivation into a holistic, improved public health program theory. We cannot emphasize enough the importance of building causal graphs from multiple perspectives that include risks and benefits, and different strategy levels. This DAG is a big improvement.

Figure 4: Unified causal model that includes driver’s perspective (benefit-seeking) and program theory (risk-reduction)

However, when you review it with subject matter experts they suggest adding “gender” and “age” nodes because both are causally associated with driving fast and wearing seat belts (Figure 5). This will enable you to evaluate the effectiveness of the public health intervention while controlling for the confounding effects of gender and age. For example, if drivers are predominately young males (who drive fast and do not wear seat belts) then the seat belt intervention may appear falsely ineffective. These DAGs encode expert and community knowledge and wisdom, and are used for causal, evidential, and decision reasoning.

Figure 5: Expanded unified causal model with age and gender

Summary of ideas

  1. Every intervention has a program theory (whether expressed or not)
  2. Program theory includes theories of causation, change, and action
  3. DAGs have archetypes; here are two: risk (adverse) event and benefit (opportunity) event
  4. Always include multiple causal perspectives (other causal drivers)
  5. Don’t forget to consider confounders, etc.
  6. Use DAGs for root cause analyses and program theory design
  7. Remember to embody intellectual humility and to have fun!

Appendix: R code

Here is the R markdown for producing the DAGs above. You must install the DiagrammeR package in R/Rstudio.

Here is the R markdown for producing Figure 1:

```{r archetype, echo=FALSE, fig.cap = "Causal taxonomy for risk event (left) vs. benefit event (right)", fig.height=2.5}
library(DiagrammeR)
grViz("
  digraph ci {
    rankdir=TB;
    node [color=black];
    edge [color=black,arrowhead=vee];
    subgraph risk {
      T [label='Trigger']
      R   [label='Risk event'];
      Con [label='Consequence'];
      T -> R [weight=10]
      R -> Con [weight=10]
    }
    subgraph opp {
      T2   [label='Trigger'];
      R2   [label='Benefit event'];
      Con2 [label='Consequence'];
      T2 -> R2 [weight=10]
      R2 -> Con2 [weight=10]
    }
  }
")
```

Here is the R markdown for producing Figure 2:

```{r phpersp, echo=FALSE, fig.cap = "Risk-reduction program theory: theory of causation, theory of change (strategy), and theory of action (intervention)", fig.height=3.5}
library(DiagrammeR)
grViz("
  digraph ci {
    rankdir=TB;
    node [color=black];
    edge [color=black,arrowhead=vee];
    subgraph tocause {
      T   [label='Drive fast'];
      R   [label='Crash'];
      Con [label='Injury'];
      T -> R [weight=10]
      R -> Con [weight=10]
    }
    subgraph tochange {
      P    [fillcolor=lightgrey,style=filled,label='Speed bumps']
      P2   [shape=plaintext,label='Prevention Strategy'];
      Ctrl [fillcolor=lightgrey,style=filled,label='Automatic breaking']
      Ctrl2 [shape=plaintext,label='Control Strategy'];
      M    [fillcolor=lightgrey,style=filled,label='Seat belt']
      M2 [shape=plaintext,label='Mitigation Strategy'];
      P -> Ctrl -> M [style=invis]
      P -> T
      Ctrl -> R
      M -> Con
      P -> P2       [style=invis]
      Ctrl -> Ctrl2 [style=invis]
      M -> M2       [style=invis]
      {rank=same; P2 P}
      {rank=same; Ctrl2 Ctrl}
      {rank=same; M2 M}
    }
  }
")
```

Here is the R markdown for producing Figure 3:

```{r riskbene3, echo=FALSE, fig.cap = "Benefit-event model from the driver's perspective", fig.height=2.5}
library(DiagrammeR)
grViz("
  digraph ci {
    rankdir=TB;
    node [color=black];
    edge [color=black,arrowhead=vee];
    subgraph tocause {
      T   [label='Drive fast'];
      R   [label='Make meeting'];
      Con [label='Win contract'];
      T -> R [weight=10]
      R -> Con [weight=10]
    }
    subgraph tochange {
      Ctrl [label='Crash']
      Ctrl2 [shape=plaintext,label='Impediment'];
      M    [label='Nerves']
      M2 [shape=plaintext,label='Impediment'];
      Ctrl -> M [style=invis]
      Ctrl -> R
      M -> Con
      Ctrl -> Ctrl2 [style=invis]
      M -> M2       [style=invis]
      {rank=same; Ctrl2 Ctrl}
      {rank=same; M2 M}
    }
  }
")
```

Here is the R markdown for producing Figure 4:

```{r riskbene4, echo=FALSE, fig.cap = "Unified causal model that includes driver's perspective (benefit-seeking) and program theory (risk-reduction)", fig.height=3.5}
library(DiagrammeR)
grViz("
  digraph ci {
    rankdir=TB;
    node [color=black];
    edge [color=black,arrowhead=vee];
    df [label='Drive fast'];
    mm [label='Make meeting'];
    wc [label='Win contract'];
    cr [label='Crash']
    in [label='Injury']
    nn [label='Nerves']
    P    [fillcolor=lightgrey,style=filled,label='Speed bumps']
    Ctrl [fillcolor=lightgrey,style=filled,label='Automatic breaking']
    sb   [fillcolor=lightgrey,style=filled,label='Seat belt']
    df -> mm -> wc
    df -> cr -> in
    cr -> mm
    nn -> wc
    P -> df
    Ctrl -> cr
    sb -> in
    {rank=same; df P}
  }
")
```

Here is the R markdown for producing Figure 5:

```{r riskbene5, echo=FALSE, fig.cap = "Expanded unified causal model with age and gender", fig.height=4}
library(DiagrammeR)
grViz("
  digraph ci {
    rankdir=TB;
    node [color=black];
    edge [color=black,arrowhead=vee];
    df [label='Drive fast'];
    mm [label='Make meeting'];
    wc [label='Win contract'];
    cr [label='Crash']
    in [label='Injury']
    nn [label='Nerves']
    P    [fillcolor=lightgrey,style=filled,label='Speed bumps']
    Ctrl [fillcolor=lightgrey,style=filled,label='Automatic breaking']
    M    [fillcolor=lightgrey,style=filled,label='Seat belt']
    Age  [fillcolor=beige,style=filled,label='Age']
    Sex  [fillcolor=beige,style=filled,label='Gender']
    df -> mm -> wc
    df -> cr -> in
    cr -> mm
    nn -> wc
    P -> df
    Ctrl -> cr
    M -> in
    Age -> df
    Age -> M
    Sex -> df
    Sex -> M
  }
")
```

Option: To display R code change echo = FALSE to echo = TRUE.

References

1. Pearl J, Glymour M, Jewell NP. Causal inference in statistics: A primer. 1st ed. Wiley; 2016.

2. Funnell SC, Rogers PJ. Purposeful program theory: Effective use of theories of change and logic models. San Francisco, CA: Jossey-Bass; 2011.

3. Scutari M. Bayesian networks : With examples in r. Boca Raton London New York: CRC Press Taylor & Francis Group; 2014.

4. Fenton N, Neil M. Risk assessment and decision analysis with bayesian networks. CRC Press; 2012.

Related

Next
Previous
comments powered by Disqus