Zu den Daten

Wir brauchen die gleichen Daten wie in der Übung zu den Proportionen.

Die folgende 2x2 Tabelle zeigt die Daten einer Studie, welche durchgeführt wurde, um die Wirksamkeit von Aspirin zur Prävention eines frühzeitigen Todes nach einem Herzinfarkt zu evaluieren. Hier findest du weitere Informationen zum den Daten.

##          outcome
## treatment survived death
##   placebo      354    52
##   aspirin      725    85

Du kannst dir diese Tabelle in R selber “nachbauen”:

# Matrix anhand der gegebenen Werte erstellen
m <- matrix(c(354, 52, 725, 85), byrow = TRUE, ncol = 2)
# Reihen und Spalten benenen
rownames(m) <- c("placebo", "aspirin")
colnames(m) <- c("survived", "died")
# aus einer Matrix eine Tabelle machen
tab <- as.table(m)
tab
##         survived died
## placebo      354   52
## aspirin      725   85

Manchmal möchte man auf Grundlage einer 2x2 Tabelle die nicht aggregierten Daten zurückgewinnen (z.B. um Grafiken zu erstellen). Dazu gibt es eine praktische Funktion aus dem Paket rstatix.

library(rstatix)
d.aspirin <- counts_to_cases(tab)
# Variablen des erstellen DF's benennen
names(d.aspirin) <- c("gruppe", "outcome")
head(d.aspirin)
##    gruppe  outcome
## 1 placebo survived
## 2 placebo survived
## 3 placebo survived
## 4 placebo survived
## 5 placebo survived
## 6 placebo survived

Odds Ratio

Mit der prop.test() Funktion hast du in der Übung zu den Proportionen untersucht, ob sich die Differenz der Proportionen von zwei Gruppen von 0 unterscheidet. Man könnte auch sagen, du hast untersucht, ob es einen Zusammenhang zwischen den Variablen gruppe und outcome gibt. Um Zusammenhänge zwischen zwei dichotomen Variablen zu untersuchen, gibt es noch weitere Möglichkeiten. Eine Möglichkeit ist das Odds Ratio.

Aufgaben

  1. Was ist beim aktuellen Beispiel der “Event” und was ist die “Exposition”?
  2. Um das Odds Ratio zu berechnen, kannst du die oddsratio() Funktion aus dem package epitools brauchen. Schau im Hilfemenü mit ?oddsratio zuerst nach, wie die 2x2 Tabelle ausgerichtet sein muss. Entspricht die 2x2 Tabelle diesen Vorgaben?
  3. Berechne das Odds Ratio für den Event “Sterben” von Aspirin versus Placebo.
  4. Interpretiere das Odds Ratio.
  5. Wie sind das 95% CI und der p-Wert dieses Odds Ratios zu interpretieren?
  6. Was ist das Odds Ratio für den Event “Überleben” von Placebo versus Aspirin?

Lösungen

Der Event ist outcome == "died" und die Exposition ist gruppe == "aspirin"


Wenn man die 2x2 Tabelle aus dem Datensatz erstellt, sieht diese wie folgt aus:

tab <- table(d.aspirin$gruppe, d.aspirin$outcome)
tab
##          
##           survived died
##   placebo      354   52
##   aspirin      725   85

Die Anordnung entspricht den Vorgaben der Funktion (obwohl es für das Odds Ratio eigentlich keine Rolle spielt, siehe weiter unten). Falls dies nicht der Fall wäre, kann man mit rev = "rows", "colums" oder "both" die Tabelle entsprechend ändern.

If you are providing a 2x2 table the following table is preferred:

                    disease=0   disease=1
    exposed=0 (ref)    n00         n01
    exposed=1          n10         n11  

Nun wird das OR und dessen 95% CI sowie der P-Wert berechnet:

library(epitools)
oddsratio(tab)
## $data
##          
##           survived died Total
##   placebo      354   52   406
##   aspirin      725   85   810
##   Total       1079  137  1216
## 
## $measure
##          odds ratio with 95% C.I.
##            estimate     lower    upper
##   placebo 1.0000000        NA       NA
##   aspirin 0.7974502 0.5535838 1.158314
## 
## $p.value
##          two-sided
##           midp.exact fisher.exact chi.square
##   placebo         NA           NA         NA
##   aspirin  0.2321007    0.2485889   0.228752
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Das Odds Ratio ist 0.7975. Die Odds in der Aspirin-Gruppe, um zu sterben entspricht 79.75% der Odds in der Placebo-Gruppe. Oder anders gesagt, die Odds in der Aspirin-Gruppe, um zu sterben sind 20.25% tiefer als in der Placebo-Gruppe.

