I have made the following model in DAGitty:

enter image description here

Where $X_2$ is controlled for.

DAGitty says:

The total effect cannot be estimated due to adjustment for an intermediate or a descendant of an intermediate.

I asked here whether it would be possible to obtain the treatment effect after controlling for $x_2$.

But I guess my fundamental question is: if I control for both $x_2$ and $x_1$, why, from the theory of DAGs, that doesn't identify the treatment effect?

I mean, controlling for $x_2$, which is a collider, open a backdoor path $x_1 \leftrightarrow y$. But controlling for $x_1$ should close this backdoor path again.

Why, from a theoretical perspective, that doesn't happen?

I will reinforce my understanding of how that should work with another example.

Consider the following DAG:

enter image description here

where $x$ is the treatment, and $y$ is the outcome.

In this DAG I can control for nothing.

Or I can control for $\{m,a\}$, or for $\{m,b\}$, or for $\{m,a,b\}$.

In fact, $m$ is a collider, and controlling for it induces a backdoor path $x \leftrightarrow a \leftrightarrow b \leftrightarrow y$.

But I can close the backdoor path so opened by controlling for also $a$, or for also $b$, or for also $a$ and $b$ together.

Why that doesn't happen with the first DAG I posted?

If I control for $x_2$ (the collider), and so open the backdoor path $t \leftrightarrow x1 \leftrightarrow y$, why I can't close the backdoor path so opened by controlling for $x_1$?

I would like an answer from a theoretical point of view.

  • $\begingroup$ In your first example, you say "where $X_2$ is controlled for". Are you controlling for {$X_1$, $X_2$}, or just $X_2$ in the daggity example? $\endgroup$
    – Scriddie
    Commented May 31, 2023 at 10:05
  • $\begingroup$ Just $X_2$ ....... $\endgroup$ Commented May 31, 2023 at 10:48
  • $\begingroup$ You state correctly that controlling for {$X_1$, $X_2$} should work, but controlling for {$X_2$} alone should not. From your reply it seems that result obtained from DAGitty matches your theoretical statements when controlling for {$X_2$}. What do you get when controlling for both? $\endgroup$
    – Scriddie
    Commented May 31, 2023 at 11:50
  • 1
    $\begingroup$ See the linked question for a simulation of what we get when controlling for both $\endgroup$ Commented May 31, 2023 at 12:00

2 Answers 2


The difference is in the fact that $X_2$ is an effect of the target

This is a really cool question that I hadn't thought enough about!

A linear regression of the sort of $Y\sim T+X_1+X_2$ will aim to find the coefficients that explain the most variation an the target. In your first example, controlling for $X_2$ not only opens an otherwise closed path, but it also includes an effect of the target variable $Y$. In an additive noise model (as is often assumed for theoretical proofs and in simulations), $Y$ would be given as $ Y := \beta T + N_Y$ where $N_Y$ is an independent noise component. Once you include an effect of $Y$, in this case $X_2$, the $N_Y$ component can be partially explained. For this reason, $X_2$ is given a non-zero weight. Since $X_2$ is also an indirect effect of $T$, the weight given to $T$ in the regression becomes a biased estimator for $\beta$. Graphically speaking, you can draw an additional arrow for $N_Y$ pointing into $Y$ (you can do the same for all additive noise components). Conditioning on $X_2$ creates a dependency between $T$ and $N_Y$ (because $X_2$ is a descendant of the collider $Y$ between them) which biases the estimate of $\beta$ (See also Figure 11.5 in Pearl 2009). In your second example, none of the control variables contain any information about $Y$ other than that already contained in your treatment, so all of the adjustment sets work.

Controlling for $X_2$ therefore introduces two separate problems: It opens a confounding path between $T$ and $Y$, and it opens another path between $T$ and $N_Y$. Controlling for $X_1$ solves the first problem, but not the second, which is why the estimation is still biased.

  • $\begingroup$ If I write another variable $N_Y$ pointing into $Y$ that represents the error, I don't understand why controlling for $X_2$ creates a dependency between $T$ and $N_Y$, and how this dependency should be represented graphically (an arrow from $T$ to $N_Y$? Or viceversa?) $\endgroup$ Commented Jun 14, 2023 at 7:01
  • $\begingroup$ Once you add $N_Y \to Y$, the target $Y$ becomes a collider between $T$ and $N_Y$, and $X_2$ is a descendant of the collider. Controlling for $X_2$ opens a path between the otherwise independent $T$ and $N_Y$, like you said. The path doesn't have a direction (because it doesn't really exist) but will act like a confounder. But regardless of the reason, the take-away is simple: You should never control for anything that is an effect of the target variable (you would basically be controlling for your target), and this is what's causing the problems in your example. $\endgroup$
    – Scriddie
    Commented Jun 14, 2023 at 9:49

Our target estimand is the effect of $T$ on $Y$ in the population. Let me give you two examples to show what is happening:

Consider the DAG: $T \rightarrow Y \rightarrow X_2$ where I've removed $X_1$. If you put this into DAGitty and condition on $X_2$, you get the same message as your first DAG, i.e., "The total effect cannot be estimated due to adjustment for an intermediate or a descendant of an intermediate". The reason for this is that if you condition on $X_2$, a descendant of $Y$, you cannot estimate the total effect of $T \rightarrow Y$ in the population. This is simply because conditioning on $X_2$ means that you are estimating $T \rightarrow Y$ (unbiasedly) in a subset of the population where $X_2 = x_2'$, which is not necessarily the causal effect in the population. I.e., this is a potentially biased estimate of your target estimand. Blocking the non-causal path through $X_1$ by adjusting for $X_1$ in your actual DAG does serve to mitigate bias however, but not all potential bias.

Now consider the DAG: $T \rightarrow X_1 \rightarrow X_2 \rightarrow Y$. This is the same as your first DAG except that I've removed the arrow from $T$ to $Y$ implying that the causal effect of $T$ on $Y$ is zero for every individual in the population (i.e., sharp causal null). Here, if you condition on $X_2$, it clearly opens the non-causal path $T \rightarrow X_1 \rightarrow X_2 \rightarrow Y$ and you create a non-causal association between $T$ and $Y$. This is classic selection bias. BUT if you then also condition on $X_1$, you can block this non-causal path AND recover the unbiased causal effect which is zero because in the subset of individuals with $X_2 = x_2'$, as for every individual in the population, the causal effect is zero. This is an unbiased estimate of your target estimand.

You can check that this works in DAGitty.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.