11  Causation: Backdoor adjustment in causal DAGs

Author

Moses Rivera, Ph.D.

Published

November 2, 2025

11.1 Introduction

This chapter is largely a continuation from the preceding chapter (Chapter 10). This chapter culminates with a description of a technique (known as backdoor adjustment) for measuring a causal effect by using a causal DAG of observational data (i.e., without an experiment).

If you start to feel a little lost, here are two techniques you can try:

  1. Don’t go back, just keep reading forward a little more. Many times, temporary confusion is cleared by a subsequent sentence or paragraph.
  2. If you tried technique #1 and it didn’t help, then you should go back to re-read from a portion that you understand.

11.2 Experiments and causal DAGs

You might remember from Chapter 9 I explained that an experiment can help us explore a causal relationship between a predictor variable (that we manipulate) and an outcome variable we’re interested in. This is because an experiment helps to remove the influence of other variables—called confounders—each of which would otherwise influence both the predictor variable and the outcome variable. For any causal relationship between a predictor variable and an outcome variable, a confounding variable (or confounder) is any third variable that influences both the predictor variable and the outcome variable. When we remove the influence of a confounder, we’re deconfounding a causal relationship. To measure the causal effect of a predictor variable on an outcome variable, we must completely deconfound that causal relationship.

Typically, we say the confounders are confounding the causal relationship between the predictor variable and the outcome variable.

We can use DAGs to help us visualize why an experiment helps us deconfound causal relationships. The next For example… box provides an example.

TipFor example…
G M M T T M->T P P M->P T->P
Figure 11.1: The simplest DAG of a confounded causal relationship. Here, the DAG is saying the intensity of the employee's general motivation to work (M) confounds the causal relationship between the type of optional training the employee completes (T) and the employee's performance one year later (P).

Figure 11.1 is a DAG representing a theory about the causal influences among three variables:

  1. the type of optional training the employee completes (T)
  2. the employee's performance one year later (P)
  3. the intensity of the employee's general motivation to work (M)

According to that DAG, the theory is saying this: the intensity of the employee's general motivation to work (M) confounds the causal relationship between the type of optional training the employee completes (T) and the employee's performance one year later (P). For example, highly motivated employees might sign up for intense training that can boost performance, whereas unmotivated employees might sign up for no trainings, or maybe just easy trainings that don’t really help their performance. If we wanted to calculate the probability that an employee’s performance (P) will be some numeral p, we could use all of the observed data like this: \mathbb{P}\Big(P=p\mid (M=m, \text{ and } T=t)\Big).

In a randomized experiment, the researcher would randomly assign each employee to receive one of the training options (T)—and keep in mind: one of the options could be no training at all. Thus, the researcher removes the employee’s ability to choose an option of T. If we were to do that experiment, the DAG of that process would look like Figure 11.2, such that the influence of M on T is deleted because the employee’s motivation no longer has any influence on T, since the researcher randomly assigns T to each employee. Thus, in that experiment, M no longer confounds the causal relationship between T and P. If we wanted to calculate the probability that an employee’s performance (P) will be some numeral p, we could use all of the data from the observed P and M, and the manipulated T, like this: \mathbb{P}\Big(P=p\mid (M=m, \text{ and } \operatorname{do}(T=t))\Big). Notice the presence of \boxed{\operatorname{do}(T=t)}, which says we aren’t merely observing T, but rather we are doing an intervention to manipulate the predictor variable T to make it output t.

That is why experiments are helpful: because they help deconfound a causal relationship we’re interested in.

G M M T T M->T P P M->P T->P
Figure 11.2: A DAG of a randomized experiment in which each employee is randomly assigned to a T.

You may recognize the path T\leftarrow M \rightarrow P is a fork, with M being the forking variable.

When we have observational data (i.e., not experimental data), we are merely measuring the variables according to what we observe is occurring without us manipulating anything. In contrast, when we have experimental data, we are doing an intervention to manipulate one (or possibly multiple) predictor variables. There is a big difference between merely observing a relationship between two variables without our intervention, versus actively doing an intervention to manipulate one of the variables to see how it relates to the outcome variable. Thus, to write about the probability that an outcome variable (e.g., Y) will output some numeral (e.g., y) after we manipulate a predictor variable (e.g., X) into outputting a specified numeral (e.g., x), researchers often write it like this: \mathbb{P}\Big(Y=y\mid \operatorname{do}(X=x)\Big)