Das 95% CI sagt uns, dass unsere beobachtete Stichprobe mit einem wahren OR (in der Population) von zwischen 0.55 und 1.15 kompatibel ist. Genauer: wir haben eine Sicherheit von 95%, dass das wahre OR zwischen 0.55 und 1.15 ist. Ein Wert von 1 ist also durchaus kompatibel mit den Daten. Möglicherweise sterben in der Population sogar mehr Leute mit Aspirin als ohne (OR >1). Der \(\chi^2\) Test testet, ob OR = 1, was gleichbedeutend ist mit keinem Unterschied zwischen den Gruppen. Wenn wir den P-Wert vom \(\chi^2\) Test anschauen, beträgt dieser 22.88%. Es gibt wenig Evidenz gegen \(H_0\).

Technische Anmerkung: Der prop.test() oben hat automatisch eine Korrektur gemacht (“continuity correction”). Hätten wir diesen Test ohne diese Korrektur gemacht (correct = FALSE), wären die P-Werte von oddsratio() und prop.test() identisch.


Was ist das Odds Ratio, um in der Placebo-Gruppe zu überleben?

Odds Ratios sind symmetrisch. Demnach ist das Odds Ratio, um in der Placebo-Gruppe zu überleben das Gleiche, wie das Odds Ratio, um in der Aspirin-Gruppe zu sterben. Siehe die Outputs unten: obwohl die Tabelle umgekehrt angeordnet ist, bleibt das OR gleich:

oddsratio(tab) # Wie oben
## $data
##          
##           survived died Total
##   placebo      354   52   406
##   aspirin      725   85   810
##   Total       1079  137  1216
## 
## $measure
##          odds ratio with 95% C.I.
##            estimate     lower    upper
##   placebo 1.0000000        NA       NA
##   aspirin 0.7974502 0.5535838 1.158314
## 
## $p.value
##          two-sided
##           midp.exact fisher.exact chi.square
##   placebo         NA           NA         NA
##   aspirin  0.2321007    0.2485889   0.228752
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
oddsratio(tab, rev = "both") # Umgekehrte Anordnung der Tabelle
## $data
##          
##           died survived Total
##   aspirin   85      725   810
##   placebo   52      354   406
##   Total    137     1079  1216
## 
## $measure
##          odds ratio with 95% C.I.
##            estimate     lower    upper
##   aspirin 1.0000000        NA       NA
##   placebo 0.7974502 0.5535838 1.158314
## 
## $p.value
##          two-sided
##           midp.exact fisher.exact chi.square
##   aspirin         NA           NA         NA
##   placebo  0.2321007    0.2485889   0.228752
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Risk Ratio

Eine weitere Möglichkeit, um einen Zusammenhang zwischen zwei dichotomen Variablen zu untersuchen ist das Risk Ratio. Voraussetzung ist natürlich, dass wir überhaupt über Risiken sprechen können. Die Daten müssen also von einer longitudinalen Studie stammen (z.B. Kohortenstudie oder RCT). Wir nehmen an, dass bei unserem Beispiel diese Voraussetzung erfüllt ist und wir demnach etwas über Risiken aussagen können.

Aufgaben

Wir arbeiten mit den bisherigen Daten weiter.

  1. Brauche die riskratio() Funktion aus dem package epitools, um das Risk Ratio für den Event “Sterben” von Aspirin versus Placebo zu berechnen. Oben haben wir bereits sichergestellt, dass die Tabelle richtig orientiert ist.
  2. Was sagt uns dieses Risk Ratio, dessen 95% CI und dessen p-Wert?
  3. Was ist das Risk Ratio für den Event “Überleben” von Placebo versus Aspirin?

Lösungen

  1. Brauche die riskratio() Funktion aus dem package epitools, um das Risk Ratio zu berechnen. Oben haben wir bereits sichergestellt, dass die Tabelle richtig orientiert ist.
riskratio(tab)
## $data
##          
##           survived died Total
##   placebo      354   52   406
##   aspirin      725   85   810
##   Total       1079  137  1216
## 
## $measure
##          risk ratio with 95% C.I.
##            estimate     lower    upper
##   placebo 1.0000000        NA       NA
##   aspirin 0.8193257 0.5926804 1.132642
## 
## $p.value
##          two-sided
##           midp.exact fisher.exact chi.square
##   placebo         NA           NA         NA
##   aspirin  0.2321007    0.2485889   0.228752
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

  1. Was sagt uns dieses Risk Ratio, dessen 95% CI und dessen p-Wert?

