Zum Datensatz

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.

Aufgabe

Importiere den Datensatz weight-loss.csv in R und kontrolliere, ob alles richtig funktioniert hat.


Lösung

library(rio)
df.wloss <- import("../data/weight-loss.csv")
str(df.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 ...

Die Variable group ist als character hinterlegt. Es ist eine gute Angewohnheit, solche Variablen in Faktoren umzuwandeln:

df.wloss$group <- factor(df.wloss$group)

Übung 1:

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:

Aufgaben

  1. Wie gross ist der P-Wert (zuerst manuelle Berechnung)?
  2. Wie gross ist der P-Wert (mit Hilfe der t.test() Funktion)?
  3. Wie ist dieser p-Wert zu interpretieren?
  4. Wie hängen das 95% CI (wird beim t.test() angezeigt) und der P-Wert zusammen?

Lösungen

  1. Wie gross ist der p-Wert (zuerst manuelle Berechnung)?

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. Der p-Wert ist in Wirklichkeit nicht 0, sondern einfach sehr sehr klein…
  2. Beachte, dass der P-Wert mit 2 multipliziert wird, da wir im Normalfall zweiseitige P-Werte berechnen.
  3. Natürlich kann man den P-Wert auch über die \(t\)-Verteilung berechnen, was in Anbetracht der Stichprobengrösse zu einem genauren Resultat führt:
t <- z # Die Teststatistik ist identisch
p <- 2* (1-pt(t, n.wl1-1))
p
## [1] 1.034217e-11

  1. Wie gross ist der p-Wert (mit Hilfe der t.test() Funktion)?
t.test(df.wloss$wl1, mu = 0) # entspricht dem One Sample t-test
## 
##  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:

t.test(df.wloss$wl1, mu = 0, alternative = "greater")
## 
##  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

  1. Wie ist dieser P-Wert zu interpretieren?

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.


  1. Wie hängt das 95% CI (wird beim t-Test angezeigt) und der P-Wert zusammen?

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.


Übung 2

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).

Aufgaben

  1. Berechne den P-Wert für die Mittelwertsdifferenz zwischen den Gruppen zum Zeitpunk wl1 (manuelle Berechnung unter Verwendung der \(t\)-Verteilung und der Annahme homogener Varianzen)
  2. Berechne den P-Wert für die Mittelwertsdifferenz zwischen den Gruppen zum Zeitpunk wl1 (mit Hilfe der t.test() Funktion und var.equal=TRUE).
  3. Interpretieren den Output des t-Tests.

Lösungen

  1. Berechne den P-Wert für die Mittelwertsdifferenz zwischen den Gruppen zum Zeitpunk 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
## p-Wert (t-Verteilung mit df=n1+n2-2)
p <- 2*(1-pt(t,n.CG+n.IG-2))
p
## [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).


  1. Berechne den P-Wert für die Mittelwertsdifferenz zwischen den Gruppen zum Zeitpunk wl1 (mit Hilfe der t.test() Funktion und var.equal=TRUE).
t.test(wl1 ~ group, data = df.wloss,var.equal=TRUE) ##rechnet CG-IG
## 
##  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

  1. Interpretieren den Output des t-Tests.

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.


Zusammenfassung