Thus, there is a big conceptual difference between \boxed{\mathbb{P}(Y=y\mid X=x)} versus \boxed{\mathbb{P}\Big(Y=y\mid \operatorname{do}(X=x)\Big)}:

  • \mathbb{P}(Y=y\mid X=x) is the probability that the random variable Y will output y, conditional on us observing that the random variable X outputs x. Thus, we’re not intervening on X.
  • \mathbb{P}\Big(Y=y\mid \operatorname{do}(X=x)\Big) is the probability that the random variable Y will output y, conditional on us causing the random variable X to output x. Thus, we are intervening on X.

Remember: experiments are helpful for measuring a causal effect, because experiments help us deconfound the causal relationship we’re interested in. We achieve that via the act of doing an intervention with random assignment, which deletes the effect that the confounder would’ve had on our predictor (as seen in Figure 11.2).

However, if we only have observational data (e.g., we didn’t do an experiment), we can use causal DAGs to help us identify patterns that will allow us to deconfound a causal relationship. This involves using conditional (and/or marginal) independencies among the variables in the DAG, to block the effects of the confounders. Next, I describe one popular method for that.

11.3 Using conditional (and/or marginal) independencies to block a backdoor path in a DAG

11.3.1 Backdoor paths vs. Frontdoor paths

You may remember from Section 10.3 I said a path in a DAG is an alternating sequence of non-repeating nodes and arrows (i.e., node 1, arrow 1, node 2, arrow 2, node 3, …) such that they collectively form a “connected string”, like a beaded necklace. A path can be short or long, and it can contain several chains, forks, and colliders—all at the same time.

Anytime you’re talking about a path, you must specify the starting node and ending node of that path. In Figure 11.1, if we use our finger to trace a path starting at T and ending at P, there are only two possible paths our finger could trace in that DAG:

  1. T\rightarrow P is a frontdoor path from T to P.
  2. T \leftarrow M \rightarrow P is a backdoor path from T to P.

The T \leftarrow M \rightarrow P path is a special type of path known as a backdoor path. Between any two nodes—let’s say, A and B—a backdoor path from A to B is any path that contains an arrow with A at its arrowhead. In other words, the first arrow in a backdoor path from A to B points into A. It’s called a backdoor path because, as we trace our finger along that path from A to B, our finger moves in the opposite direction of how the first arrow is pointing. In Figure 11.1, if we trace our finger from T to P via the T \leftarrow M \rightarrow P path, our finger would be traveling via a backdoor path because we’d be moving our finger from T to M, which is in the opposite direction of the arrow that points from M to T (i.e., the arrow is: T\leftarrow M), which is the first arrow on that path. Even though the T \leftarrow M \rightarrow P path also involves us tracing our finger from M to P in the correct direction of M \rightarrow P, we still call the entire path a backdoor path because we moved our finger in the opposite direction of the first arrow on that path (i.e., T \leftarrow M).

In contrast to a backdoor path, a frontdoor path is any path from A to B such that all of the path’s arrows are pointed away from A and toward B. It’s called frontdoor because, as you trace your finger along the path from A to B, your finger always travels in the direction that the arrows are pointing in. For example, this could be another frontdoor path from A to B: A\rightarrow Z\rightarrow Y \rightarrow X \rightarrow B.

In DAGs, a variable that confounds the causal effect of A on B always involves a backdoor path from A to B. In Figure 11.1, the DAG is saying M confounds the causal effect of T on P, because there is a backdoor path from T to P.

If we want to measure the causal effect of any predictor variable A on outcome variable B, but our theoretical DAG says there are one or multiple variables that confound that causal relationship, then we must completely deconfound that causal relationship. To completely deconfound that causal relationship, one popular method is to block all the backdoor paths from A to B (without blocking any frontdoor paths from A to B). Next, I describe how to block those backdoor paths.

11.3.2 Blocked paths, and d-separation vs. d-connectedness

You may remember from Section 10.4.2 I said the following:

  1. In the chain \boxed{X\rightarrow Y\rightarrow Z}, if there are no other relationships between those three variables, then X and Z are independent if we condition on Y. In other words: (X\perp\!\!\!\perp Z)\mid Y.
  2. In the fork \boxed{X\leftarrow F\rightarrow Y}, if there are no other relationships between those three variables, then X and Y are independent if we condition on F. In other words: (X\perp\!\!\!\perp Y)\mid F.
  3. In the collider \boxed{X\rightarrow C\leftarrow Y}, if there are no other relationships between those three variables, then X and Y are marginally independent. In other words: X\perp\!\!\!\perp Y.

Remember from Section 10.4.1.3: marginal independence occurs when two variables are independent of each other without conditioning on anything.

Notice a chain is a path, a fork is a path, and a collider is a path. And remember, a path can contain several chains, forks, and colliders—all at the same time.

