Für diese Übung brauchen wir den Datensatz einer klinischen Studie. 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 “weightloss” liegt als csv-Datei auf Moodle.
Lade den Datensatz herunter, speichere ihn ab und importiere ihn in RStudio. Kontrolliere, ob der Datensatz korrekt eingelesen wurde (verschiedene Varianten möglich).
library(rio)
<- import("WeightLoss.csv") wloss
Kontrolliere, ob der Datensatz korrekt eingelesen wurde (verschiedene Varianten möglich).
str(wloss)
## '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 ...
summary(wloss)
## 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 gwü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 = sd / \sqrt{n}\)
Berechne das 95% Konfidenzintervall der Variable wl1
,
unabhängig von der Gruppe. Für diese Übung soll das Konfidenzintervall
manuell 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(wloss$wl1)
mean_wl1 <- sd(wloss$wl1)
sd_wl1 <- length(wloss$wl1)
n_wl1 <- sd_wl1/sqrt(n_wl1)
se_wl1 <- qnorm(1-(0.05/2))
z
<- mean_wl1 - z * se_wl1
LL <- mean_wl1 + z * se_wl1 UL
Untere Schranke:
LL
## [1] 4.497039
Obere Schranke:
UL
## [1] 6.048416
Berechne das gleiche Konfidenzintervall wie in Übung 1 erneut, dieses
Mal aber mit der CI()
Funktion aus dem Rmisc-Package. Ist
das mit der CI()
Funktion berechnete Konfidenzintervall
identisch? Wann ja, warum? Wenn nicht, warum nicht?
Berechne das gleiche Konfidenzintervall wie in Übung 1 erneut, dieses
Mal aber mit der CI()
Funktion aus dem Rmisc-Package.
library(Rmisc)
CI(wloss$wl1)
## 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 das 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:
<- seq(-4, 4, length = 100)
range
<- data.frame(x <- rep(range, 5),
my_df 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
(nicht sehr sinnvoll aber eine gute Übung…).
Berechne das 77% Konfidenzintervall der Variable wl1
(nicht sehr sinnvoll aber eine gute Übung…). Manuell berechnet:
<- qnorm(1-(0.23/2)) # p = 23%
z <- mean_wl1 - z * se_wl1
LL <- mean_wl1 + z * se_wl1 UL
Untere Schranke:
LL
## [1] 4.797665
Obere Schranke:
UL
## [1] 5.747789
Mit der CI-Funktion:
CI(wloss$wl1, ci = 0.77)
## 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(wloss$wl1[wloss$group == "Control"])
mean_CG <- sd(wloss$wl1[wloss$group == "Control"])
sd_CG <- length(wloss$wl1[wloss$group == "Control"])
n_CG <- sd_CG/sqrt(n_CG)
se_CG
<- mean(wloss$wl1[wloss$group == "DietEx"])
mean_IG <- sd(wloss$wl1[wloss$group == "DietEx"])
sd_IG <- length(wloss$wl1[wloss$group == "DietEx"])
n_IG <- sd_IG/sqrt(n_IG)
se_IG
<- mean_CG - mean_IG
mean_diff <- sqrt(se_CG^2+se_IG^2)
se_mean_diff
<- qnorm(1-0.05/2)
z
<- mean_diff - z * se_mean_diff
LL <- mean_diff + z * se_mean_diff UL
Untere Schranke:
LL
## [1] -3.205477
Obere Schranke
UL
## [1] -0.1945231
Berechne die 95% CI’s der Variable wl1
für jede Gruppe
sepparat. Brauche dafür die group.CI()
Funktion aus dem
Rmisc package.
Berechne die 95% CI’s der Variable wl1
für jede Gruppe
sepparat. Brauche dafür die group.CI()
Funktion aus dem
Rmisc package.
library(Rmisc)
group.CI(wl1 ~ group, data = wloss)
## group wl1.upper wl1.mean wl1.lower
## 1 Control 5.135370 4.5 3.864630
## 2 DietEx 7.810215 6.2 4.589785
Stelle die beiden oben berechneten 95% CI’s mit Hilfe des ggplot2-Packages graphisch dar. Es ist nicht die Meinung, dass du diesen Code auswenig 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 des ggplot2-Packages graphisch dar. Es ist nicht die Meinung, dass du diesen Code auswenig 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(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 mittlere Schuhgrösse von NBA Spielern (n = 50) ist 50.2 [95% CI = 49.7 bis 50.7]. Wie gross ist die Standardabweichung in dieser Stichprobe?
Nehmen wir auf Grund einer Umfrage an, die mittlere Schuhgrösse von NBA Spielern (n = 50) ist 50.2 [95% CI = 49.7 bis 50.7]. Wie gross ist die Standardabweichung in dieser Stichprobe?
<- qnorm(1-(0.05/2))
z <- ((50.7 - 50.2) / z) * sqrt(50) #Umformung der Formel für SE
sd sd
## [1] 1.803877
Du hast im Auftrag einer Stiftung anhand eines Fragebogens Daten zur Arbeitszufriedenheit von Gesundheitspersnal gesammelt. Das 95% CI für den durchschnittliche Score (Skala von 0 bis 100) geht von 39 bis 75.