Das Risk Ratio beträgt 0.82. Das Risiko für einen frühzeitigen Tod nach einem Herzinfarkt ist in der Aspirin-Gruppe 18% tiefer. Oder anders: das Risiko für einen frühzeitigen Tod nach einem Herzinfarkt in der Aspirin-Gruppe entspricht 82% desjenigen in der Placebo-Gruppe.

Das 95% CI sagt uns, dass unsere beobachtet Stichprobe mit einem wahren RR (in der Population) zwischen 0.59 und 1.13 kompatible ist. Genauer: wir haben eine Sicherheit von 95%, dass das wahre Risk Ratio zwischen 0.59 und 1.13 ist. Ein Wert von 1 ist also durchaus kompatibel mit den Daten. Möglicherweise sterben in der Population sogar mehr Leute mit Aspirin als ohne (RR >1). Der Chi-squared Test testet ob RR = 1, was gleichbedeutend ist mit keinem Unterschied zwischen den Gruppen. Wenn wir den p-Wert vom Chi-squared Test anschauen, beträgt dieser 22.88%. Es gibt keine Evidenz gegen H0.

Anmerkung: Der prop.test() oben hat automatisch eine Korrektur gemacht (“continuity correction”). Hätten wir diesen Test ohne diese Korrektur gemacht (correct = FALSE), wären die p-Werte von prop.test() und riskratio() identisch.


  1. Was ist das Risk Ratio, um in der Placebo-Gruppe zu überleben?

Im Gegensatz zu Odds Ratios sind Risk Ratios eben nicht symmetrisch. Demnach ist das Risk Ratio, um in der Placebo-Gruppe zu überleben nicht das Gleiche, wie das Risk Ratio, um in der Aspirin-Gruppe zu sterben. Siehe die Outputs unten: die Tabelle wurde umgekehrt angeordnet und das Risk Ratio (aber nicht der p-Wert) verändert sich:

riskratio(tab) # Wie oben
## $data
##          
##           survived died Total
##   placebo      354   52   406
##   aspirin      725   85   810
##   Total       1079  137  1216
## 
## $measure
##          risk ratio with 95% C.I.
##            estimate     lower    upper
##   placebo 1.0000000        NA       NA
##   aspirin 0.8193257 0.5926804 1.132642
## 
## $p.value
##          two-sided
##           midp.exact fisher.exact chi.square
##   placebo         NA           NA         NA
##   aspirin  0.2321007    0.2485889   0.228752
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
riskratio(tab, rev = "both") # Umgekehrte Anordnung der Tabelle
## $data
##          
##           died survived Total
##   aspirin   85      725   810
##   placebo   52      354   406
##   Total    137     1079  1216
## 
## $measure
##          risk ratio with 95% C.I.
##            estimate     lower   upper
##   aspirin 1.0000000        NA      NA
##   placebo 0.9741464 0.9321088 1.01808
## 
## $p.value
##          two-sided
##           midp.exact fisher.exact chi.square
##   aspirin         NA           NA         NA
##   placebo  0.2321007    0.2485889   0.228752
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Zusatzübung

Aufgabe

In der Studie von Graf et al. (2020) steht im Resultateteil folgendes: “Der Anteil gestürzter Patientinnen und Patienten mit Verwirrtheitssymptomen (n = 514) lag mit 12,3 % (n = 63) 4,4- mal höher als bei Patientinnen und Patienten ohne Verwirrtheitssymptome (n = 1417) mit 2,8 % (n = 39).” Leider geben die Autoren weder P-Wert noch das 95% CI für das RR von 4.4 an. Berechne diese Werte.

Lösung

Wir erstellen die Daten anhand der Angaben aus dem Text:

group <- c(rep("delir", 514), rep("control", 1417))
fall <- c(rep("yes", 63), rep("no",514-63), rep("yes", 39), rep("no", 1417-39))

Anhand der beiden Vektoren können wir die 2x2 Tabelle erstellen:

table(group,fall)
##          fall
## group       no  yes
##   control 1378   39
##   delir    451   63

Nun kann diese Tabelle gebraucht werden, um mit riskratio() den P-Wert und das 95% CI für das RR zu berechnen.

library(epitools)
riskratio(table(group,fall))
## $data
##          fall
## group       no yes Total
##   control 1378  39  1417
##   delir    451  63   514
##   Total   1829 102  1931
## 
## $measure
##          risk ratio with 95% C.I.
## group     estimate    lower    upper
##   control 1.000000       NA       NA
##   delir   4.453307 3.026076 6.553685
## 
## $p.value
##          two-sided
## group       midp.exact fisher.exact   chi.square
##   control           NA           NA           NA
##   delir   2.087219e-14 2.466358e-14 1.552347e-16
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Warum die Autoren beim Risk Ratio nicht auf 4.5 aufgerundet haben, habe ich nicht herausgefunden.