In the vocabulary of causal DAGs, we say a path is blocked if the path’s starting variable (e.g., A) and ending variable (e.g., B) would be independent of each other (either conditionally independent or marginally independent) if we ignore any other variables and arrows outside of that path. For example, given a path starting from A and ending at B, we say that path is blocked if either \boxed{A\perp\!\!\!\perp B} or \boxed{(A\perp\!\!\!\perp B)\mid Z} (Z is a collection of one or multiple variables) would be true while we ignore all other variables and arrows outside of that path.

Based on the above properties, you may see how they map onto the following properties about marginal versus conditional (un)blocking in paths (which you can read more about in (Pearl et al., 2016)):

  1. The chain A\rightarrow B\rightarrow C is marginally open (i.e., not blocked), but it is conditionally blocked if we condition on B.
  2. The fork X\leftarrow F\rightarrow Y is marginally open (i.e., not blocked), but it is conditionally blocked if we condition on F.
  3. The collider X\rightarrow C\leftarrow Y is marginally blocked, but it is conditionally unblocked (i.e., opened) if we condition on C and/or if we condition on any descendant of C.
NotePath-blocking works like a water hose…

To help you remember how path-blocking works: imagine each path is a water hose, and the flow of water can be blocked if there is a kink in the hose, or if you pinch the hose.

If you pinch any spot on the water hose, you block the flow of water. You are pinching the water hose if you condition on any connector-node in a chain on the path or if you condition on any forking node in a fork on the path (i.e., you are conditionally blocking the path at that spot).

A collider on the path is a kink in the hose, which blocks the flow of water without you doing anything (i.e., it marginally blocks the path). If you condition on the collision node in a collider, or if you condition on any descendant of the collision node, you are fixing the kink in the hose, thereby conditionally unblocking that spot of the path.

If a hose has multiple kinks and/or multiple pinched spots, but you only fix some of the kinks or pinches, the hose will still be blocked. Likewise, if a path contains multiple colliders but you don’t condition on all of those collision nodes (or the descendants of those collision nodes), the path will remain blocked. If you condition on all of those collision nodes and/or all of the descendants of those collision nodes (thereby fixing all of those kinks), but you are still conditioning on one or multiple connector nodes in chains and/or forks on the path, the path will remain blocked (because you are still pinching the hose at those spots).

If all we have is observational data (i.e., not experimental data) and we want to completely deconfound the causal effect of A on B, one way to achieve that is by blocking all backdoor paths from A to B by using a combination of the above three properties to marginally and/or conditionally block those backdoor paths. In a nutshell, all we’re doing is writing a list of variables we will and won’t condition on for the analysis of our observational data to calculate the causal effect of A on B (typically via calculating a partial regression coefficient, which you will learn about in the Statistics course).

Although this chapter and the preceding chapter focus on probabilities, we can use the same ideas when we’re calculating correlations and partial regression coefficients, because they’re all built from probabilities.

Keep in mind: We don’t want to block any frontdoor path(s) that transmit the causal effect from A to B, because that would be blocking the very thing we want to measure in the first place. If we block every path from A to B (including frontdoor paths), then we would say we’ve made A and B directionally-separated from each other (also called d-separated). If there is at least one unblocked path from A to B, then we say A and B are directionally-connected to each other (also called d-connected). Thus, to measure the causal effect of A on B, our goal is to block all backdoor paths from A to B while still keeping A and B d-connected to each other via their frontdoor path(s).

This next For example… box provides an example.

TipFor example…
G F F X X F->X M M F->M Y Y X->Y M->Y
Figure 11.3: A causal DAG. If we’re interested in the effect of X on Y, we can notice there are two paths from X to Y: (1) X \rightarrow Y, and (2) X\leftarrow F \rightarrow M \rightarrow Y.

Let’s imagine we’re interested in the causal effect of X on Y, and that our theory tells us there are two other variables (i.e., F and M) that influence X and/or Y as depicted in Figure 11.3.

We can test how well our theoretical DAG matches real-world data we collected, by making a list of all of the marginal and/or conditional d-separations that are implied by our DAG and seeing whether our real-world data matches those marginal and/or conditional d-separations. Remember: two variables are (marginally or conditionally) d-separated in our DAG if all of the paths between those two variables are blocked. For example, the DAG in Figure 11.3 implies only these two d-separations:

  • X and M are conditionally d-separated if we condition on F, because conditioning on F will block the X\leftarrow F\rightarrow M path. We don’t need to condition on Y, because Y is a collision node on the X\rightarrow Y \leftarrow M path, thus Y marginally blocks that path.
  • F and Y are conditionally d-separated if we condition on both X and M simultaneously. Conditioning on X will block the F\rightarrow X \rightarrow Y path, and conditioning on M will block the F\rightarrow M \rightarrow Y path.

