29  Outputs - ALM - FAQ

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.

29.2 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


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

  • die Signifikanztests der geschätzten Populationskoeffizienten \(\hat b_0\) und \(\hat b_1 ... \hat b_k\) (unserer \(k\) Prädiktoren)
  • den Signifikanztest der insgesamt aufgeklärten Varianz des gesamten Regressionsmodells \(R^2\)

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

  • Estimate : Schätzung der (Populations-)Regressionskoeffizienten
    • (Intercept): vorhergesagter Wert des Kriteriums wenn alle Prädiktoren 0 sind (bei metrischen Prädiktoren) bzw. vorhergesagter Wert des Kriteriums in den jeweiligen Referenzgruppen (bei kategorialen Prädiktoren); Wert von zf_belastung in der Referenzgruppe job == ja
    • jobnein: Steigungskoeffizient, der die erwartete Veränderung im Kriterium angibt, wenn der Prädiktor um eine Einheit erhöht wird (bei metrischen Prädiktoren) bzw. in (einer) der Vergleichsgruppen (bei kategorialen Prädiktoren); Unterschied von job == nein im Vergleich zur Referenzgruppe job == ja im Hinblick auf zf_belastung
  • Std.Error : Standardfehler des Regressionskoeffizienten
  • t.value : empirischer \(t\)-Wert für die Signifikanztestung des (partiellen) Regressionskoeffizienten
  • Pr(>|t|) : in \(p\)-Wert umgerechneter empirischer \(t\)-Wert
  • Sign.codes : durch Sternchen gekennzeichnete Signifikanzniveaus der geschätzten Regressionskoeffizienten

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:

  • Residual Standard Error : Standardschätzfehler \(s_e\)
    Gütemaß für die Genauigkeit der Regressionsvorhersage
  • Multiple R-squared : Determinationskoeffizient \(R^2\)
    Gütemaß für die Schätzgenauigkeit
  • Adjusted R squared : korrigierter Determinationskoeffizient \(R_{korr}^2\); gilt durch Korrektur der Freiheitsgrade als erwartungstreuer Schätzer für die Population
  • F-statistic : empirischer Wert des \(F\)-Tests des Determinationskoeffizienten \(R^2\) (d.h. des Gesamtmodells) mit Anzahl der Zähler- (\(k\)) und Nenner-Freiheitsgrade (\(N-k-1\)) der \(F\)-Verteilung mit zugehörigem \(p\)-Wert.

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.

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

Der Output liefert die folgenden Informationen für den Gruppierungsfaktor (job) und für die Residuen (Residuals):

  • Df : Anzahl der Freiheitsgrade der \(F\)-Verteilung
    • … des Gruppierungsfaktor: \(df_{job} = p - 1\)
    • … der Residuen: \(df_{e} = N-p\)
  • Sum Sq : Quadratsumme
    • … des Gruppierungsfaktors (“Treatmentquadratsumme”)
    • … der Residuen (“Fehlerquadratsumme”)
  • Mean Sq : Mittlere Quadratsumme (MQ)
    relativieren die Quadratsumme eines Effekts an seinen Freiheitsgraden
  • F value : empirische Prüfgröße des \(F\)-Tests
    entspricht dem Quotienten \(\frac {MQ_{job}} {MQ_e}\)
  • Pr(>F) : in \(p\)-Wert umgerechneter empirischer \(F\)-Wert

Unser \(p\)-Wert deutet darauf hin, dass unter Gültigkeit der \(H_0\) die Wahrscheinlichkeit, den vorliegenden \(F\)-Wert von 1.633 oder einen größeren zu erhalten, 20,3% beträgt. Wir kommen somit zu der Testentscheidung, die \(H_0\) beizubehalten. Das bedeutet, dass wir davon ausgehen, dass zwischen den Populationen von Studierenden mit und ohne Nebenjob keine überzufälligen Mittelwertsunterschiede bezüglich der Zufriedenheit mit der Bewältigung von Studienbelastungen existieren.

29.4 ALM: Zusammenhänge der drei Verfahren

Wie bereits eingangs erwähnt, gehören \(t\)-Test, lineare Regression und ANOVA alle zum Allgemeinen Linearen Modell (ALM).

Für den hier betrachteten Spezialfall von nur einer UV mit nur zwei Stufen (und adäquater Kodierung; siehe z.B. Indikatorvariablen: Kodierung nominaler Merkmale aus dem Kapitel Datenvorbereitung) kommen die drei Verfahren zum selben Ergebnis bei der Signifikanztestung, obwohl scheinbar andere Hypothesen getestet werden.

