FAQ

Wie interpretiere ich den Output von t-Test, linearer Regression und ANOVA?
Letzte Änderung am 31. August 2020

Das Allgemeine Lineare Modell (ALM) umfasst verschiedene inferenzstatistische und varianzanalytische Verfahren, darunter \(t\)-Test (t.test()), ANOVA (aov()) und lineare Regression (lm()).

Im Folgenden schauen wir uns an, wie die Outputs der jeweiligen Funktionen t.test(), aov() und lm() aufgebaut sind und wie diese interpretiert werden. Dafür nutzen wir jeweils dieselben zwei Variablen. Wir werden zudem vor der Durchführung der Methoden deren Annahmen prüfen. Abschließend beschäftigen wir uns mit den Gemeinsamkeiten der Verfahren (für unseren speziellen Fall von einer metrischen abhängigen Variablen und einer kategorialen unabhängigen Variablen).

Beispieldatensatz für dieses Kapitel

Wir schauen uns im folgenden den Datensatz erstis an. Dieser enthalt Daten aus einer Erhebung mit Erstsemesterstudierenden der Psychologie. Das zugehörige Codebook finden wir hier.

Den Datensatz laden wir mit der load()-Funktion in unsere Environment:


load(url("http://www.beltz.de/fileadmin/beltz/downloads/
         OnlinematerialienPVU/R_fuer_Einsteiger/erstis.rda"))
# Zeilenumbruch zwischen der ersten und zweiten Zeile noch entfernen!

Wir wollen untersuchen, ob sich das Vorhandenseins eines Nebenjobs (job) auf die Zufriedenheit mit der Bewältigung von Studienbelastungen (zf_belastung, erster Messzeitpunkt) auswirkt.

Dazu speichern wir beide Variablen in einem neuen Datensatz.


# Daten aus erstis in neuem Dataframe speichern und umbennenen
daten <- data.frame(job = erstis$job, zf_belastung = erstis$zuf.bel.1)

Wir müssen außerdem noch überprüfen, ob die Variablen entsprechend ihres Messniveaus kodiert sind:


str(daten)

'data.frame':   191 obs. of  2 variables:
 $ job         : Factor w/ 2 levels "ja","nein": 2 1 1 2 2 1 NA NA NA 2 ...
 $ zf_belastung: num  1.33 2.67 3.67 2.33 NA ...

Wie erhofft liegt die nominalskalierte Variable job als ungeordneter Faktor und die intervallskalierte Variable zf_belastung als numeric vor.

Mehr Informationen zu Datentypen und angemessener Kodierung finden wir im Kapitel Einführung in R.


Der \(t\)-Test untersucht, ob es signifikante Mittelwertsunterschiede in der Population hinsichtlich einer metrischen Variablen gibt. Der Begriff umfasst eine Gruppe von Hypothesentests, darunter den \(t\)-Test für unabhängige Stichproben und den \(t\)-Test für abhängige Stichproben (Beobachtungspaare).

In unserem Beispiel schauen wir, ob sich Personen mit und ohne Nebenjob (job) hinsichtlich der Zufriedenheit mit der Bewältigung von Studienbelastungen (zf_belastung) unterscheiden.

Weil es sich bei Studierenden mit und ohne Nebenjob um zwei voneinander unabhängige Stichproben (d.h. unterschiedliche Personen) handelt, verwenden wir den \(t\)-Test für unabhängige Stichproben.

Überprüfung der Annahmen des \(t\)-Tests


An dieser Stelle sei wieder auf das ausführlichere Skript zur Annahmenprüfung verwiesen. Im Folgenden schauen wir uns jeweils nur ein mögliches Verfahren zur Überprüfung der spezifischen Annahmen an.


Zur Durchführung eines \(t\)-Tests für unabhängige Zufallsstichproben müssen folgende Annahmen erfüllt sein:

  • es muss sich um einfache, voneinander unabhängige Stichproben handeln
  • Normalverteilung des untersuchten Merkmals in beiden Populationen
  • Varianzhomogenität des untersuchten Merkmals in beiden Populationen


Normalverteilung

Schauen wir uns dazu jeweils für beide Gruppen von job einen QQ-Plot an.


library(ggplot2)
ggplot(data = daten, aes(sample = zf_belastung)) + # Koordinatensystem
  stat_qq() + stat_qq_line() + # QQ-Plot + Hilfslinie
  facet_grid(~ job) # einzelne Plots nach den Ausprägungen von job


# die Kategorie NA fasst die fehlenden Werte auf der Variablen job zusammen
# diese können wir hier unbeachtet lassen

Mehr Informationen zum Erstellen von Grafiken mit dem Paket ggplot2 finden wir im Kapitel zu Grafiken.

Hilfe zur Interpretation von QQ-Plots finden wir hier.
Hinweis: Die Residuen in der linearen Regression sind beim \(t\)-Test dasselbe wie in den Gruppen zentrierte Werte der \(AV\) (d.h. Abweichungen vom gruppenspezifischen Mittelwert) in unserem Beispiel.


In beiden Diagrammen weichen die Punkte leicht von der Linie ab, d.h. dass die Daten nicht perfekt normalverteilt sind. Wir können uns aber auf den zentralen Grenzwertsatz stützen, welcher besagt, dass der Mittelwert eines Merkmals bei wachsender Stichprobengröße approximativ normalverteilt ist. Generell gibt es keinen Richtwert, der besagt, wann Stichproben hinreichend groß sind. Mit unseren Stichprobengrößen (\(n_{ja} = 87\) und \(n_{nein} = 86\)) und den geringfügigen Abweichungen von einer Normalverteilung in den beiden Gruppen können wir erwarten, dass die Annahme hinreichend erfüllt ist.

Varianzhomogenität

Varianzhomogenität bedeutet, dass die Varianzen in den untersuchten Populationen gleich sind. Wenn dies der Fall ist, sollten sich auch die Stichprobenvarianzen ähneln.

Ist diese Annahme nicht erfüllt, müssen wir auf robustere Methoden, z.B. den Welch’s \(t\)-Test für unabhängige Stichproben, zurückgreifen.

Zur Überprüfung der Varianzhomogenität können wir beispielsweise den Levene Test nutzen. In diesem wird die Nullhypothese überprüft, dass die Populationsvarianzen homogen sind (\(\sigma^2_{ja} = \sigma^2_{nein}\)). Weil die \(H_0\) die Wunschhypothese ist, ist es von größerer Relevanz, diese nicht fälschlicherweise abzulehnen, d.h. einen \(\beta\)-Fehler zu machen (relativ gesehen zum \(\alpha\)-Fehler). Wir können das Risiko für einen \(\beta\)-Fehler nur indirekt kontrollieren, indem wir das \(\alpha\)-Level erhöhen. Daher legen wir unser Signifikanzniveau auf \(\alpha=.20\) (zweiseitig) fest.

Wir führen den Test mit der Funktion leveneTest() aus dem Paket car durch.


library(car)
leveneTest(zf_belastung ~ job, daten)

Levene's Test for Homogeneity of Variance (center = median)
       Df F value Pr(>F)
group   1   0.807 0.3703
      167               

Da der \(p\)-Wert (Pr(>F)) größer als unser \(\alpha\)-Level ist, können wir die \(H_0\) beibehalten.

Nachdem die Annahmen weitgehend erfüllt erscheinen, können wir den \(t\)-Test für unabhängige Stichproben anwenden.


Mit der Funktion t.test() aus dem Basispaket stats können unterschiedliche Arten von \(t\)-Tests durchgeführt werden. Welches Verfahren verwendet werden soll, legen wir mit den Parametern paired und var.equal fest.

Wir wollen einen ungerichteten \(t\)-Test für unabhängige Stichproben durchführen und legen unser Signifikanzlevel \(\alpha=.05\) fest.


t.test(formula = zf_belastung ~ job, 
       data = daten,
       paired = FALSE, # unabhängige SP
       var.equal = TRUE, # Annahme Varianzhomogenität erfüllt
       alternative ="two.sided", # zweiseitige (ungerichtete) Testung
       na.action = "na.exclude") # Ausschluss fehlender Werte

Wir erhalten u.a. folgende Informationen:

Wir kommen wir auf \(N=169\)?

Wir haben alle Fälle mit fehlenden Werten auf einer der beiden Variablen ausgeschlossen (casewise deletion durch na.action = "na.exclude"). Wir können diese Bedingung folgendermaßen auf unseren Datensatz anwenden, um \(N\) für unsere spezifische Analyse zu berechnen:


nrow(daten[!is.na(daten$job) & !is.na(daten$zf_belastung),])

[1] 169

Für mehr Informationen siehe das Kapitel zu Fehlenden Werten.

Durch Betrachtung des \(p\)-Wertes stellen wir fest, dass die Wahrscheinlichkeit unter Gültigkeit der \(H_O\), einen empirischen \(t\)-Wert von \(\mid -1.278 \mid\) oder extremer zu erhalten, bei 20.3% liegt. Da dieser \(p\)-Wert deutlich über \(\alpha=.05\) liegt, behalten wir die Nullhypothese bei. Wir gehen davon aus, dass Studierende mit und ohne Nebenjob sich nicht statistisch signifikant in ihrer Zufriedenheit mit der Bewältigung von Studienbelastungen unterscheiden.

Lineare Regression

Die lineare Regression ermöglicht es, eine abhängige Variable (AV, Kriterium) durch eine oder mehrere unabhängige Variablen (UVs, Prädiktoren) vorherzusagen. Das Kriterium muss metrisch sein, wohingegen die Prädiktoren auch kategorial sein können, wenn sie adäquat kodiert sind (siehe z.B. Indikatorvariablen: Kodierung nominaler Merkmale im Kapitel Datenvorbereitung).

Wir führen eine einfache lineare Regression durch, in der wir die Zufriedenheit mit der Bewältigung von Studienbelastungen (zf_belastung) auf das Vorhandensein eines Nebenjobs (job) zurückführen.

Wir legen unser Signifikanzlevel auf \(\alpha=.05\) fest.

Bei der linearen Regression ist die sogenannte Residualdiagnostik ein essentieller Teil der Annahmenprüfung. Allerdings müssen wir dafür die Regression bereits durchgeführt haben. Wir können die Annahmenprüfung also erst nach der Regression machen.

Mit der Funktion lm() aus dem Basispaket stats können wir eine lineare Regression durchführen.


lm_belastung <- lm(formula = zf_belastung ~ job,
                   data = daten, 
                   na.action = "na.exclude") # Ausschluss fehlender Werte

Mehr Informationen zum Umgang mit fehlenden Werten finden wir im Kapitel Fehlende Werte.

Das Ergebnisobjekt lm_belastung schauen wir uns erst nach der Annahmenprüfung an.

Überprüfung der Annahmen der (einfachen) linearen Regression


Im Rahmen dieses Kapitels besprechen wir die Annahmen und deren Überprüfung nicht im Detail. Mehr Informationen finden wir im Kapitel zur Prüfung der Annahmen der multiplen linearen Regression, die denen der einfachen linearen Regression sehr ähnlich ist.


Folgende vier Annahmen sind bei der einfachen linearen Regression mit der inferenzstatistischen Absicherung verbunden:

  • Linearität
  • Homoskedastizität
  • Normalverteilung der Residuen
  • Unabhängigkeit der Residuen


Linearität

Die Abhängigkeit zwischen Erwartungswert des Kriteriums und Prädiktor ist linear.

Diese Annahme lässt sich mittels eines Residualplots untersuchen. Dieser plottet die vorhergesagten Kriteriumswerte \(\hat y_i\) gegen die Residuen \(\hat e_i\).


plot(lm_belastung, which=1)

Weil wir nur eine kategoriale \(UV\) mit zwei Ausprägungen haben, ordnen sich die Punkte in zwei vertikalen Linien an.

Da sich die Lowess Fit Line (rote gestrichelte Linie), welche den generellen (nonparametrischen) Trend der Daten beschreibt, dem Erwartungswert der Residuen bei \(y=0\) (schwarze gestrichelten Linie) annähert, können wir annehmen, dass Linearität vorliegt.

Mehr Informationen zur Lowess Fit Line und zum Residuenplot finden wir im Kapitel zur Prüfung der Annahmen der multiplen linearen Regression.

Homoskedastizität

Die Varianz der \(y\)-Werte, die an einer bestimmten Stelle des Prädiktors vorliegt, ist für alle Prädiktorwerte gleich (Varianzhomogenität).

Diese haben wir bereits im Abschnitt zum \(t\)-Test mittels des Levene-Tests überprüft.

Den Residualplot, den wir gerade zur Überprüfung der Annahme der Linearität genutzt haben, können wir auch zur Überprüfung der Annahme der Homoskedatizität nutzen. Weil die Residuen sich ohne erkennbares Muster um den Erwartungswert der Residuen bei \(y=0\) (schwarze gestrichelten Linie) verteilen, nehmen wir Homoskedastizität an.

Normalverteilung der Residuen

Die Verteilung der \(y\)-Werte an einer bestimmten Stelle der \(UV\) ist eine Normalverteilung.

Eine Verletzung dieser Annahme ist eher in kleineren Stichproben problematisch. In großen Stichproben sind die Regressionskoeffizienten aufgrund des zentralen Grenzwertsatzes selbst dann asymptotisch normalverteilt, wenn die Annahme nicht erfüllt ist. Es gibt jedoch keinen Richtwert, ab wann eine Stichprobe als hinreichend groß gilt. Wir sollten die Annahme immer überprüfen. Dazu schauen wir uns einen QQ-Plot der Residuen an.


plot(lm_belastung, which=2)

Unser Kriterium Zufriedenheit mit der Bewältigung von Studienbelastungen scheint in Abhängigkeit der Gruppenzugehörigkeit leicht von einer Normalverteilung abzuweichen. Die Größe unserer Stichprobe, \(N = 169\), legt nahe, dass (nach dem zentralen Grenzwertsatz) die Regressionskoeffizienten approximativ normalverteilt sind und der Standardfehler der Steigung nicht verzerrt ist.

Unabhängigkeit der Residuen

Die Höhe des Residuums einer Beobachtung ist unabhängig von der Höhe des Residuums einer anderen Beobachtung.

Serielle Abhängigkeit, d.h. mehrere Messungen von einer Person, können wir ausschließen, da es sich nicht um ein Messwiederholungs-Design handelt.

Zur Überprüfung auf Clustering, d.h. systematische Zusammenhänge zwischen Personen einer Gruppe, müssten wir im Verdacht stehende (erhobene) Gruppenvariablen begutachten. Da dies aber den Rahmen dieses Kapitels sprengen würde, lassen wir das außen vor.

Da wir keine Hinweise auf Verletzung der Annahmen gefunden haben, schauen wir uns nun die Ergebnisse der einfachen linearen Regression an.


Wir schauen uns die Ergebnis unseres Regressionsmodells mittels summary() an:


summary(lm_belastung)

Der Output sagt uns, inwiefern wir Zufriedenheit mit der Bewältigung von Studienbelastungen mit dem Vorliegen eines Nebenjobs vorhersagen können.

Wir bekommen Auskunft über:

In unserem Fall einer einfachen linearen Regression sind die Ergebnisse der Signifikanztestung von Schätzung der Steigung und Schätzung der Varianzaufklärung des Gesamtmodells identisch.

Unter Coefficients finden wir Informationen zu den geschätzten Regressionskoeffizienten - Intercept und Steigungskoeffizient(en):

Der Intercept \(b_0 = 2.679\) gibt uns den Mittelwert der Personen mit Nebenjob (job == "ja", Referenzgruppe) auf der Skala von Zufriedenheit mit der Bewältigung von Studienbelastungen (zf_belastung) an. Wir gelangen durch Betrachtung von \(p < 2^{-16}\) zu der Testentscheidung, die \(H_0\), dass der Intercept in der Population 0 ist, abzulehnen.

Der Steigungskoeffizient \(b_1 = 0.131\) sagt uns, dass Personen ohne Nebenjob (job == "nein") sich im Mittel 0.131 Punkte höher auf der Skala von Zufriedenheit mit der Bewältigung von Studienbelastungen (zf_belastung) beschreiben. Zudem gelangen wir durch Betrachtung von \(p = 0.203\) zu der Testentscheidung, die \(H_0\), dass der Populationskoeffizient \(\beta_1 = 0\) ist, beizubehalten.

Im unteren Abschnitt finden wir Informationen bezüglich des Gesamtmodells:

Der Determinationskoeffizienten \(R^2 = 0.009685\) sagt aus, dass in unserer Stichprobe knapp 1% der Variation in der Zufriedenheit mit der Bewältigung von Studienbelastungen (zf_belastung) durch das Vorhandensein eines Nebenjobs (job) erklärt werden kann. Wir können die \(H_0\), dass der Determinationskoeffizient in der Population \(0\) ist (\(\rho^2 = 0\)), durch Betrachtung von \(p = 0.203\) beibehalten.

ANOVA

Eine ANOVA (Analysis of Variance) überprüft den Einfluss von einer bzw. mehreren kategorialen unabhängigen Variablen (UVs, Faktoren) mit \(p\) Faktorstufen auf eine metrische abhängige Variable (AV). Dazu wird eine Varianzdekomposition durchgeführt, welche die Gesamtvarianz in systematische und Fehlervarianz zerlegt.

Wir wollen in unserem Beispiel überprüfen inwiefern Unterschiede in der Zufriedenheit mit der Bewältigung von Studienbelastungen (zf_belastung) auf das Vorhandensein eines Nebenjobs (job) zurückzuführen ist.

Wir haben ein minimal unbalanciertes Design, weil die Anzahl der Beobachtungen in den Faktorstufen von job sich geringfügig unterscheiden mit \(n_{ja} = 87\) und \(n_{nein} = 86\).

Unser Signifikanzlevel legen wir auf \(\alpha=.05\) fest.

Überprüfung der Annahmen der ANOVA

Vor der Durchführung der ANOVA mit unseren Beispieldaten müssen wir zwei Annahmen prüfen:

  • Normalverteilung des untersuchten Merkmals in beiden Populationen
  • Homoskedastizität des untersuchten Merkmals in beiden Populationen


Beides haben wir im Rahmen der Durchführung des \(t\)-Test bereits untersucht und Evidenz dafür gefunden.


Zur Durchführung der ANOVA verwenden wir die aov()Funktion.


anova <- aov(zf_belastung ~ job, 
             data = daten, 
             na.action = "na.exclude") # Ausschluss fehlender Werte
summary(anova)