Since d-separation implies the two variables will be independent, we can inspect the marginal and/or conditional probabilities of our real-world dataset to see whether they match the independencies that are implied by the d-separations from our DAG. In this example, if our real-world dataset shows \boxed{X \perp\!\!\!\perp M \mid F} and \boxed{F\perp\!\!\!\perp Y\mid (X \text{ and } M)}, then that is evidence supporting that our DAG matches reality (i.e., that our DAG might be a good theory).

If we believe our DAG is a pretty good model of reality, we can try to use it to estimate the causal effect of X on Y. To do that, we can make a list of variables we will condition on and variables we won’t condition on, so that we can block all backdoor paths from X to Y without blocking any frontdoor path(s) from X to Y. From our DAG in Figure 11.3, here are all of the paths from X to Y:

  1. X \rightarrow Y is a frontdoor path from X to Y.
  2. X\leftarrow F \rightarrow M \rightarrow Y is a backdoor path from X to Y.

The frontdoor path X \rightarrow Y is marginally unblocked (i.e., if we don’t condition on anything, that path is already unblocked).

The backdoor path X\leftarrow F \rightarrow M \rightarrow Y is also marginally unblocked, but we want to block it. To block it, all we have to do is condition on F or M or both, because F is a forking-node along that path and M is a connector-node in a chain along that path.

Thus, assuming our DAG is an accurate representation of reality, we can estimate the causal effect of X on Y by calculating a partial regression coefficient (which you will learn about in the Statistics course) while conditioning on F (also known as “controlling for F or “adjusting for F), or while conditioning on M (also known as “controlling for M or “adjusting for M), or while conditioning on F and M (also known as “controlling for F and M or “adjusting for F and M).

Again, the validity of using this method depends on the validity of our assumption that our DAG is a valid representation of reality. If our DAG is very wrong (for example: if our DAG is missing another powerful confounder of the effect of X on Y), then the resultant inferences we make from the “backdoor path blocking” procedure will likely be very incorrect. However, if our DAG is only a little wrong, then the resultant inferences might only be a little incorrect (if we’re lucky). Validity is a spectrum.

This next For example… box provides another example in which we don’t have to condition on any variables.

TipFor example…
G A A B B A->B C C A->C B->C
Figure 11.4: A causal DAG. If we’re interested in the effect of A on B, we can notice there are two paths from A to B: (1) A \rightarrow B, and (2) A\rightarrow C \leftarrow B.

Let’s imagine we’re interested in the causal effect of A on B, and that our theory tells us that A likely causes both B and C, and B likely causes C—as depicted in Figure 11.4.

Since we’re interested in the causal effect of A on B, we want to make a list of variables we will condition on and variables we won’t condition on, so that we can block all backdoor paths from A to B without blocking any frontdoor path(s) from A to B. From our DAG in Figure 11.4, here are all of the paths from A to B:

  1. A \rightarrow B is a frontdoor path from A to B.
  2. A\rightarrow C \leftarrow B is a path from A to B, but it is neither a frontdoor path nor a backdoor path. Notice that path is a collider because C is a collision node.

The path A\rightarrow C \leftarrow B is marginally blocked by the collision node C. However, the frontdoor path A \rightarrow B is not blocked by anything.

Thus, assuming our DAG is an accurate representation of reality, we could measure the causal effect of A on B without requiring an experiment, because nothing is confounding the causal effect of A on B. In other words, our DAG says there are no unblocked backdoor paths from A to B—because there are no backdoor paths at all from A to B.

Again, the validity of using this method depends on the validity of our assumption that our DAG is a valid representation of reality. If our DAG is very wrong (for example: if our DAG is missing a powerful confounder of the effect of A on B), then the resultant inferences we make from the “backdoor path blocking” procedure will likely be very incorrect. However, if our DAG is only a little wrong, then the resultant inferences might only be a little incorrect (if we’re lucky).

