Willkommen bei Stats by Randolph. Hier geht es zur Hauptseite mit weiteren Informationen und Inhalten.
Autor:innen dieser Seite: An den Inhalten dieser Seite haben mitgearbeitet: Eva Röttger, Valentin Koob und Markus Janczyk. Der Inhalt dieser Seite wird in der Lehre in den Studiengängen Psychologie von der AG Psychologische Forschungsmethoden und Kognitive Psychologie an der Universität Bremen verwendet, steht aber allen Interessierten zur Verfügung. Rückmeldungen/Fehler/Vorschläge können gesendet werden an randolph@uni-bremen.
Inhalte dieser Seite: Diese Seite folgt dem Verlauf der Vorlesung Statistik 1. Anhand eines fiktiven Datensatzes werden in diesem Skript alle für die jeweilige statistische Problemstellung und Auswertung nötigen Befehle, Funktionen, Tests etc. vorgestellt.
Da einige der Teile von Statistik I eher konzeptueller Natur sind, wir aber die Nummerierung beibehalten wollten, sind einige Kapitel dieses Skriptes nur kurz und die eigentlichen Inhalte beginnen bspw. mit Teil 3.
Eine grundlegende Einführung in die Arbeit mit R und RStudio finden Sie hier.
Versionshistory:
In Teil 1 werden Grundlagen der Vorgehensweise erarbeitet. Unter anderem wird eingeführt, was der wichtige Unterschied zwischen Deskriptiver Statistik und Inferenzstatistik ist.
Im Zuge der weiteren Teile werden immer wieder mathematische
Schreibweisen benötigt. Dazu werden in Teil
2 ein paar Aspekte der Mengenlehre, die (lineare) Transformation von
Variablen sowie das Summenzeichen eingeführt. Die in diesem Zusammenhang
benötigten Befehle und Funktionen wie sum()
oder
length()
werden hier
detaillierter vorgestellt. Sie summieren die Elemente z.B. eines Vektors
auf oder liefern die Anzahl von dessen Elemente zurück:
X <- c(1,2,5,7,4)
sum(X) # Summe
## [1] 19
length(X) # Anzahl der Elemente
## [1] 5
Mit Teil 3 geht es nun mit statischen Verfahren der Deskriptiven Statistik los, insbesondere mit Häufigkeiten.
Haben Sie für eine Studie Daten erhoben, liegen diese in den meisten
Fällen in digitalisierter Form vor, z.B. als .csv
Datei.
Zur Illustration der Auswertungsschritte und -verfahren verwenden wir
hier den (fiktiven) Datensatz daten_statistik_I.csv
, den
Sie hier
herunterladen können. Wie Sie Daten diverser anderer Formate in
R
laden, erfahren Sie hier.
Für diesen Datensatz haben 30 jüngere und ältere Versuchspersonen Daten auf verschiedenen Variablen geliefert (s.u.). In der Studie wurden verschiedene Fragestellungen zum Zusammenhang von Bewegung, kognitiven Funktionen (Gedächtnis) und Alter untersucht.
Bevor Sie die Daten einlesen, sollten Sie das aktuelle
Arbeitsverzeichnis setzen, damit R
weiß, wo sich die Daten
befinden. Angenommen, die Daten befinden sich auf dem Laufwerk
D
im Ordner Studie
, dann wird das
Arbeitsverzeichnis wie folgt gesetzt:
setwd("D:/Studie")
Die Datei daten_statistik_I.csv
können Sie dann
folgendermaßen in ein DataFrame namens daten
einlesen:
daten <- read.csv(file = "./daten_statistik_I.csv",
header = TRUE, # 1. Zeile = Variablennamen
sep = ";") # Trennzeichen
# (mit deutschen Ländereinstellungen ein Semikolon)
Um einen ersten Überblick über die enthaltenen Variablen zu bekommen,
können Sie sich die ersten Zeilen des DataFrames mit head()
anzeigen lassen:
head(daten)
In der ersten Spalte befindet sich die Variable vp
, die
die Versuchspersonen-Nummer enthält. Es folgen die Variablen
geschlecht
und alter
. Die nächste Variable,
eigenschaft1
, ist eine binäre Variable, die angibt, ob sich
die jeweilige Person üblicherweise mehrmals in der Woche sportlich
betätigt, oder nicht (ja/nein).
Die nächste Variable, score.in.test1
, gibt an, welche
Punktzahl die jeweilige Versuchsperson in Test 1 erreicht hat. In Test 1
musste jede Person an 10 Sportgeräten im Fitness Studio jeweils 10
Durchgänge (auf mittlerer Schwierigkeitsstufe) absolvieren. Für jedes
erfolgreich absolvierte Gerät gab es einen Punkt (die maximale Punktzahl
ist somit 10).
In Test 2 mussten alle Teilnehmer:innen der fiktiven Studie ein
halbstündiges Nachrichtenvideo anschauen. Die Variable
score.in.test2
enthält die Anzahl frei erinnerter Themen,
die in dieser Sendung vorkamen.
Die Variable score.in.test3
enthält die Ergebnisse eines
weiteren Gedächtnistests (Test 3), den alle Versuchspersonen
gleichermaßen absolvierten. Für diesen Test mussten Wortlisten gelernt
und im Anschluss Test-Wörter als “alt” vs. “neu” klassifiziert werden.
Für jedes korrekt als “alt” klassifizierte Wort (für jeden Treffer) gab
es einen Punkt.
Ein letzter Gedächtnistest (gleicher Art) wurde durchgeführt, nachdem
alle Proband:innen ein neues Gedächtnistraining durchlaufen hatten, von
dem angenommen wird, es bewirke eine starke Verbesserung der
Gedächtnisleistung – insbesondere bei älteren Personen. Es befindet sich
also eine weitere Variable, score.in.test4
, im Datensatz,
die die Werte der zweiten Durchführung des Gedächtnistests enthält,
nachdem das neue Training absolviert wurde.
Wenn Sie nun die Stichprobe, z.B. für eine Abschlussarbeit,
beschreiben wollen, interessiert v.a. die demographische Struktur dieser
Stichprobe, d.h. die Altersstruktur sowie die Anzahl von Frauen, Männern
und diversen Personen. Die Funktion table()
hilft Ihnen
hier für die (nominalskalierte) Variable geschlecht
weiter:
table(daten$geschlecht) # Absolute Häufigkeit von diversen Personen, Männern und Frauen
##
## d m w
## 2 8 20
# Die absolute Häufigkeit der Personen verschiedenen Alters...
table(daten$alter) # ...ist weniger gut geeignet zur Beschreibung der Stichprobe.
##
## 18 19 20 21 22 23 24 25 50 51 52 53 54 55 56 57 60 61 62
## 1 2 3 2 2 3 1 1 2 1 1 2 1 2 1 1 2 1 1
Sie können mehr über die Stichprobe erfahren, wenn Sie sich Maße anschauen, die (je nach Skalenniveau der jew. Variablen) geeignet sind, die Daten möglichst umfassend in einem Wert auszudrücken: Dies sind Maße der zentralen Tendenz (Lagemaße) und der Variabilität.
Teil 4 widmet sich entsprechend weiter der Deskriptiven Statistik und behandelt Maße der Zentralen Tendenz und der Variabilität.
Wenn es also zunächst darum geht, die Stichprobe zu beschreiben, ist
für die (intervallskalierte) Variable alter
als optimales
Maß der zentralen Tendenz der arithmetische Mittelwert
geeignet:
mean(daten$alter) # Mittelwert des Alters der Versuchspersonen
## [1] 38.3
Sollte der Median (z.B. auch bei ordinalskalierten Variablen) von Interesse sein, dann kann dieser wie folgt bestimmt werden:
median(daten$alter) # Median des Alters der Versuchspersonen
## [1] 37.5
Der Modus (optimal v.a. für nominalskalierte Variablen) wird folgendermaßen ermittelt:
alter.tab <- table(daten$alter) # Häufigkeitstabelle
alter.tab
##
## 18 19 20 21 22 23 24 25 50 51 52 53 54 55 56 57 60 61 62
## 1 2 3 2 2 3 1 1 2 1 1 2 1 2 1 1 2 1 1
as.numeric(names(which.max(alter.tab))) # Modus extrahieren
## [1] 20
Achtung, es gibt hier zwei Modi: 20 und 23. Auf die hier dargestellt Art und Weise wird allerdings nur der erste Modus gefunden.
Zu einer umfassenden Beschreibung der Daten gehören auch Maße der Variabilität. Dazu gehören z.B. Minimum und Maximum sowie die Spannbreite.
minimum <- min(daten$alter) # Minimum = 18 Jahre
minimum
## [1] 18
maximum <- max(daten$alter) # Maximum = 62 Jahre
maximum
## [1] 62
spannbreite <- maximum - minimum # Spannbreite = 44 Jahre
spannbreite
## [1] 44
range(daten$alter) # Minimum und Maximum mit range()
## [1] 18 62
Für (mindestens) ordinalskalierte Variablen können gleich mehrere
Maße der zentralen Tendenz und der Vaiabilität mit der Funktion
summary()
berechnet werden…
summary(daten$alter)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18.00 21.25 37.50 38.30 54.75 62.00
…sowie verschiedenste Quantile mit der Funktion
quantile()
.
quantile(daten$alter) # Quartile als Default
## 0% 25% 50% 75% 100%
## 18.00 21.25 37.50 54.75 62.00
quantile(daten$alter, # Oder z.B. Quintile
probs = seq(from = 0, to = 1, by = 0.2),
type = 6)
## 0% 20% 40% 60% 80% 100%
## 18.0 20.2 23.0 51.6 55.8 62.0
Für intervallskalierte Variablen ist die Varianz das
wichtigste Maß der Variabilität. Wie Sie Teil
4 des Skripts zur Vorlesung Statistik 1 entnehmen können, müssen Sie
bei Verwendung der Funktion var()
allerdings bedenken, dass
diese die korrigierte Stichprobenvarianz berechnet (siehe auch
Teil
10).
Seien \(x_1,\ldots ,x_n\)
Datenpunkte. Dann wird die korrigierte Stichprobenvarianz mit der
Funktion var()
folgendermaßen berechnet: \[\hat{S}_X^2:=\frac{1}{n-1}\cdot \sum_{i=1}^n (x_i
- M_X)^2 \]
Um die Korrektur quasi “rückgängig” zu machen, wird das Ergebnis der
Funktion var()
mit \(\frac{n-1}{n}\) multipliziert. Die
Stichprobenvarianz der Variablen alter
könnten Sie also folgendermaßen berechnen:
n <- length(daten$vp) # Anzahl der Elemente der Stichprobe (30 Versuchspersonen)
n
## [1] 30
stpr.var <- var(daten$alter)*((n-1)/n) # Stichprobenvarianz der Variablen 'alter'
stpr.var
## [1] 297.21
Die Standardabweichung der Variablen
alter
ist dann die Wurzel aus der Stichprobenvarianz:
sqrt(stpr.var) # Wurzel aus der Stichprobenvarianz
## [1] 17.23978
Wahlweise können Sie die Stichprobenvarianz sowie die entsprechende
Standardabweichung einer Variablen auch “von Hand” in R
unter Verwendung dieser Formel berechnen: \[S_X^2:=\frac{1}{n}\cdot \sum_{i=1}^n (x_i -
M_X)^2 \]
var.alter <- (1/n) * sum((daten$alter-mean(daten$alter))^2)
var.alter
## [1] 297.21
sd.alter <- sqrt(var.alter)
sd.alter
## [1] 17.23978
Die Beschreibung Ihrer Stichprobe, z.B. in einer Abschlussarbeit, könnte also folgendermaßen lauten:
“30 Studierende und Mitarbeitende der Universität Bremen nahmen an diesem Experiment teil, 8 davon waren männlich, 2 divers. Das durchschnittliche Alter betrug 38,3 Jahre (SD = 17,24).”
Teil 5 befasst sich mit Zusammenhängen (oder Beziehungen) zwischen Variablen, was bereits einen großen Teil psychologischer Forschung abdeckt. Grob ist damit gemeint, dass bestimmte Ausprägungen auf einer Variablen eher mit bestimmten Ausprägungen auf einer anderen Variablen einhergehen.
In unserem (fiktiven) Datensatz daten_statistik_I.csv
haben 30 jüngere und ältere Versuchspersonen Daten auf verschiedenen
Variablen geliefert, die nun auf Zusammenhänge untersucht werden
sollen.
Eine Hypothese war z.B., dass es einen Zusammenhang von Altersgruppe (jünger/älter) und Eigenschaft 1 (vorhanden/nicht vorhanden) geben sollte. Eine weitere, dass mit zunehmendem Alter, der erzielte Wert in Test 1 niedriger ausfallen sollte. Diese wäre ein Beispiel für einen negativen Zusammenhang.
Wie diese vermuteten Zusammenhänge analysiert werden können, hängt
vom Skalenniveau der beteiligten Variablen ab. Die Variable
alter
ist, wie bereits angemerkt, intervallskaliert. Die
Variable eigenschaft1
ist dichotom (genauer: binär, d.h.
mit 0 und 1 codiert) und somit nominalskaliert. Es gibt verschiedene
Möglichkeiten, zwischen beiden einen Zusammenhang zu untersuchen.
Möglichkeit 1: Sie kodieren die Variable
alter
um in eine ebenfalls dichotome Variable
altersgruppe
(d.h. Personen unter 30 und über 30). Damit
haben Sie (quasi) zwei nominalskalierte Variablen (genauer: eine
nominal- und eine ordinalskalierte Variable) und können den \(\chi^2\)-Koeffizienten berechnen.
Möglichkeit 2: …, welche mehr in den Daten enthaltene Information berücksichtigt, folgt weiter unten ;)
Wie bereits angemerkt, muss, um den Zusammenhang zwischen
Altersgruppe und Eigenschaft 1 zu untersuchen, zunächst aus der
Variablen alter
die neue Variable altersgruppe
kodiert werden. Dazu weisen wir allen Versuchspersonen die jünger als
oder genau 30 Jahre alt sind, den Wert 1
zu, den anderen
Versuchspersonen entsprechend den Wert 2
:
daten$altersgruppe[daten$alter <= 30] <- 1 # jüngere Versuchspersonen
daten$altersgruppe[daten$alter > 30] <- 2 # ältere Versuchspersonen
table(daten$altersgruppe) # Häufigkeit der Ausprägungen (jünger/älter)
##
## 1 2
## 15 15
Als nächstes sollte die Variable eigenschaft1
, die eine
String-Variable ist und mit “ja” und “nein” codiert ist, in eine
numerische Variable umcodiert werden.
daten$eigenschaft1 <- ifelse(daten$eigenschaft1 == "ja",1,0) # "ja" = 1 / "nein" = 0
class(daten$eigenschaft1) == "numeric" # Ist die Variable nun numerisch? Ja :)
## [1] TRUE
Zur Berechnung von \(\chi^2\) wird
eine empirische Kontingenztafel benötigt, deren Zellen die Häufigkeiten
der jeweiligen “Ausprägungskombinationen” (hier z.B. “jünger” und
“Eigenschaft 1 vorhanden”) beinhalten. In R
kann der
Funktion chisq.test()
z.B. eine Matrix übergeben werden,
die eine solche empirische Kontingenztafel repräsentiert. Eine andere
Möglichkeit ist es, direkt eine aus den Rohdaten mit der Funktion
table()
erzeugte Kontingenztafel zu übergeben. Diese
erzeugen wir zunächst…
ktafel <-table(daten$eigenschaft1, daten$altersgruppe) # Kontingenztafel
ktafel
##
## 1 2
## 0 2 11
## 1 13 4
…und berechnen dann im nächsten Schritt den \(\chi^2\)-Koeffizienten:
ergebnis <- chisq.test(ktafel, correct = FALSE) # Zusammenhang zwischen...
ergebnis # Altersgruppe und Eigenschaft 1
##
## Pearson's Chi-squared test
##
## data: ktafel
## X-squared = 10.995, df = 1, p-value = 0.0009133
Das Objekt ergebnis
enthält auch weitere Informationen,
z.B. die Kontingenztafel der bei Unabhängigkeit erwarteten Werte (siehe
hierzu Teil
5 im Skript zur Vorlesung Statistik 1):
ergebnis$expected # erwartete Werte bei Unabhängigkeit
##
## 1 2
## 0 6.5 6.5
## 1 8.5 8.5
Die Funktion assocstats()
aus dem paket vcd
ist eine weitere Möglichkeit, \(\chi^2\) zu berechnen:
library(vcd)
assocstats(ktafel)
## X^2 df P(> X^2)
## Likelihood Ratio 11.876 1 0.00056855
## Pearson 10.995 1 0.00091335
##
## Phi-Coefficient : 0.605
## Contingency Coeff.: 0.518
## Cramer's V : 0.605
Sie sehen hier denselben (Pearson) \(\chi^2\)-Wert, wie zuvor.
Achtung: Für den Spezialfall einer \(2\times 2\)-Kontingenztafel erhält man nur
dann denselben \(\chi^2\)-Wert, wenn
man bei chisq.test()
correct = FALSE setzt, womit die sog.
Yates-Korrektur unterdrückt wird. Andernfalls unterscheiden
sich die Ergebnisse leicht.
Der assocstats()
output enthält zusätzlich den
Kontingenzkoeffizienten (für nähere Erläuterungen
hierzu siehe ebenfalls Teil
5 im Skript zur Vorlesung Statistik 1).
Dem Output beider Funktionen können Sie entnehmen, dass der
Zusammenhang zwischen den Variablen altersgruppe
und
eigenschaft1
sich signifikant von Null unterscheidet (\(p = .001\)). Dieser Zusammenhang erlaubt
also eine Vorhersage der Ausprägung der einen Variablen bei Kenntnis der
Ausprägung der anderen.
Übersichtlicher wird der Output von chisq.test()
, wenn
Sie das Objekt ergebnis
der Funktion chi_out()
aus dem Paket schoRsch
übergeben:
library(schoRsch)
chi_out(ergebnis)
## Test Results
## 1 Pearson's Chi-squared test: chi^2(1) = 11.00, p = .001
Wie oben erwähnt, besagt eine weitere Hypothese, dass mit zunehmendem
Alter der Wert in Test 1 niedriger ausfallen sollte. Sowohl die Variable
alter
als auch die Variable score.in.test1
sind intervallskaliert. Um einen möglichen Zusammenhang zwischen beiden
Variablen zu analysieren, eignet sich daher Pearson’s
Produkt-Moment Korrelation:
Um zunächst einen visuellen Eindruck dieses vorhergesagten
Zusammenhangs zu erhalten, schauen wir zunächst die Rohdate mit einem
Scatterplot an (näheres zu einfachen Abbildungen mit R
finden Sie hier):
plot(daten$alter, daten$score.in.test1,
xlab = "Alter", # Beschriftung x-Achse
ylab = "Score in Test 1", # Beschriftung y-Achse
axes = FALSE) # zunächst ohne Achsen
axis(side = 1, # 1 = x-Achse
at = seq(from = 0, to = 70, by = 10), # an welche Stellen sollen Labels?
labels = seq(from = 0, to = 70, by = 10)) # die Labels selber
axis(side = 2, # 2 = y-Achse
las = 2, # dreht die Beschriftung um 90°
at = seq(from = 0, to = 10, by = 2),
labels = seq(from = 0, to = 10, by = 2))
abline(h = 0) # horizontale Linie bei y = 0
Ersichtlich ist hier auf den ersten Blick, dass mittlere Altersstufen (um 40 Jahre) nicht vertreten sind, sondern dass die Daten sich auf Personen in den Zwanzigern und Personen in den Fünfzigern (und Sechszigern) beschränken. Trotzdem deutet sich ein hypothesenkonformer linearer Zusammenhang an: Ältere Personen haben eher einen niedrigeren Wert in Test 1, es scheint also ein negativer, linearer Zusammenhag vorzuliegen.
Als erste Möglichkeit, die Stärke und die Richtung dieses
Zusammenhangs in einer einzigen Zahl ausdrücken, können Sie die
Kovarianz berechnen. Wie Sie Teil
5 des Skripts zur Vorlesung Statistik 1 entnehmen können, müssen Sie
bei Verwendung der Funktion cov()
– genau wie bei der
Funktion var()
für die Varianz – bedenken, dass diese die
korrigierte Kovarianz berechnet: \[\text{Kov}(X,Y)=\frac{1}{n-1}\cdot \sum_{i=1}^n
(x_i-M_X)\cdot (y_i-M_Y)\] Um also die unkorrigierte
Kovarianz in R
zu berechnen, müssen Sie auch hier wieder
die Korrektur “rückgängig” machen, indem Sie das Ergebnis der funktion
cov()
mit \(\frac{n-1}{n}\) multiplizieren.
cov(daten$alter, daten$score.in.test1)*((n-1)/n)
## [1] -14.07333
Die Richtung des Zusammenhangs ist tatsächlich negativ: je höher das Alter, desto niedriger der Wert in Test 1. Über die Stärke des Zusammenhangs kann allerdings erst dann eine Aussage getroffen werden, wenn die Kovarianz standardisiert wurde, indem sie am Produkt der beiden Standardabweichungen relativiert wurde. Das Ergebnis ist Pearson’s Produkt-Moment Korrelation.
Die Berechnung der Korrelation geschieht in R
mit der
Funktion cor()
bzw. cor.test()
.
cor(daten$alter, daten$score.in.test1)
## [1] -0.5703035
ergebnis <- cor.test(daten$alter, daten$score.in.test1)
ergebnis
##
## Pearson's product-moment correlation
##
## data: daten$alter and daten$score.in.test1
## t = -3.6738, df = 28, p-value = 0.001
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.7719631 -0.2643480
## sample estimates:
## cor
## -0.5703035
Der Output von cor.test()
kann mit der Funktion
cor_out()
aus dem Paket schoRsch
übersichtlicher gestaltet werden:
cor_out(ergebnis)
## Text
## 1 r(30) = -.57, p = .001
Es zeigt sich, dass tatsächlich ein negativer Zusammenhang (\(r = -.57\)) zwischen den Variablen
alter
und score.in.test1
vorliegt, der sich
zudem signifikant von Null unterscheidet (\(p
= .001\)).
Um sich die Kovarianz- oder Korrelationsmatrizen anzeigen zu lassen,
müssen Sie der Funktion cov()
bzw. cor()
jeweils ein DataFrame übergeben:
cov(data.frame(daten$alter, daten$score.in.test1)) # Kovarianzmatrix
## daten.alter daten.score.in.test1
## daten.alter 307.45862 -14.55862
## daten.score.in.test1 -14.55862 2.11954
cor(data.frame(daten$alter, daten$score.in.test1)) # Korrelationsmatrix
## daten.alter daten.score.in.test1
## daten.alter 1.0000000 -0.5703035
## daten.score.in.test1 -0.5703035 1.0000000
Korrelationen können auch berechnet werden, wenn (mindestens eine der) Variablen nicht intervallskaliert sind.
Siehe hierzu Teil 5 im Skript zur Vorlesung Statistik 1.
Kommen wir noch einmal zurück zu Hypothese 1, es gäbe einen Zusammenhang zwischen dem Alter der Versuchspersonen und Eigenschaft 1. Eine erste, in diesem Fall aber weniger optimale, Möglichkeit, diesen Zusammenhang zu analysieren, haben Sie bereits oben kennengelernt, den \(\chi^2\)-Test. Dieser ergab, dass ein (signifikant von Null verschiedener) Zusammenhang vorliegt: Kenntnis der Ausprägung der einen Variablen erlaubt Vorhersage der Ausprägung der anderen. Die Richtung des Zusammenhangs deutet sich hier allenfalls im Muster der Kontingenztafel an.
Die 2. Möglichkeit 2 der Auswertung ist die
punktbiseriale Korrelation, d.h., die Korrelation
zwischen einer dichotomen (binären) Variablen (hier:
eigenschaft1
) und einer intervallskalierten Variablen
(hier: alter
). Glücklicherweise haben Sie die
Teilnehmer:innen Ihrer Studie nicht von vornherein in Altersgruppen
aufgeteilt, sondern Sie haben deren exaktes Alter erhoben – und damit
mehr Information erhalten als nur “jünger” bzw. “älter” als 30
Jahre.
Die punktbiseriale Korrelation können Sie sehr leicht berechnen, wenn
die dichotome (binäre) Variable tatsächlich mit 0 und 1 codiert ist
(hier der Fall). Sie verwenden dann wie gehabt die Funktion
cor()
bzw. cor.test()
:
cor(daten$alter, daten$eigenschaft1)
## [1] -0.6363941
ergebnis <- cor.test(daten$alter, daten$eigenschaft1)
ergebnis
##
## Pearson's product-moment correlation
##
## data: daten$alter and daten$eigenschaft1
## t = -4.3656, df = 28, p-value = 0.0001566
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.8107744 -0.3582655
## sample estimates:
## cor
## -0.6363941
Auch hier kann der Output übersichtlicher gestaltet werden:
cor_out(ergebnis)
## Text
## 1 r(30) = -.64, p < .001
Sie sehen hier (wie bereits im \(\chi^2\)-Test), dass ein Zusammenhang
vorliegt, der sich signifikant von Null unterscheidet. Der
Korrelationskoeffizient (\(r = -.64\))
ist negativ. Dies kann (unter Berücksichtigung der Kodierung der
Variablen eigenschaft1
) so interpretiert werden, dass bei
älteren Personen die Eigenschaft 1 eher nicht vorhanden ist
(höhere Werte auf der Variablen alter
gehen einher mit dem
niedrigeren Wert auf der Variablen eigenschaft1
).
Teil 6 widmet sich der einfachen, linearen Regression, deren Ziel es ist, eine mathematische Gleichung zu finden, die auf kompakte Art und Weise empirische Daten “bestmöglich” beschreibt.
Das heißt, wir suchen jeweils eine lineare Funktion, die den Zusammenhang zwischen einer Variablen \(X\) (abgebildet auf der x-Achse) und einer weiteren Variablen \(Y\) (abgebildet auf der y-Achse) als Gerade repräsentiert. Beide Variablen müssen hierbei intervallskaliert sein.
Diese lineare Funktion hat die allgemeine Form: \[\hat{Y} = b\cdot X + a\]
Im (fiktiven) Datensatz daten_statistik_I.csv
haben 30
jüngere und ältere Versuchspersonen Daten auf verschiedener Variablen
geliefert, die im vorangegangen Kapitel auf Zusammenhänge untersucht
wurden.
Ein signifikant von Null verschiedener Korrelationskoeffizient (\(r=−.57\)) für den negativen Zusammenhang
zwischen den Variablen alter
und
score.in.test1
wurde bereits hier ermittelt:
Mit zunehmendem Alter fällt der Wert in Test 1 niedriger aus.
Während bei der Korrelation die kausale Richtung eines Zusammenhangs unbestimmt bleibt, wird in der Regression hingegen eine kausale Richtung unterstellt.
Im Beispiel könnte man vermuten, dass das Alter einer Person
ursächlich für die Höhe dieses Wertes in Test 1 ist. In diesem Fall wäre
eine Vorhersage des Wertes auf der Variablen score.in.test1
bei Kenntnis des Wertes auf der Variablen alter
möglich.
Um diesen Gedanken weiter zu verfolgen, muss in der einfachen linearen Regression die optimale Regressionsgleichung ermittelt werden. Gesucht sind dann diejenigen Parameter \(b\) und \(a\) der o.a. Gleichung, die das “Kriterium der kleinsten Quadrate” erfüllen (vgl. hier).
In der Regressionsrechnung gibt es für die Variablen spezielle Namen:
Soll also die optimale Funktion zur Regression der Kriteriumsvariable
score.in.test1
auf die Prädiktorvariable alter
bestimmt werden, kann in R die Funktion
lm()
verwendet werden. Der Name der Funktion steht für
linear model und hier kommt die Modellsprache von
R zum Einsatz.
Nachdem der Datensatz daten_statistik_I.csv
geladen
wurde, werden der Funktion lm()
(mindestens) die
Modellgleichung und der zu verwendende DataFrame daten
übereben:
# Berechnung der Regression mit lm():
modell <- lm(score.in.test1 ~ alter, # Y modelliert durch X
data = daten) # welcher Datensatz?
modell # gibt die Koeffizienten aus
##
## Call:
## lm(formula = score.in.test1 ~ alter, data = daten)
##
## Coefficients:
## (Intercept) alter
## 9.28023 -0.04735
Ausgegeben werden die Parameter \(a\) (der Achsenabschnitt bzw. “Intercept”) und \(b\) (die Steigung) der optimalen Geraden.
Eine vollständige Auswertung erhalten Sie mit der Funktion
summary()
.
summary(modell)
##
## Call:
## lm(formula = score.in.test1 ~ alter, data = daten)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.2858 -0.6759 -0.1675 0.7852 2.0873
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 9.28023 0.54136 17.143 <2e-16 ***
## alter -0.04735 0.01289 -3.674 0.001 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.217 on 28 degrees of freedom
## Multiple R-squared: 0.3252, Adjusted R-squared: 0.3011
## F-statistic: 13.5 on 1 and 28 DF, p-value: 0.001
Auch hier finden sich die Regressionskoeffizienten, ergänzt um einen
\(p\)-Wert (Pr(>|t|)
).
Hier unterscheidet sich bspw. der Steigungskoeffizient \(b\) der Regressionsgeraden signifikant von
Null (\(p = .001\)).
Außerdem findet sich die Angabe
Multiple R-squared: 0.3252
. \(R^2\) ist im Fall der einfachen linearen
Regression zugleich der Determinationskoeffizient \(r^2_{xy}\). Oben hatten Sie
\(|r_{xy}| = .57\) bereits berechnet.
Ziehen Sie also zum Abgleich die Wurzel aus \(R^2\), dann erhalten Sie \(|r_{xy}|\).
sqrt(summary(modell)$r.squared)
## [1] 0.5703035
Zusammenfassend ist zu sagen, dass eine Vorhersage des Scores in Test
1 anhand des Alters einer Versuchsperson möglich ist. Der
Determinationskoeffizient, bzw. \(R^2 =
0.3252\), besagt allerdings, dass nur 32.5% der Varianz der
Variablen score.in.test1
durch die Varianz der Variablen
alter
aufgeklärt werden, was eher mittelmäßig bis wenig
ist. Dies deutet darauf hin, dass es noch weitere wichtige Prädiktoren
gibt. Um diese mit zu berücksichtigen, würden wir allerdings die
multiple Regression benötigen, die wir erst in Statistik II
behandeln.
Im Datensatz daten_statistik_I.csv
befindet sich eine
weitere Variable score.in.test2
und die zugehörige
Hypothese lautet, dass es einen positiven Zusammenhang zwischen den
Werten in Test 1 und Test 2 geben sollte. Berechnen wir daher zunächst
die Korrelation zwischen score.in.test1
und
score.in.test2
:
# Pearson Korrelation zwischen 'score.in.test1' und 'score.in.test2'
cor.test(daten$score.in.test1, daten$score.in.test2)
##
## Pearson's product-moment correlation
##
## data: daten$score.in.test1 and daten$score.in.test2
## t = -1.2829, df = 28, p-value = 0.21
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.5492655 0.1362097
## sample estimates:
## cor
## -0.235622
Es stellt sich heraus, dass der Zusammenhang negativ (wenngleich nicht signifikant) ist: Je höher der Wert in Test 1 ist, desto niedriger ist der Wert in Test 2 (\(r_{xy} = -.24\)).
Eine Erklärung für dieses widersprüchliche Ergebnis wäre, dass sich bei Berücksichtigung einer Drittvariablen der Zusammenhang dennoch als positiv erweist. Eine mögliche Drittvariable wäre das Alter der Proband:innen. Innerhalb der Altersstufen könnten die Scores in Test 1 und Test 2 positiv korrelieren. Über alle Altersstufen hinweg jedoch negativ.
Wenn dies so wäre, sollte jede der beiden Variablen
score.in.test1
und score.in.test2
mit der
Variablen alter
korrelieren:
# Pearson Korrelation zwischen 'score.in.test1' und 'alter'
cor.test(daten$score.in.test1, daten$alter)
##
## Pearson's product-moment correlation
##
## data: daten$score.in.test1 and daten$alter
## t = -3.6738, df = 28, p-value = 0.001
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.7719631 -0.2643480
## sample estimates:
## cor
## -0.5703035
# Pearson Korrelation zwischen 'score.in.test2' und 'alter'
cor.test(daten$score.in.test2, daten$alter)
##
## Pearson's product-moment correlation
##
## data: daten$score.in.test2 and daten$alter
## t = 11.939, df = 28, p-value = 1.68e-12
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.8260251 0.9587240
## sample estimates:
## cor
## 0.914228
Dies ist der Fall, berechnen wir nun eine
Partialkorrelation um den Einfluss der Variablen
alter
“loszuwerden”. Dabei wird der lineare Zusammenhang
beider Variablen score.in.test1
und
score.in.test2
mit der Drittvariablen alter
“auspartialisiert” (d.h. entfernt) und eine Korrelation mit den
jeweiligen Residuen (vgl. hier)
berechnet.
Hierzu können wir die Funktion pcor.test()
aus dem Paket
ppcor
verwenden. Das Ergebnis ist unter
estimate
zu finden:
# Partialkorrelation
library(ppcor)
## Lade nötiges Paket: MASS
pcor.test(daten$score.in.test1, daten$score.in.test2, daten$alter)
Dieses Ergebnis ist so zu interpretieren, dass ein positiver
Zusammenhang von \(r_{xy} = 0.86\)
zwischen den Werten von Test 1 und Test 2 besteht, nachdem der lineare
Anteil der Drittvariablen alter
auspartialisiert wurde.
Dieser Zusammenhang ist signifikant von Null verschieden (\(p < .001\)).
Teil 7 beschäftigt sich mit der Inferenzstatistik, also damit, wie man auf Basis einer Stichprobe etwas über die Eigenschaften von Populationen herausgefunden werden kann. Kernthemen der Inferenzstatistik sind einerseits das “Schätzen” der unbekannten Populationskennwerte, welche Parameter genannt werden (bspw. des Populationsmittelwerts), andererseits das Testen von Hypothesen über solche Parameter der Population(en).
Die Stochastik bezeichnet ein Teilgebiet der Mathematik, das sich mit der Beschreibung von zufälligen Vorgängen und deren Ausgängen beschäftigt. Stochastisch bedeutet dabei “zufällig”. Ein Ereignis wird als zufällig bezeichnet, wenn sein Ausgang grundsätzlich nicht vorhersagbar ist. Die Stochastik umfasst die Gebiete der Wahrscheinlichkeitstheorie und der mathematischen Statistik. In Teil 8 geht es dabei primär um die Grundlagen aller folgenden Betrachtungen, z.B. was Ergebnisse und Ereignisse sind und was wir unter Wahrscheinlichkeiten verstehen. Zusätzlich wird ein kleiner Abstecher in die Kombinatorik dargestellt, also das Auszählen, wieviele Möglichkeit der Stichprobenbildung unter Berücksichtigung verschiedener Eigenschaften es gibt.
In Teil 8 wurden die Grundlagen der Wahrscheinlichkeitstheorie beleuchtet. Besonders relevant sind hier die Begriffe “Zufallsexperiment” und “Ergebnis”. Die Ausgänge von Zufallsexperimenten werden durch Variablen repräsentiert, die verschiedene Ausprägungen annehmen können. Der Ausgang eines Zufallsexperiments ist jedoch unbekannt. Man ist somit daran interessiert, welche Ausprägungen eine Variable per Zufall annehmen könnte und mit welcher Wahrscheinlichkeit dies passiert, wenn das zugrunde liegende Zufallsexperiment einmal durchgeführt wird. Das mathematische Modell einer solchen Variablen nennt man Zufallsvariable. Um Zufallsvariablen und deren Verteilungen geht es in Teil 9.
Das Problem, das die Inferenzstatistik lösen soll, ist, dass man i.d.R. an sog. Populationen oder Grundgesamheiten interessiert ist, aber nur die Daten einer Stichprobe aus dieser Population vorliegen hat (siehe dazu auch Teil 7). Die eigentlich interessanten (Populations-)Parameter sind unbekannt und müssen aus den Stichprobenstatistiken geschätzt werden. Um diese sogenannte Punktschätzung geht es in Teil 10.
In Teil 11 wird auf Basis des Vorwissens der vorhergehenden Teile die Logik der (klassischen) Inferenzstatistik erarbeitet. Wir kommen nun als zum Bereich des Hypothesentestens.
Wir betrachten nun verschiedene Varianten des \(t\)-Tests (siehe Teil 12).
Der (fiktive) Datensatz daten_statistik_I.csv
enthält
Daten von 30 jüngeren und älteren Versuchspersonen, die verschiedene
Interventionen durchliefen und Tests absolvierten. Oben
wurden bereits Analysen der Testergebnisse in Test 1 und Test 2
durchgeführt und u.a. festgestellt, dass die Ergebnisse dieser beiden
Tests negativ miteinander korrelierten (bzw. positiv, wenn als
Drittvariable das Alter der Versuchspersonen mit einbezogen wurde).
Die Variable score.in.test3
enthält die Ergebnisse eines
Gedächtnistests, den alle Versuchspersonen gleichermaßen absolvierten.
Die inhaltliche Hypothese, die hier getestet werden soll, lautet:
“Jüngere Versuchspersonen (Altersgruppe = 1) erzielen einen höheren
Score als ältere Versuchspersonen (Altersgruppe = 2) in diesem
Test”.
Die statistischen Hypothesen des (einseitigen) Tests lauten dann \(H_0:\mu_1\leq\mu_2\; \text{ und } \;H_1:\mu_1>\mu_2\) und als Analysemethode eignet sich der t-Test für zwei unabhängige Stichproben.
Um den t-Test für zwei unabhängige Stichproben durchführen zu können, müssen einige Voraussetzungen gelten bzw. als gültig angenommen werden:
Die erste Voraussetzung ist hier streng genommen nicht vollständig erfüllt. Der Vergleich zweier Altersgruppen kann als Quasi-Experiment betrachtet werden, dessen Hauptmerkmal es ist, keine zufällige Zuordnung der Versuchspersonen zu den Gruppen vorzunehmen, sondern vorgefundene Gruppen miteinander zu vergleichen. Unabhängig sind die Gruppen hier jedoch, da sich in jeder Gruppe unterschiedliche Versuchspersonen befinden.
Intervallskalenniveau der abhängigen Variablen (Wert in Test 3) nehmen wir hier als gegeben an, genauso wie die Voraussetzung der Normalverteilung des Merkmals in der Population.
Ob Varianzhomogenität vorliegt, kann mit der Funktion
leveneTest()
aus dem Paket car
überprüft
werden. Dazu muss die Gruppierungsvariable, hier
altersgruppe
, zunächst in einen Faktor umgewandelt werden
und dann kann die Funktion verwendet werden:
daten$altersgruppe <- as.factor(daten$altersgruppe) # Faktorisieren
library(car)
## Lade nötiges Paket: carData
leveneTest(score.in.test3 ~ altersgruppe, # Levene-Test auf Varianzhomogenität
data = daten,
center = "mean")
Der Levene-Test prüft die Nullhypothese, dass die Varianzen beider Gruppen homogen (d.h. gleich) sind. Ein nicht signifikantes Ergebnis (wie hier vorliegend) bedeutet, dass diese Nullhypothese beibehalten werden kann, wir also von Varianzhomogenität ausgehen werden.
Nun kann der eigentliche t-Test durchgeführt werden:
ergebnis <- t.test(score.in.test3 ~ altersgruppe, # Score in Test 3
data = daten, # modelliert durch Altersgruppe
var.equal = TRUE, # Varianzhomogenität angenommen
alternative = "greater") # Gerichtete Alternativhypothese
ergebnis # H1: mu_1 größer als mu_2
##
## Two Sample t-test
##
## data: score.in.test3 by altersgruppe
## t = 3.5157, df = 28, p-value = 0.0007568
## alternative hypothesis: true difference in means between group 1 and group 2 is greater than 0
## 95 percent confidence interval:
## 8.430097 Inf
## sample estimates:
## mean in group 1 mean in group 2
## 77.66667 61.33333
Um einen übersichtlicheren Output zu erhalten, gibt es im Paket
schoRsch
die Funktion t_out()
:
t_out(ergebnis)
## Test Results
## 1 Two Sample t-test: t(28) = 3.52, p = .001, d = 1.28
Das Ergebnis spricht für die Alternativhypothese: Der Erwartungswert der Population der jüngeren Versuchspersonen ist signifikant größer als der der älteren Versuchspersonen, \(t(28) = 3.52, p = .001, d = 1.28\).
Angenommen in einer großangelegten früheren Studie hätte sich ergeben, dass der Wert im Gedächtnistest von Personen über 30 Jahre im Mittel signifikant kleiner ist als 70 Punkte (von insgesamt 100).
Ob dieses Ergebnis in der vorliegenden Studie repliziert wurde, können Sie mit einem t-Test für eine Stichprobe analysieren. Die Voraussetzungen hierfür sind (1) Intervallskalenniveau und (2) Normalverteilung des Merkmals in der Population sowie (3) die zufällige Ziehung der Versuchspersonen in die Stichprobe.
Die statistischen Hypothesen lauten: \(H_0:\mu\geq\mu_0\; \text{ und } \;H_1:\mu<\mu_0\) (wobei \(\mu_0\) hier der Wert 70 ist).
Vor dem t-Test müssen die Daten der interessierende Gruppe der älteren Personen ausgewählt werden.
daten_aelter <- subset(daten,
altersgruppe == 2) # Auswahl der Daten der älteren VPen
Dann kann der t-Test entsprechend berechnet werden:
ergebnis <- t.test(daten_aelter$score.in.test3, # die Werte der Stichprobe
mu = 70, # H0: mu0 = 70 (oder größer)
alternative = "less") # gerichtete H1: mu0 < 70
ergebnis
##
## One Sample t-test
##
## data: daten_aelter$score.in.test3
## t = -3.1172, df = 14, p-value = 0.003785
## alternative hypothesis: true mean is less than 70
## 95 percent confidence interval:
## -Inf 66.23033
## sample estimates:
## mean of x
## 61.33333
Übersichtlicheren Output können wir auch hier mit der Funktion
t_out()
aus dem Paket schoRsch
generieren:
t_out(ergebnis)
## Test Results
## 1 One Sample t-test: t(14) = -3.12, p = .004, d = -0.80
##
## NOTE: Reporting unadjusted estimate for Cohen's d.
Das Ergebnis spricht auch hier für die Alternativhypothese: Der Erwartungswert der Population der älteren Personen ist signifikant kleiner als 70, \(t(14) = -3.12, p = .004, d = -0.80\). Das Ergebnis der früheren Studie wurde repliziert.
Ein neues Gedächtnistraining könnte nun entwickelt worden sein, das eine starke Verbesserung der Gedächtnisleistung bewirkt – insbesondere bei älteren Personen.
Im Datensatz daten_statistik_I.csv
befindet sich also
eine weitere Variable score.in.test4
, die die Werte der
Versuchspersonen in einer zweiten Erhebung des Gedächtnistests enthält,
nachdem das neue Training absolviert wurde.
Für eine vollständige Analyse der Daten wäre eine Varianzanalyse geeignet (siehe das Skript zur Vorlesung Statistik 2).
Die Hypothese, dass die Gedächtnisleistung älterer Personen nach dem Gedächtnistraining (Messzeitpunkt 2) signifikant besser ist als zuvor (Messzeitpunkt 1), kann mit einem t-Test für zwei abhängige Stichproben getestet werden. Abhängig sind die Stichproben, da dieselben Versuchspersonen in beiden Messungen Daten geliefert haben.
Die Voraussetzungen sind auch hier: (1) Intervallskalenniveau und (2) Normalverteilung des Merkmals in der Population sowie (3) zufällige Ziehung der Versuchspersonen in die Stichprobe.
Das Hypothesenpaar lautet: \(H_0:\mu_{mzp2}\leq\mu_{mzp1}\; \text{ und } \;H_1:\mu_{mzp2}>\mu_{mzp1}\).
Erneut müssen vor dem t-Test die Daten der interessierende Gruppe der älteren Personen ausgewählt werden.
daten_aelter <- subset(daten,
altersgruppe == 2) # Auswahl der Daten der älteren Vn
Dann können wir den t-Test berechnen:
ergebnis <- t.test(x = daten_aelter$score.in.test4, # Übergabe der Werte beider...
y = daten_aelter$score.in.test3, # ...Messzeitpunkte
paired = TRUE, # abhängige Stichproben
alternative = "greater") # H1: mu_mzp2 größer als mu_mzp1
ergebnis
##
## Paired t-test
##
## data: daten_aelter$score.in.test4 and daten_aelter$score.in.test3
## t = 14.053, df = 14, p-value = 6.01e-10
## alternative hypothesis: true mean difference is greater than 0
## 95 percent confidence interval:
## 10.37941 Inf
## sample estimates:
## mean difference
## 11.86667
t_out(ergebnis) # formatiert mit schoRsch
## Test Results
## 1 Paired t-test: t(14) = 14.05, p < .001, d = 3.63
##
## NOTE: Reporting unadjusted estimate for Cohen's d.
Das Ergebnis spricht erneut für die Alternativhypothese: Der Erwartungswert der Population älterer Versuchspersonen nach dem Gedächtnistraining signifikant größer als der vor dem Training, \(t(14) = 14.05, p < .001, d = 3.63\).
Nachdem in Teil 10 die Punktschätzung behandelt wurde, ist die Frage bei der Intervallschätzung (vgl. Teil 13)nun: In welchem Bereich liegen plausible Werte eines Populationsparameters, die eine berechnete Stichprobenstatistik “erzeugen” würden? Ein solcher Wertebereich wird als Vertrauens- oder Konfidenzintervall bezeichnet. Häufig wird das sog. 95% Konfidenzintervall betrachtet.
Eine korrekte (frequentistische) Interpretation dieses Intervalls lautet: “Würde man unendlich oft Stichproben vom Umfang \(n\) aus der gleichen Population ziehen und jeweils das 95% Konfidenzintervall berechnen, dann beinhalten 95% der auf diese Art konstruierten Konfidenzintervalle den wahren Wert (z.B. \(\mu\)).” (vgl. hier)
Der genuine R-Output der verschiedenen t-Tests liefert die Ober- und Untergrenze des jeweiligen Konfidenzintervalls immer gleich mit und es besteht eine Verbindung zwischen dem Ergebnis eines \(t\)-Tests und dem dazu gehörenden Konfidenzintervall, die hier jeweils kurz erläutert wird.
In Kapitel 12 wurden verschiedene t-Tests
berechnet, u.a. ein t-Test für eine Stichprobe, um die
Hypothese zu testen, dass der Wert in einem Gedächtnistest
(score.in.test3
) bei älteren Versuchspersonen im Mittel
kleiner ist als 70. Das Ergebnis des Tests war gewesen:
##
## One Sample t-test
##
## data: daten_aelter$score.in.test3
## t = -3.1172, df = 14, p-value = 0.003785
## alternative hypothesis: true mean is less than 70
## 95 percent confidence interval:
## -Inf 66.23033
## sample estimates:
## mean of x
## 61.33333
Das Ergebnis spricht also für die Alternativhypothese: Der Erwartungswert der Population der älteren Personen ist signifikant kleiner als 70, \(t(14) = -3.12, p = .004, d = -0.80\).
Die Untergrenze des 95% Konfidenzintervalls für den
Mittelwert ist “-Inf
” (minus unendlich), die
Obergrenze ist 66.23033.
Die entscheidende Frage ist, ob der Testwert \(\mu_0 = 70\) in diesem Konfidenzintervall enthalten ist: dies ist hier offensichtlich nicht der Fall. Diese Tatsache ist gleichbedeutend mit einem signifikanten Ergebnis des t-Tests für eine Stichprobe.
Auch ein t-Test für unabhängige Stichproben wurde in Kapitel 12 berechnet, um die Hypothese zu testen, dass
jüngere Versuchspersonen einen höheren Wert im Gedächtnistest
(score.in.test3
) erzielen als ältere Versuchspersonen.
Dieser t-Test ergab:
##
## Two Sample t-test
##
## data: score.in.test3 by altersgruppe
## t = 3.5157, df = 28, p-value = 0.0007568
## alternative hypothesis: true difference in means between group 1 and group 2 is greater than 0
## 95 percent confidence interval:
## 8.430097 Inf
## sample estimates:
## mean in group 1 mean in group 2
## 77.66667 61.33333
Auch dieses Ergebnis spricht für die Alternativhypothese: Der Erwartungswert der Population der jüngeren Versuchspersonen ist signifikant größer als der der älteren Versuchspersonen, \(t(28) = 3.52, p = .001, d = 1.28\).
Die Untergrenze des 95% Konfidenzintervalls für den
Mittelwertsunterschied ist 8.430097, die Obergrenze ist
“Inf
” (unendlich). Unter der Nullhypothese ist der
Mittelwertsunterschied Null. Die entscheidende Frage ist also, ob die
Null in diesem Konfidenzintervall enthalten ist: dies ist
nicht der Fall. Diese Tatsache ist gleichbedeutend mit
einem signifikanten Ergebnis des t-Tests für zwei unabhängige
Stichproben.
Auch ein t-Test für abhängige Stichproben wurde in Kapitel 12 berechnet, um die Hypothese zu testen, dass
die Gedächtnisleistung älterer Versuchspersonen nach einem
Gedächtnistraining (score.in.test4
) signifikant besser ist
als zuvor (score.in.test3
):
##
## Paired t-test
##
## data: daten_aelter$score.in.test4 and daten_aelter$score.in.test3
## t = 14.053, df = 14, p-value = 6.01e-10
## alternative hypothesis: true mean difference is greater than 0
## 95 percent confidence interval:
## 10.37941 Inf
## sample estimates:
## mean difference
## 11.86667
Das Ergebnis spricht erneut für die Alternativhypothese: Der Erwartungswert der Population älterer Versuchspersonen nach dem Gedächtnistraining ist signifikant größer als der vor dem Training, \(t(14) = 14.05, p < .001, d = 3.63\).
Die Untergrenze des 95% Konfidenzintervalls für den
Mittelwertsunterschied ist 10.37941, die Obergrenze ist
“Inf
” (unendlich). Unter der Nullhypothese ist der
Mittelwertsunterschied beider Messzeitpunkte Null. Die entscheidende
Frage ist also wieder, ob die Null in diesem Konfidenzintervall
enthalten ist: dies ist nicht der Fall. Diese Tatsache
ist gleichbedeutend mit einem signifikanten Ergebnis des
t-Tests für zwei abhängige Stichproben.
Konfidenzintervalle können auch als Fehlerbalken in Abbildungen verwendet werden und erlauben so inferenzstatistische Beurteilungen.
Im Falle eines signifikanten \(t\)-Tests für zwei unabhängige Stichproben wäre der Mittelwert der einen Gruppe nicht im 95% Konfidenzintervall des Mittelwerts der anderen Gruppe enthalten (mehr dazu hier).
Basierend auf dem \(t\)-Test widmet sich Teil 14 nun dem Komplex von Fehlentscheidungen, Effektstärken und der Berechnung der Power für einen statistischen Test und, damit zusammenhängend, der Berechnung der optimalen Stichprobengröße für eine Studie.
Ein Merkmal, und auch Problem, inferenzstatistischer Entscheidungen ist, dass die Entscheidung, die ein Signifikanztest nahelegt (also für die \(H_1\) oder für die Beibehaltung der \(H_0\)) immer auch falsch sein kann.
Insgesamt gibt es vier verschiedene Kombinationen zwischen dem, was tatsächlich in der Population gilt, und wie wir uns aufgrund des Signifikanztests entscheiden (mehr dazu hier):
In der Population gilt die Nullhypothese \(H_0\):
In der Population gilt die Alternativhypothese \(H_1\):
Effektstärken sind standardisierte Maße, die “Effekte” über verschiedene Studien hinweg vergleichbar machen sollen.
In den schoRsch Outputs der t-Tests in den vorangegangenen Analysen (siehe hier) wird eine Effektstärke für Mittelwertunterschiede gleich mit ausgegeben: Cohen’s \(d\). \[d=\frac{M_A-M_B}{\hat{\sigma}}\]
Die wichtigste Effektstärke für Zusammenhänge ist der Korrelationskoeffizient \(r\), der in Teil 5 eingeführt wurde. \[r_{XY}=\frac{\text{Kov}(X,Y)}{S_X\cdot S_Y},\]
Der Korrelationskoeffizient \(r_{xy}\) wird von der Funktion
cor()
sowie cor.test()
ausgegeben.
In einer empirischen Studie wollen wir beide Fehlerarten, \(\alpha\)-Fehler und \(\beta\)-Fehler, im bestmöglichen Fall kontrollieren, indem wir die maximale Wahrscheinlichkeit ihres Auftretens festlegen. Das heißt, neben dem Signifikanzniveau \(\alpha\) wird auch das maximal zu akzeptierende \(\beta\) vorab festgelegt. Deren Gegenwahrscheinlichkeit \(1-\beta\) wird auch die Power (oder Teststärke) genannt: Die Wahrscheinlichkeit, bei Gültigkeit einer bestimmten Alternativhypothese, ein signifikantes Ergebnis zu erhalten.
Zur Berechnung der Power brauchen wir zusätzlich eine konkrete Annahme zur Größe des Effekts, der aufgedeckt werden soll (die Effektstärke, die hier herangezogen wird, ist z.B. oft aus Vorstudien bzw. der Literatur abgeleitet).
Sind diese drei Parameter, also \(\alpha\), \(1-\beta\) (oder \(\bet\)) und Effektstärke, festgelegt, kann der optimale Stichprobenumfang berechnet werden, um mit der gewünschten Power einen Effekt der angegebenen Größe “aufzudecken”, z.B. für eine geplante Analyse mittels eines t-Tests. Umgekehrt kann aber auch im Nachhinein errechnet werden, welche Power mit der vorhandenen Stichprobengröße ein bereits durchgeführter t-Test hatte, wenn zusätzlich das Signifikanzniveau \(\alpha\) sowie die berechnete Effektstärke beachtet werden.
In beiden Fällen kann dazu die Funktion power.t.test()
genutzt werden. Der jeweils gesuchte Parameter wird dabei auf
NULL
gesetzt.
Nehmen wir an, für die (fiktive) Studie, aus der die Daten im
Datensatz daten_statistik_I.csv
hervorgingen, wurde
nicht vorab der optimale Stichprobenumfang berechnet, d.h. die
Berechnung der Power eines bestimmten Tests wäre im Nachhinein gefragt.
Im Fall des t-Tests für zwei unabhängige Stichproben
(Hypothese: “Jüngere Versuchspersonen erreichen einen höheren Wert im
Gedächtnistest als ältere Versuchspersonen.”) wäre der entsprechende
Aufruf dann:
power.t.test(n = 30, # n ist bekannt (30)
delta = 1.28, sd = 1, # delta ist bekannt (d = 1.28)
sig.level = 0.05, # alpha = 0.05
power = NULL, # 1-beta wird gesucht
type = "two.sample", # unabhängige Stichproben
alternative = "one.sided") # gerichtete H1 (einseitiger Test)
##
## Two-sample t test power calculation
##
## n = 30
## delta = 1.28
## sd = 1
## sig.level = 0.05
## power = 0.9994305
## alternative = one.sided
##
## NOTE: n is number in *each* group
Es zeigt sich, dass die Power hier sehr hoch war: fast 100%.
Die errechnete Effektstärke von \(d\) = 1.28 ist allerdings ebenfalls sehr groß. Um einen Effekt dieser Größe auch mit etwas geringerer Power (z.B. 80%) “aufzudecken”, hätte vermutlich eine kleinere Stichprobe ausgereicht:
power.t.test(n = NULL, # n wird gesucht
delta = 1.28, sd = 1, # delta ist bekannt (d = 1.28)
sig.level = 0.05, # alpha = 0.05
power = 0.8, # 1-beta = 0.8
type = "two.sample", # unabhängige Stichproben
alternative = "one.sided") # gerichtete H1 (einseitiger Test)
##
## Two-sample t test power calculation
##
## n = 8.315874
## delta = 1.28
## sd = 1
## sig.level = 0.05
## power = 0.8
## alternative = one.sided
##
## NOTE: n is number in *each* group
Pro Gruppe hätten \(n\) = 8.315874, bzw. aufgerundet \(n\) = 9 Versuchspersonen ausgereicht, also insgesamt 18 Vpn (statt 30).
Wie groß die Power mindestens sein sollte ist eine inhaltliche Frage und kann nicht pauschal beantwortet werden. Cohen (1988) schlug vor, dass ein Verhältnis von \(\alpha:\beta=1:4\) angestrebt werden sollte, d.h. bei \(\alpha = 0.05\) sollte \(\beta=0.2\) sein bzw. die Power sollte \(1-\beta=0.8\) sein..
Die verschiedenen t-Test, die in Kapitel 12 durchgeführt wurden, sind Beispiele für parametrische Tests. Diese Bezeichnung rührt daher, dass Annahmen über die Verteilung der Daten gemacht werden, insbesondere wird ja angenommen, die Daten seien in der Population normalverteilt (und die abhängige Variable sei intervallskaliert).
Bei sog. non-parametrischen Tests (in Teil 15 behandelt) werden i.W. die gleichen Fragestellungen untersucht, aber es werden keine Annahmen über die Verteilung der Daten an den Anfang gestellt.
Es können also auch dann Zusammenhangs- und Unterschiedshypothesen getestet werden, wenn Normalverteilung in der Population (oder Intervallskalenniveau der abhängigen Variablen) nicht gegeben sind.
Ein Beispiel für einen non-parametrischen Test ist der \(\chi^2\)-Test, der in Kapitel
5 durchgeführt wurde, um den Zusammenhang zwischen den Variablen
altersgruppe
und eigenschaft1
(beide
mindestens nominalskaliert) im Datensatz
daten_statistik_I.csv
zu analysieren.
[Weitere Analysen folgen.]