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
<- matrix(c(354, 52, 725, 85), byrow = TRUE, ncol = 2)
m # Reihen und Spalten benenen
rownames(m) <- c("placebo", "aspirin")
colnames(m) <- c("survived", "died")
# aus einer Matrix eine Tabelle machen
<- as.table(m)
tab 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)
<- counts_to_cases(tab)
d.aspirin # 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
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.
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?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:
<- table(d.aspirin$gruppe, d.aspirin$outcome)
tab 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"
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.
Wir arbeiten mit den bisherigen Daten weiter.
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.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"
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.
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"
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.
Wir erstellen die Daten anhand der Angaben aus dem Text:
<- c(rep("delir", 514), rep("control", 1417))
group <- c(rep("yes", 63), rep("no",514-63), rep("yes", 39), rep("no", 1417-39)) fall
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.