For longer or more complicated paths and DAGs, we can continue using the same rules I’ve listed above for marginally or conditionally (un)blocking any path. Eventually, it may start to feel like a fun puzzle game. For example:

  • The path A\rightarrow B\rightarrow C \rightarrow D \rightarrow E is marginally unblocked, but it is conditionally blocked if we condition on any one or multiple (or all) of these: B, C, D.
  • The path A\leftarrow X \leftarrow F \rightarrow Y \rightarrow B is marginally unblocked by the forking-node F, but the path is conditionally blocked if we condition on F. If we condition on X or Y (or both), we would (re)block the path because X and Y are connector nodes of chains within the path (i.e., X is a connector node of the chain A\leftarrow X \leftarrow F, and Y is a connector node of the chain F \rightarrow Y \rightarrow B).
  • The path A\rightarrow X \leftarrow F \rightarrow Y \leftarrow B is marginally blocked by the collision node X, and the path is also marginally blocked by the collision node Y. The path would be conditionally unblocked if we condition on both X and Y simultaneously. If we only condition on X, we would only unblock a portion of the path (i.e., this portion: A\rightarrow X \leftarrow F \rightarrow Y). If we only condition on Y, we’d only be unblocking this portion: X \leftarrow F \rightarrow Y \leftarrow B. If we condition on F, we’d be blocking the path because F is a forking node on the path.

Now that we understand the basic idea of a popular method to completely deconfound the causal effect of X on Y (by blocking all of the backdoor paths from X to Y), we can now turn our attention to a useful tool that will make that task easier. It is known as the backdoor criterion, which I explain next.

11.3.3 The backdoor criterion

When we want to measure the causal effect of a predictor variable (X) on an outcome variable (Y), and there are many other variables in the DAG, it can feel a bit tricky to figure out which variables we must or mustn’t condition on. If we’re not careful, we may accidentally condition on a variable that will block one or multiple frontdoor paths from X to Y. To help us figure out which variables we must condition on, there are several techniques we can use. One of those is called the backdoor criterion.

In DAGs about causation, the backdoor criterion is a relation between two things: (1) an ordered pair of variables (X,Y); and (2) a collection (e.g., Z) of one or multiple variables. The relation is such that:

  1. no variable in Z is a descendant of X;
  2. every backdoor path from X to Y is blocked if we condition on all of the variables in Z.

If Z meets the above requirements, then we say Z satisfies the backdoor criterion in relation to (X,Y). In other words, we say the collection of variables in Z collectively satisfy the backdoor criterion with regard to the causal effect of X on Y. When we look at all of the backdoor paths from X to Y, some of those paths might already be marginally blocked by variables that aren’t included in Z. As long as conditioning on Z will block all of the remaining backdoor paths that aren’t already marginally blocked, then we will reach our goal of blocking all backdoor paths from X to Y. Thus, we will completely deconfound the causal effect of X on Y.

When we calculate the causal effect of X on Y by conditioning on all of the variables in Z, we say we are using the backdoor adjustment method (also known as “adjusting for Z or “controlling for Z).

11.4 Conclusion

In the first chapter of this book, you might remember I said: “The latter part of this course includes methods about causal inference … particularly some methods that haven’t yet permeated across the landscape of IWO psychology… When you ask your colleagues about such methods, don’t be surprised if they have no clue what you’re talking about.”

Although these methods are powerful, I’ve only introduced you to the basics to get you interested and inspired. You can dive deeper via the suggested readings listed in Section 11.5.

11.5 Suggested Readings

Since the mid-1900s and especially after the 1990s, there’ve been dozens of researchers who’ve contributed to the relatively new science of causal inference from observational data. One of the biggest contributors to that area of research is Judea Pearl. He has authored or co-authored three recent books on the topic, and in a podcast episode in 2023 he recommended that readers consume those books in the following sequence (because it starts with the most reader-friendly book and ends with the most technical book):

  1. The Book of Why: The New Science of Cause and Effect (2018);
  2. Causal Inference in Statistics: A Primer (2016);
  3. Causality: Models, Reasoning and Inference (2009).

In those books, you can learn about many other useful tools and techniques for measuring a causal effect from observational data, including:

  • the backdoor adjustment formula
  • the frontdoor criterion
  • the frontdoor adjustment formula
  • the mediation formula

Another useful resource for causal DAGs is the chapter on Nonparametric Causal Models in Rex Kline’s (2023) book: Principles and Practice of Structural Equation Modeling. In fact, Kline’s book is also an excellent introduction to structural equation modeling, which is a popular statistical technique used by scientists—including IWO Psychologists.

References

Kline, R. B. (2023). Principles and Practice of Structural Equation Modeling (Fifth edition). The Guilford Press.
Pearl, J. (2009). Causality: Models, Reasoning and Inference (2nd edition). Cambridge University Press. https://bayes.cs.ucla.edu/BOOK-2K/
Pearl, J., Glymour, M., & Jewell, N. P. (2016). Causal Inference in Statistics: A Primer. Wiley. https://bayes.cs.ucla.edu/PRIMER/
Pearl, J., & Mackenzie, D. (2018). The Book of Why: The New Science of Cause and Effect. Basic Books. https://bayes.cs.ucla.edu/WHY/