Empirische Prüfgröße
Verfahren getestete Hypothesen \(t\) \(F\) \(p\)
\(t\)-Test für unabhängige Stichproben

Mittelwertsunterschied in den Gruppen

\(H_0\): \(\mu_1 = \mu_2\)

\(H_1\): \(\mu_1 \neq \mu_2\) (ungerichtet)

-1.278 0.203
einfache lineare Regression

Steigungskoeffizient \(b_1\)

\(H_0\): \(\beta_1 = 0\)

\(H_1\): \(\beta_1 \neq 0\) (ungerichtet)

1.278 0.203

Determinationskoeffizient \(R^2\)

\(H_0\): \(\rho^2 = 0\)

\(H_1\): \(\rho^2\) > \(0\) (gerichtet)

1.633 0.203
ANOVA

Mittelwertsunterschied in den Gruppen

\(H_0\): \(\mu_1 = \mu_2\)

\(H_1\): \(\mu_1 \neq \mu_2\) (ungerichtet)

1.633 0.203

Wir können \(t\)- und \(F\)-Werte ineinander überführen durch folgende Formel: \(F = t^2 \longrightarrow t^2=1.278^2=1.633=F\).

Achtung: Dass der \(t\)-Wert einmal negativ (\(t\)-Test) und einmal positiv (einfache lineare Regression) ist liegt daran, dass die Gruppen jeweils vertauscht wurden.

Das Allgemeine Lineare Modell (ALM) umfasst varianzanalytische Verfahren sowie (multiple) Korrelations- und Regressionsrechnung. Dadurch können nicht nur metrische sondern auch kategoriale Merkmale (als \(UV\)s) untersucht werden, sofern die kategorialen Merkmale in geeigneter Form kodiert sind.

In unserem Fall von einer intervallskalierten \(AV\) und einer nominalskalierten \(UV\) werden in den drei Verfahren jeweils die Mittelwerte der \(AV\) für die jeweiligen \(UV\) gebildet. Beim \(t\)-Test und der einfachen linearen Regression haben wir diese auch ausgegeben bekommen:

  • \(t\)-Test:
    mean in group ja \(= 2.67\)
    mean in group nein \(= 2.80\)
  • Einfache lineare Regression:
    \(Intercept = 2.67\)
    \(b_1 = 0.131\)
    \(Intercept + b_1 = 2.81\)

Dadurch sind die getesteten Hypothesen der drei Verfahren in diesem speziellen Fall (\(AV\): intervallskaliert, \(UV\): nominalskaliert) äquivalent.


Um eine möglichst exakte Replikation der Funktionen zu gewährleisten gibt es im folgenden relevante Angaben zum System (R-Version, Betriebssystem, geladene Pakete mit Angaben zur Version), mit welchem diese Seite erstellt wurde.

sessionInfo()
R version 4.4.1 (2024-06-14)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 22.04.4 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so;  LAPACK version 3.10.0

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

time zone: Etc/UTC
tzcode source: system (glibc)

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] car_3.1-3     carData_3.0-5 ggplot2_3.5.1

loaded via a namespace (and not attached):
 [1] vctrs_0.6.5       cli_3.6.3         knitr_1.48        rlang_1.1.4      
 [5] xfun_0.48         Formula_1.2-5     generics_0.1.3    jsonlite_1.8.9   
 [9] labeling_0.4.3    glue_1.8.0        colorspace_2.1-1  htmltools_0.5.8.1
[13] scales_1.3.0      fansi_1.0.6       rmarkdown_2.28    grid_4.4.1       
[17] abind_1.4-8       evaluate_1.0.1    munsell_0.5.1     tibble_3.2.1     
[21] fastmap_1.2.0     yaml_2.3.10       lifecycle_1.0.4   compiler_4.4.1   
[25] dplyr_1.1.4       htmlwidgets_1.6.4 pkgconfig_2.0.3   farver_2.1.2     
[29] digest_0.6.37     R6_2.5.1          tidyselect_1.2.1  utf8_1.2.4       
[33] pillar_1.9.0      magrittr_2.0.3    withr_3.0.1       tools_4.4.1      
[37] gtable_0.3.5     

Für Informationen zur Interpretation dieses Outputs schaut auch den Abschnitt Replizierbarkeit von Analysen des Kapitels zu Paketen an.