Kapitel 28 Confounding

Menschen mit Sarkopenie haben ein höheres Risiko vorzeitig zu sterben als solche mit normaler Muskulatur. Dieser Zusammenhang ist jedoch nicht nur kausal. Ein Teil dieses statistischen Zusammenhangs ist auf eine Störvariable (Confounder) zurückzuführen: Da Krebs einerseits zu einer reduzierten Muskelmasse und Muskelfunktion führen kann, und anderseits auch zu einer höheren Sterblichkeit führt, verzerrt diese Variable Krebs den Zusammenhang zwischen Sarkopenie und Mortalität.

Falls Sie ein kurzes Video zu Confounding anschauen möchten, finden Sie hier ein Video über die Fake-News, dass lange Haare leben retten.

28.1 Pakete zu diesem Kapitel

library(sjPlot)
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.0      ✔ purrr   0.3.4 
## ✔ tibble  3.1.8      ✔ dplyr   1.0.10
## ✔ tidyr   1.2.1      ✔ stringr 1.5.0 
## ✔ readr   2.1.3      ✔ forcats 0.5.2 
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()

Um Confounding zu illustrieren, benutzen wir Daten aus einem veröffentlichten Artikel.

data<-rio::import("https://ndownloader.figstatic.com/files/30472497", format="csv")
data<-janitor::clean_names(data, case="none")

Wir schauen uns einmal den Zusammenhang zwischen BMI und der Aufmerksamkeit (Attention) an:

library(ggpubr)
ggpubr::ggscatter(data,x="FMI", y="Attention", add="reg.line")+
   ggpubr::stat_cor(p.accuracy = 0.001, r.accuracy = 0.01, label.x=20)+
  labs(x="Fett-Masse-Index")
## `geom_smooth()` using formula = 'y ~ x'

Wir können den Zusammenhang auch noch per Gruppe darstellen.

library(ggpubr)
g1<-ggpubr::ggscatter(data,x="FMI", y="Attention", add="reg.line", color="Group", palette = "jco")

g1+ggpubr::stat_cor(aes(color=Group),p.accuracy = 0.001, r.accuracy = 0.01, label.x=20)+
  labs(x="Fett-Masse-Index")
## `geom_smooth()` using formula = 'y ~ x'

Nun müssen wir überlegen, ob eine Störvariable (Confounder) diesen Zusammenhang verfälschen könnte?

r1<-lm(Attention~FMI, data=data)
jtools::summ(r1, confint=TRUE)
Observations 535
Dependent variable Attention
Type OLS linear regression
F(1,533) 10.85
0.02
Adj. R² 0.02
Est. 2.5% 97.5% t val. p
(Intercept) 103.85 99.21 108.50 43.92 0.00
FMI -0.84 -1.34 -0.34 -3.29 0.00
Standard errors: OLS
r1<-lm(Attention~FMI+Age+Education+Group, data=data)
jtools::summ(r1, confint=TRUE)
Observations 535
Dependent variable Attention
Type OLS linear regression
F(6,528) 40.89
0.32
Adj. R² 0.31
Est. 2.5% 97.5% t val. p
(Intercept) 83.29 74.27 92.32 18.13 0.00
FMI -0.74 -1.33 -0.15 -2.47 0.01
Age 0.03 -0.06 0.12 0.69 0.49
Education 1.91 1.59 2.23 11.77 0.00
GroupObese 0.54 -3.37 4.44 0.27 0.79
GroupSarcopenic -2.74 -6.54 1.07 -1.41 0.16
GroupSarcopenic Obese -2.68 -8.45 3.09 -0.91 0.36
Standard errors: OLS

Wir sehen hier, dass FMI den Zusammenhang beinahe gleich behält. Wir sehen nur eine leichte Senkung des Zusammenhanges, wenn wir für die anderen Variablen kontrollieren. Die Variablen Alter, Education, und die Gruppe (Obese, Sarcopenic oder Sarcopenic Obese) sind keine starken Störvariablen (keine starken Confounder).

Anders sieht es mit dem Zusammenhang der Gruppe mit der Attention aus:

r1<-lm(Attention~Group, data=data)
jtools::summ(r1, confint=TRUE)
Observations 535
Dependent variable Attention
Type OLS linear regression
F(3,531) 9.64
0.05
Adj. R² 0.05
Est. 2.5% 97.5% t val. p
(Intercept) 100.47 98.17 102.76 86.02 0.00
GroupObese -4.36 -7.80 -0.92 -2.49 0.01
GroupSarcopenic -8.95 -13.09 -4.81 -4.25 0.00
GroupSarcopenic Obese -12.41 -18.34 -6.49 -4.12 0.00
Standard errors: OLS

Wir sehen hier einen signifikanten Zusammenhang zwischen der Gruppenzugehörigkeit und der Aufmerksamkeit. Wenn wir nun für die Variablen Alter und Erziehung kontrollieren, verschwindet der Zusammenhang zwischen der Gruppe und der Attention:

