In dieser Übung geht es um den unten abgebildeten DAG und die
dazugehörigen Daten, welche Sie im File sim-dag.csv
auf
Moodle finden. Für diese Übung sind wir am totalen kausalen Effekt von
\(X1\) auf \(Y\) interessiert.
Diese Übung basiert auf der Arbeit Prof. Dr. Beate Sick, ETH Zürich.
Betrachten Sie den DAG.
Gibt es einen kausalen Effekt von \(X1\) auf \(Y\)? Ja, es gibt einen direkten Pfad von \(X1\) nach \(Y\).
Gibt es einen kausalen Effekt von \(X1\) auf \(X2\)? Nein, es gibt keinen direkten Pfad von \(X1\) nach \(Y\)
Gibt es Confounder, Mediatoren und/oder Collider? Ordnen Sie die Variablennamen entsprechend zu. Beachte: Wir sind am totalen kausalen Effekt von \(X1\) auf \(Y\) interessiert.
Welche der folgenden linearen Regressionsmodelle geben eine unverzerrte Schätzung des totalen Effekts von \(X1\) auf \(Y\)?
Y ~ X1
Y ~ X1 + X2
Y ~ X1 + X3
Y ~ X1 + X2 + X4
Y ~ X1 + X2 + X3
Y ~ X1
: Die Schätzung des Effekts ist verzerrt wegen
des offenen Pfades \(X1\) ← \(X3\) → \(Y\).Y ~ X1 + X2
: Die Schätzung des Effekts ist verzerrt
wegen des offenen Pfades \(X1\) ← \(X3\) → \(Y\). Die Berücksichtigung von \(X2\) im Modell ändert daran nichts.Y ~ X1 + X3
: Unverzerrte Schätzung, weil für den
Confounder \(X3\) korrigiert wird.Y ~ X1 + X2 + X4
: Die Schätzung des Effekts ist
verzerrt wegen des offenen Pfades \(X1\) ← \(X3\) → \(Y\). Zudem sollte für den Mediator \(X4\) nicht korrigiert werden, wenn der
totale Effekt von Interesse ist.Y ~ X1 + X2 + X3
: Unverzerrte Schätzung.Das Modell Y ~ X1 + X3
ist vorzuziehen, da weniger
komplex als Modell Y ~ X1 + X2 + X3
.
Erstellen Sie den DAG von oben selber in R
(siehe Slides
für R
-Code) und verifizieren Sie die Antworten aus Übung 2
mit Hilfe von adjustmentSets()
. Vergessen Sie nicht, das
Paket dagitty
zu laden.
library(dagitty)
# Die Positionen der Variablen können beliebig definiert werden
dag <- dagitty('dag {
X3 [pos="-1, 0.5"]
X1 [pos="-0.75, 0.25"]
X4 [pos="-0.25, 0"]
Y [pos="0.25, 0.25"]
X2 [pos="-0.25, 0.75"]
X3 -> X1
X1 -> X4
X4 -> Y
X3 -> Y
X3 -> X2
X2 -> Y
}')
plot(dag)
## { X3 }
Für den totalen Effekt reicht es, für \(X3\) zu adjustieren. Falls nur der direkte Effekt von Interesse wäre, müsste man für den Mediator adjustieren:
## { X3, X4 }
Importieren Sie den Datensatz sim-dag.csv
und passen Sie
die 5 linearen Modelle aus Übung 2 an. Betrachten Sie jeweils den Effekt
der Variable \(X1\) auf \(Y\) und ignorieren Sie die Steigungen für
die anderen Variablen.
R
-Tipp:
lm.x.y <- lm(Y ~ X1 + X2 + ..., data = ...)
,
summary(lm.x.y)
.
library(rio)
df.sim.dag <- import("sim-dag.csv")
lm.1 <- lm(Y ~ X1, data = df.sim.dag)
summary(lm.1)
##
## Call:
## lm(formula = Y ~ X1, data = df.sim.dag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -43.103 -9.624 0.003 9.579 44.861
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.24247 0.32222 0.753 0.452
## X1 -52.74941 0.06535 -807.132 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 14.41 on 1998 degrees of freedom
## Multiple R-squared: 0.9969, Adjusted R-squared: 0.9969
## F-statistic: 6.515e+05 on 1 and 1998 DF, p-value: < 2.2e-16
Der geschätzte Effekt im Modell Y ~ X1
beträgt
-52.75
##
## Call:
## lm(formula = Y ~ X1 + X2, data = df.sim.dag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -26.4169 -6.0400 -0.1452 6.3100 27.2266
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.20335 0.20118 1.011 0.312
## X1 -62.41585 0.17758 -351.475 <2e-16 ***
## X2 5.58833 0.09992 55.930 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.997 on 1997 degrees of freedom
## Multiple R-squared: 0.9988, Adjusted R-squared: 0.9988
## F-statistic: 8.371e+05 on 2 and 1997 DF, p-value: < 2.2e-16
Der geschätzte Effekt im Modell Y ~ X1 + X2
beträgt
-62.42
##
## Call:
## lm(formula = Y ~ X1 + X3, data = df.sim.dag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -33.070 -7.060 0.022 6.777 38.338
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.2634 0.2319 1.136 0.256
## X1 -62.6999 0.2355 -266.193 <2e-16 ***
## X3 51.8154 1.2018 43.114 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.37 on 1997 degrees of freedom
## Multiple R-squared: 0.9984, Adjusted R-squared: 0.9984
## F-statistic: 6.295e+05 on 2 and 1997 DF, p-value: < 2.2e-16
Der geschätzte Effekt im Modell Y ~ X1 + X3
beträgt
-62.7
##
## Call:
## lm(formula = Y ~ X1 + X2 + X4, data = df.sim.dag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.4216 -0.8459 -0.0106 0.8545 5.0002
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.01443 0.02839 -0.508 0.611
## X1 0.16605 0.20111 0.826 0.409
## X2 5.65980 0.01410 401.502 <2e-16 ***
## X4 -8.96753 0.02859 -313.622 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.269 on 1996 degrees of freedom
## Multiple R-squared: 1, Adjusted R-squared: 1
## F-statistic: 2.808e+07 on 3 and 1996 DF, p-value: < 2.2e-16
Der geschätzte Effekt im Modell Y ~ X1 + X2 + X4
beträgt
0.17
##
## Call:
## lm(formula = Y ~ X1 + X2 + X3, data = df.sim.dag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -26.1159 -6.0170 -0.1952 6.1802 27.7619
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.2088 0.2009 1.039 0.29870
## X1 -62.6865 0.2040 -307.308 < 2e-16 ***
## X2 5.1276 0.1986 25.820 < 2e-16 ***
## X3 5.5589 2.0719 2.683 0.00736 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.983 on 1996 degrees of freedom
## Multiple R-squared: 0.9988, Adjusted R-squared: 0.9988
## F-statistic: 5.598e+05 on 3 and 1996 DF, p-value: < 2.2e-16
Der geschätzte Effekt im Modell Y ~ X1 + X2 + X3
beträgt
-62.69
Im folgenden DAG sind zusätzlich die “wahren” Effekte zu sehen:
dag <- dagitty('dag {
X3 [pos="-1, 0.5"]
X1 [pos="-0.75, 0.25"]
X4 [pos="-0.25, 0"]
Y [pos="0.25, 0.25"]
X2 [pos="-0.25, 0.75"]
X3 -> X1 [beta = 5]
X1 -> X4 [beta = 7]
X4 -> Y [beta = -9]
X3 -> Y [beta = 8]
X3 -> X2 [beta = 9]
X2 -> Y [beta = 5]
}')
plot(dag, show.coefficients = TRUE)
confint(lm.x.y)
\(X1\) → \(X4\) → \(Y\) ist der einzige kausale Pfad. Somit ist der totale Effekt \(7 * (-9) = -63\)
Welche der in Übung 4 angepassten Modelle liefern ein Konfidenzintervall für X1, welches diesen wahren Effekt beinhaltet?
## 2.5 % 97.5 %
## (Intercept) -0.3894395 0.8743871
## X1 -52.8775771 -52.6212384
Das CI des Modells Y ~ X1
enthält den wahren Effekt von
-63 nicht.
## 2.5 % 97.5 %
## (Intercept) -0.1912035 0.5978999
## X1 -62.7641194 -62.0675856
## X2 5.3923759 5.7842785
Das CI des Modells Y ~ X1 + X2
enthält den wahren Effekt
von -63 nicht.
## 2.5 % 97.5 %
## (Intercept) -0.191507 0.7182602
## X1 -63.161802 -62.2379319
## X3 49.458437 54.1724045
Das CI des Modells Y ~ X1 + X3
enthält den wahren
Effektvon -63 (wie erwartet).
## 2.5 % 97.5 %
## (Intercept) -0.07010363 0.0412447
## X1 -0.22836472 0.5604571
## X2 5.63215692 5.6874480
## X4 -9.02360583 -8.9114537
Das CI des Modells Y ~ X2 + X4
enthält den wahren
Effektvon -63 nicht. Das Resultat ist extrem weit weg von wahren Wert,
weil fälschlicherweise für den Mediator korrigiert wird.
## 2.5 % 97.5 %
## (Intercept) -0.1851449 0.6027775
## X1 -63.0865000 -62.2864055
## X2 4.7381575 5.5170840
## X3 1.4956063 9.6221701
Das CI des Modells Y ~ X1 + X2 + X3
enthält den wahren
Effekt von -63 (wie erwartet).
Diese Ergebnisse sind konsistent mit jenen aus Übung 2.