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 approximativen Konfidenzintervalls:
\(LL = \bar{x} - z_{1-\alpha/2} SE\)
\(UL = \bar{x} + z_{1-\alpha/2} SE\)
Wobei \(z_{1-\alpha/2}\) den gewünschten Prozentsatz des Intervalls definiert. Bei einem 95% CI wäre \(\alpha\) also 0.05, was auf beide Seiten aufgeteilt wird (darum \(\alpha/2\)).
Der Standardfehler berechnet sich wie folgt:
\(SE = \frac{s}{\sqrt{n}}\)
Berechne das approximative 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 approximative 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.wl1Untere 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:
Für ein exaktes Konfidenzintervall ersetzten wir also die Quantile der Standartnormalverteilung durch diejengien der \(t\)-Verteilung mit \(n-1\) Freiheitsgeraden.
## [1] 4.449685 6.095769
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 approximative 95% CI für die Mittel wertsdifferenz der beiden Gruppen zum ersten Zeitpunkt (manuelle Berechnung).
Wir nehmen inhomogene Varianzen (\(\sigma_X^2\neq \sigma^2_Y\)) an. Dann gilt für den Standardfehler von \(\bar{X}-\bar{Y}\):
\[ SE_{\bar{X} - \bar{Y}} = \sqrt{\frac{s_X^2}{n_X} + \frac{s_Y^2}{n_Y}} \]
Berechne nun das approxmiative 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.IG-mean.CG
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.diffUntere Schranke:
## [1] 0.1945231
Obere Schranke
## [1] 3.205477
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.