In der Übung zu den Konfidenzintervallen hast du bereits den
Datensatz weight-loss.csv kennengelernt. Hier geht es mit
den gleichen Daten weiter. In dieser Übung stehen jedoch nicht die CI’s,
sondern die P-Werte im Mittelpunkt. Du wirst sehen, dass 95% CI’s und
P-Werte viel gemeinsam haben und auf dem selben Grundprinzip
beruhen.
Importiere den Datensatz weight-loss.csv in
R und kontrolliere, ob alles richtig funktioniert hat.
## '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 ...
Die Variable group ist als character
hinterlegt. Es ist eine gute Angewohnheit, solche Variablen in Faktoren
umzuwandeln:
Vergleich eines Mittelwertes mit einem Referenzwert Wert (One Sample t-test):
In gewissen Situationen kann es sein, dass \(H_{0}\) einen festgelegten Wert annimmt
(muss natürlich inhaltlich begründet sein). Überprüfe, ob sich die
mittlere Gewichtsreduktion nach einem Monat (wl1)
statistisch signifikant von 0 Unterscheidet (unabhängig von der
Gruppenzugehörigkeit). \(H_{0}\) wäre
dabei:
t.test()
Funktion)?t.test() angezeigt)
und der P-Wert zusammen?Wir erstellen Objekte mit den nötigen deskriptiven Statistiken:
H0 <- 0
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 <- mean.wl1/se.wl1
p <- 2* (1-pnorm(z))
p## [1] 0
Anmerkungen:
## [1] 1.034217e-11
t.test()
Funktion)?##
## One Sample t-test
##
## data: df.wloss$wl1
## t = 13.323, df = 21, p-value = 1.034e-11
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 4.449685 6.095769
## sample estimates:
## mean of x
## 5.272727
Hier sehen wir, dass der p-Wert nicht 0 sondern \(1.034 * 10^{-11}\) ist, also
0.00000000001034.
Auch hier wird der zweiseitige (two-tailed) P-Wert berechnet. Für einen
einseitigen Test müsste man explizit alternative = "less"
oder alternative = "greater" definieren, womit der P-Wert
dann halb so gross wäre:
##
## One Sample t-test
##
## data: df.wloss$wl1
## t = 13.323, df = 21, p-value = 5.171e-12
## alternative hypothesis: true mean is greater than 0
## 95 percent confidence interval:
## 4.591715 Inf
## sample estimates:
## mean of x
## 5.272727
Die Wahrscheinlichkeit, den beobachteten Wert (oder einen extremeren, also noch weiter weg von \(H_0\)) unter dem \(H_0\)-Modell zu erhalten, beträgt 1.034e-11, also 0.00000000001034.
Anmerkung: Auch hier erhälst du das 95% CI. Dieses entspricht exakt
den Werten, welche du bei der Übung zu den Konfidenzintervallen
berechnet hast (Exaktes Konfidenzintervall). Die t.test()
Funktion ist also eine weitere Möglichkeit, um CI’s zu berechnen.
Das 95% CI umschliesst den von \(H_{0}\) postulierten Wert 0 deutlich nicht. Man könnte auch sagen, das 95% CI schneidet \(H_{0}\) nicht. Wenn ein 95% CI \(H_{0}\) nicht schneidet, dann ist der P-Werte sicher kleiner als 5%. Je deutlicher das CI \(H_{0}\) nicht schneidet, desto kleiner ist der P-Wert.
In der Übung zu den Konfidenzintervallen hast du das approximative 95% CI für die Mittelwertsdifferenz der beiden Gruppen zum ersten Zeitpunkt berechnet (Bei Annahme von heterogenen Varianzen).
Nun geht es zusätzlich um den P-Wert für diese Mittelwertsdifferenz (Two sample t-Test).
wl1 (manuelle Berechnung unter
Verwendung der \(t\)-Verteilung und der
Annahme homogener Varianzen)wl1 (mit Hilfe der
t.test() Funktion und var.equal=TRUE).wl1 (manuelle Berechnung unter
Verwendung der \(t\)-Verteilung und der
Annahme homogener Varianzen).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
mean.diff## [1] 1.7
#homogene Varianzen, wir brauchen spooled
spooled<-sqrt(((n.IG-1)*sd.IG^2+(n.CG-1)*sd.CG^2)/(n.IG+n.CG-2))
se.mean.diff <- spooled*sqrt(1/n.IG+1/n.CG)
t <- mean.diff/se.mean.diff
## t-Wert
t ## [1] 2.360125
## [1] 0.02854025
## für die Interesierten: ein exaktes 95 % CI haben wir mit
L<-mean.diff-qt(.975,n.CG+n.IG-2)*se.mean.diff
U<-mean.diff+qt(.975,n.CG+n.IG-2)*se.mean.diff
c(L,U)## [1] 0.1974787 3.2025213
Anmerkung: Wie bei Aufgabe 1 könnte man auch die Normalveteilung verwenden, aber in Anbtracht der Stichprobengrösse ist die Berechnung über die \(t\)-Verteilung besser (genauer).
wl1 (mit Hilfe der
t.test() Funktion und var.equal=TRUE).##
## Two Sample t-test
##
## data: wl1 by group
## t = -2.3601, df = 20, p-value = 0.02854
## alternative hypothesis: true difference in means between group Control and group DietEx is not equal to 0
## 95 percent confidence interval:
## -3.2025213 -0.1974787
## sample estimates:
## mean in group Control mean in group DietEx
## 4.5 6.2
Die Mittelwertsdifferenz beträgt 1.7kg [95% CI = 0.1974787, 3.2025213] zugunsten der Interventionsgruppe. Der P-Wert beträgt 0.0285403. Das heisst unter der Annahme, dass \(H_0\) korrekt ist, ist die Wahrscheinlichkeit, dass man eine solche oder eine noch extremere Differenz zwischen den Gruppen rein durch Zufall findet, 2.8540253 %. Diese Differenz ist bei einem Signifikanzlevel von 5% statistisch signifikant.
CI(),
group.CI() oder t.test().t.test() Funktion.