Für diese Übung brauchen wir den Datensatz einer klinischen Studie
(weight-loss.csv
). Die 22 Personen wurden randomisiert in
eine der beiden Gruppen zugeteilt:
Das Outcome ist der Gewichtsverlust in Kilogramm nach einem
(wl1
) und nach 3 Monaten (wl3
). Der Datensatz
liegt als csv-Datei auf Moodle.
Lade den Datensatz herunter, speichere ihn ab und importiere ihn in
R
. Kontrolliere, ob der Datensatz korrekt eingelesen wurde
(verschiedene Varianten möglich).
library(rio)
ladenKontrolliere, ob der Datensatz korrekt eingelesen wurde (verschiedene Varianten möglich).
## 'data.frame': 22 obs. of 4 variables:
## $ ID : int 1 2 3 4 5 6 7 8 9 10 ...
## $ group: chr "Control" "Control" "Control" "Control" ...
## $ wl1 : int 4 4 4 3 5 6 6 5 5 3 ...
## $ wl3 : int 3 3 1 1 2 4 4 1 1 2 ...
## ID group wl1 wl3
## Min. : 1.00 Length:22 Min. :3.000 Min. :1.000
## 1st Qu.: 6.25 Class :character 1st Qu.:4.000 1st Qu.:1.000
## Median :11.50 Mode :character Median :5.000 Median :2.000
## Mean :16.95 Mean :5.273 Mean :2.136
## 3rd Qu.:28.75 3rd Qu.:6.000 3rd Qu.:3.000
## Max. :34.00 Max. :9.000 Max. :4.000
Berechnung der unteren (LL) und oberen (UL) Schranke eines Konfidenzintervalls:
\(LL = \bar{x} - z_{1-(p/2)} SE\)
\(UL = \bar{x} + z_{1-(p/2)} SE\)
Wobei \(z_{1-(p/2)}\) den gewünschten Prozentsatz des Intervalls definiert. Bei einem 95% CI wäre \(p\) also 0.05, was auf beide Seiten aufgeteilt wird (darum \(p/2\)).
Der Standardfehler berechnet sich wie folgt:
\(SE = \frac{s}{\sqrt{n}}\)
Berechne das 95% Konfidenzintervall der Variable wl1
,
unabhängig von der Gruppe. Für diese Übung soll das Konfidenzintervall
manuell unter Verwendung der z-Verteilung berechnet werden.
Berechne das 95% Konfidenzintervall der Variable wl1
,
unabhängig von der Gruppe. Für diese Übung soll das Konfidenzintervall
manuell berechnet werden.
mean.wl1 <- mean(df.wloss$wl1)
sd.wl1 <- sd(df.wloss$wl1)
n.wl1 <- length(df.wloss$wl1)
se.wl1 <- sd.wl1/sqrt(n.wl1)
z <- qnorm(1-(0.05/2))
LL <- mean.wl1 - z * se.wl1
UL <- mean.wl1 + z * se.wl1
Untere Schranke:
## [1] 4.497039
Obere Schranke:
## [1] 6.048416
Berechne das gleiche Konfidenzintervall wie in Übung 1 erneut, dieses
Mal aber mit der CI()
Funktion aus
library(Rmisc)
. Ist das mit der CI()
Funktion
berechnete Konfidenzintervall identisch mit dem manuell berechneten?
Wann ja, warum? Wenn nicht, warum nicht?
Berechne das gleiche Konfidenzintervall wie in Übung 1 erneut, dieses
Mal aber mit der CI()
Funktion
library(Rmisc)
.
## upper mean lower
## 6.095769 5.272727 4.449685
Das mit der CI()
Funktion berechnete Konfidenzintervall
ist etwas breiter als das manuell berechnete, weil diese Funktion die
t-Verteilung und nicht die z-Verteilung braucht. Bei kleinen Stichproben
ist die t-Verteilung genauer. Je grösser \(n\), desto näher ist die t-Verteilung an
der z-Verteilung.
Hier ein Vergleich der z-Verteilung mit der t-Verteilungen mit verschiedenen Freiheitsgeraden (df). Man sieht, dass je kleiner das df, desto breiter die Verteilung:
range <- seq(-4, 4, length = 100)
my.df <- data.frame(x <- rep(range, 5),
df = rep(c("df_03", "df_10", "df_30", "df_50", "normal"), each = 100),
value = c(dt(range, 3),
dt(range, 10),
dt(range, 30),
dt(range, 50),
dnorm(range)))
library(ggplot2)
ggplot(my.df, aes(x = x, y = value, colour = df)) +
geom_line() +
xlab("") +
ylab("Density") +
ggtitle("z and t distributions")
Berechne das 77% Konfidenzintervall der Variable wl1
unter Verwendung der z-Verteilung.
Berechne das 77% Konfidenzintervall der Variable
wl1
.
Manuell berechnet:
Untere Schranke:
## [1] 4.797665
Obere Schranke:
## [1] 5.747789
Mit der CI-Funktion:
## upper mean lower
## 5.762010 5.272727 4.783444
Berechne nun das 95% CI für die Mittelwertsdifferenz der beiden Gruppen zum ersten Zeitpunkt (manuelle Berechnung).
Berechne nun das 95% CI für die Mittelwertsdifferenz der beiden Gruppen zum ersten Zeitpunkt (manuelle Berechnung).
mean.CG <- mean(df.wloss$wl1[df.wloss$group == "Control"])
sd.CG <- sd(df.wloss$wl1[df.wloss$group == "Control"])
n.CG <- length(df.wloss$wl1[df.wloss$group == "Control"])
se.CG <- sd.CG/sqrt(n.CG)
mean.IG <- mean(df.wloss$wl1[df.wloss$group == "DietEx"])
sd.IG <- sd(df.wloss$wl1[df.wloss$group == "DietEx"])
n.IG <- length(df.wloss$wl1[df.wloss$group == "DietEx"])
se.IG <- sd.IG/sqrt(n.IG)
mean.diff <- mean.CG - mean.IG
se.mean.diff <- sqrt(se.CG^2+se.IG^2)
z <- qnorm(1-0.05/2)
LL <- mean.diff - z * se.mean.diff
UL <- mean.diff + z * se.mean.diff
Untere Schranke:
## [1] -3.205477
Obere Schranke
## [1] -0.1945231
Anmerkung: Weil die Varianzen nicht homogen sind (und die Gruppen nicht genau gleich gross sind) würde die Berechnung mit der gepoolten Standardabweichung zu einem noch genaueren Resultat führen:
\[ s_{pooled}^2 = \frac{1}{df} * ((n - 1) * s_X^2 + (m-1) * s_Y^2) \] und
\[ SE_{X - Y} = \sqrt{\frac{s_{pooled}^2}{n} + \frac{s_{pooled}^2}{m}} = s_{pooled} * \sqrt{\frac{1}{n} + \frac{1}{m}}. \]
Berechne die 95% CI’s der Variable wl1
für jede Gruppe
sepparat. Brauche dafür die group.CI()
Funktion aus
library(Rmisc)
.
Stelle die beiden oben berechneten 95% CI’s mit Hilfe des
ggplot2-Packages graphisch dar. Es ist nicht die Meinung, dass du diesen
Code auswendig kennst. Du kannst ihn einfach aus den Workshops kopieren
und die relevanten Variablen anpassen. Nicht vergessen, das
ggplot2
und das Hmisc
Package zuerst zu
laden.
Warum sind die Intervalle relativ breit?
Stelle die beiden oben berechneten 95% CI’s mit Hilfe von
library(ggplot2)
graphisch dar. Es ist nicht die Meinung,
dass du diesen Code auswendig kennst. Du kannst ihn einfach aus den
Workshops kopieren und die relevanten Variablen anpassen. Nicht
vergessen, das ggplot2
und das Hmisc
Package
zuerst zu laden.
library(ggplot2)
library(Hmisc)
ggplot(df.wloss, aes(x = group, y = wl1)) +
stat_summary(fun = mean, geom = "point") +
stat_summary(fun.data = mean_cl_normal, geom = "errorbar", width = 0.1) +
xlab("")
Warum sind die Intervalle relativ breit? Weil das \(n\) relativ “tief” und demnach der SE “gross” ist (Wurzel-n-Gesetz)
Nehmen wir auf Grund einer Umfrage an, die beobachtete mittlere Schuhgrösse von NBA Spielern (n = 50) ist 50.2 mit [95% CI = 49.7 bis 50.7]. Wie gross ist die Standardabweichung in dieser Stichprobe?
Du hast im Auftrag einer Stiftung anhand eines Fragebogens Daten zur Arbeitszufriedenheit von Gesundheitspersonal gesammelt. Das 95% CI für den durchschnittlichen Score (Skala von 0 bis 100) geht von 39 bis 75.