r1<-lm(Attention~FMI+Education+Group, data=data)
jtools::summ(r1, confint=TRUE)
Observations 535
Dependent variable Attention
Type OLS linear regression
F(5,529) 49.02
0.32
Adj. R² 0.31
Est. 2.5% 97.5% t val. p
(Intercept) 85.79 80.24 91.33 30.37 0.00
FMI -0.76 -1.35 -0.17 -2.55 0.01
Education 1.84 1.58 2.10 13.89 0.00
GroupObese 0.69 -3.19 4.57 0.35 0.73
GroupSarcopenic -2.36 -6.00 1.29 -1.27 0.20
GroupSarcopenic Obese -2.12 -7.66 3.42 -0.75 0.45
Standard errors: OLS

Wir sehen in diesem Zusammenhang, dass Education eine Störvariable (Confounder) ist.

r1<-lm(Attention~FMI+Age+Group, data=data)
jtools::summ(r1, confint=TRUE)
Observations 535
Dependent variable Attention
Type OLS linear regression
F(5,529) 16.96
0.14
Adj. R² 0.13
Est. 2.5% 97.5% t val. p
(Intercept) 123.06 116.20 129.92 35.23 0.00
FMI -1.13 -1.78 -0.47 -3.36 0.00
Age -0.28 -0.37 -0.20 -6.59 0.00
GroupObese 1.69 -2.68 6.07 0.76 0.45
GroupSarcopenic -3.62 -7.88 0.65 -1.66 0.10
GroupSarcopenic Obese -1.72 -8.19 4.76 -0.52 0.60
Standard errors: OLS

Auch das Alter ist ein Confounder.

Sowohl Alter als auch Eduction sind einerseits mit der Gruppenzugehörigkeit assoziert, und auch mit der Attention.

Hier finden Sie mehr über Confounding:

28.2 Weiteres Beispiel

Für dieses Beispiel benutzen wir wieder ein veröffentlichtes Beispiel. https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0273575#sec015.

Zuerst laden wir die Daten direkt von der Webseite von Plos One herunter. Eine Variable müssen wir noch vom charakter Format ins numerische Format ändern.

data<-rio::import("https://doi.org/10.1371/journal.pone.0273575.s002", format="xlsx")
data<-data %>% 
  mutate(sleeptime=as.numeric(sleeptime))
## Warning in mask$eval_all_mutate(quo): NAs introduced by coercion

Wir könnten jetzt untersuchen, ob eine Smartphone Abhängigkeit einen Einfluss auf die Schlafdauer hat.

lm.fit<-lm(sleeptime~addiction, data=data)
tab_model(lm.fit)
  sleeptime
Predictors Estimates CI p
(Intercept) 7.66 6.89 – 8.42 <0.001
addiction -0.53 -0.81 – -0.25 <0.001
Observations 365
R2 / R2 adjusted 0.037 / 0.035
Jemand aus dem Team gibt jedoch zu Bedenken, dass dieser Zusammenhang durch die Depression verzerrt (confounded) sein könnte, da die Depression zu Schlafmangel führen kann und Depression wahrscheinlich auch eine Vulnerabilität für eine Abhängigkeit vom Smartphone darstellt.

Wenn wir nun die Variable Depression in das Modell mit einfügen, verringert sich der Zusammenhang zwischen Smartphone Abhängigkeit und Schlafdauer.

lm.fit<-lm(sleeptime~addiction+depression, data=data)
tab_model(lm.fit)
  sleeptime
Predictors Estimates CI p
(Intercept) 7.42 6.62 – 8.21 <0.001
addiction -0.31 -0.64 – 0.03 0.075
depression -0.04 -0.07 – -0.01 0.022
Observations 365
R2 / R2 adjusted 0.051 / 0.046

Wir haben nun jedoch ein Problem: Die Daten sind Querschnittsdaten, wir wissen also nicht, ab die Depression zu mehr Smartphone Abhängigkeit führt, oder ob es nicht eher umgekehrt ist: d.h., dass die Smartphone Abhängigkeit eine Depression fördert. Deswegen sind wir mit unserer Analyse und der Interpretation limitiert, die Resultate sagen uns nicht, in welche Richtung der Zusammenhang geht.

Dazu bräuchten wir longitudinale Daten, wo zu Beginn der Studie niemand Depression hat und wir danach beobachten, ob eine Smartphone Abhängigkeit zu mehr Depression führt.

28.3 Table 2 Fallacy

Ein spannendes Thema ist auch die Table 2 Fallacy. Dieser Trugschluss wird Table 2 Trugschluss genannt, weil in der Tabelle 2 oft multivariable Modelle präsentiert werden. Die Leser:innen machen nun manchmal den Fehler, alle Variablen des Multivariablen Modells als “Kausal” zu interpretieren, da sie ja für alle anderen Variablen im Modell kontrolliert sind. Das Problem ist aber komplexer. Sie finden hier einen guten Text dazu.