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 .

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:

  • v1.0: erste online-gestellte Version (27.10.2023)

1 Einführung: Deskriptive Statistik und Inferenzstatistik

In Teil 1 werden Grundlagen der Vorgehensweise erarbeitet. Unter anderem wird eingeführt, was der wichtige Unterschied zwischen Deskriptiver Statistik und Inferenzstatistik ist.

2 Mengen, Schreibweisen und das Summenzeichen

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

3 Deskriptive Statistik 1: Häufigkeiten

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.

4 Deskriptive Statistik 2: Lagemaße und Variabilität

Teil 4 widmet sich entsprechend weiter der Deskriptiven Statistik und behandelt Maße der Zentralen Tendenz und der Variabilität.

4.1 Maße der zentralen Tendenz

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.

4.2 Maße der Datenvariabilität

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

5 Zusammenhänge

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

5.1 Der \(\chi^2\)-Koeffizient bei nominalskalierten Daten:

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

5.2 Zusammenhangsmaße bei intervallskalierten Daten

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.

5.2.1 Kovarianz

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.

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

5.2.3 Kovarianz- und Korrelationsmatrizen

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

5.3 Weitere Zusammenhangsmaße

Korrelationen können auch berechnet werden, wenn (mindestens eine der) Variablen nicht intervallskaliert sind.

5.3.1 Zusammenhangsmaße bei ordinalskalierten Daten

Siehe hierzu Teil 5 im Skript zur Vorlesung Statistik 1.

5.3.2 Punktbiseriale Korrelation

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

6 Einfache lineare Regression

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:

  • Die vorhergesagte Variable (oft \(Y\) bzw. \(\hat{Y}\)) wird als Kriterium bezeichnet.
  • Die zur Vorhersage genutzte Variable (bei der einfachen linearen Regression oft \(X\)) wird als Prädiktor bezeichnet.
  • Als Regressionsgleichung bezeichnet man die optimale Funktion zur Regression des Kriteriums auf den Prädiktor. Das Kriterium wird also auf den Prädiktor (bzw. die Prädiktoren; siehe Statistik 2) zurückgeführt.

6.1 Einfache lineare Regression mit R

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.

6.2 Partialkorrelation

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

7 Einführung in die Inferenzstatistik

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

8 Grundlagen der Stochastik

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.

9 Zufallsvariablen und Verteilungen

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.

10 Punktschätzung

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.

11 Logik des Hypothesentestens

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.

12 Die Familie der t-Tests

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.

12.1 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:

  • Beide Stichproben wurden zufällig und unabhängig voneinander gezogen.
  • Das gemessene Merkmal ist mindestens intervallskaliert.
  • Das gemessene Merkmal ist in der Population bzw. den Populationen normalverteilt.
  • Die Varianz beider Populationen ist identisch. Dies wird als “Varianzhomogenität” bezeichnet.

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

12.2 t-Test für eine Stichprobe

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.

12.3 t-Test für zwei abhängige Stichproben

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

13 Intervallschätzung

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.

13.1 Konfidenzintervall des Mittelwerts

13.1.1 Eine Stichprobe

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.

13.2 Konfidenzintervall von Mittelwertunterschieden

13.2.1 Unabhängige Stichproben

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.

13.2.2 Abhä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.

13.3 Verwendung in Abbildungen

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

14 Fehlertypen, Effektstärken, Power

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.

14.1 Fehlertypen

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\):

  • Entscheidung für die Beibehaltung der \(H_0\): richtige Entscheidung
  • Entscheidung für die Alternativhypothese \(H_1\): Fehler 1. Art / \(\alpha\)-Fehler

In der Population gilt die Alternativhypothese \(H_1\):

  • Entscheidung für die Beibehaltung der \(H_0\): Fehler 2. Art / \(\beta\)-Fehler
  • Entscheidung für die Alternativhypothese \(H_1\): richtige Entscheidung

14.2 Effektstärken

Effektstärken sind standardisierte Maße, die “Effekte” über verschiedene Studien hinweg vergleichbar machen sollen.

14.2.1 Effektstärken für Mittelwertunterschiede

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}}\]

14.2.2 Effektstärken für Zusammenhänge

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.

14.3 Power

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

15 Non-parametrische Tests

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