[Courtesy of pxhere](https://pxhere.com/en/photo/1293359) Courtesy of pxhere

Zweifaktorielle ANOVA - Lösung

2-fakt. ANOVA Lösungen

Vorbereitung

Bitte laden Sie den folgenden Datensatz welcher Items aus einem Machiavellismus-Fragebogen enthält herunter, um die nachfolgende Aufgabe zu lösen. Der Datensatz enthält viele Angaben zur Persönlichkeit und demografischen Daten. Kern ist aber der 20 Items umfassende Machiavellismusfragebogen von Christie und Geis (1970) und die daraus ableitbare 4-faktorielle Struktur des Konzepts (Corral & Calvete, 2000).

# Datensatz laden
load(url("https://pandar.netlify.app/daten/mach.rda"))

Weiterhin werden für die Ausführung der Aufgaben die Pakete afex und emmeans empfohlen. Eventuell müssen diese installiert werden.

# Paket für Anova-Durchführung
# Paket installieren falls nicht vorhanden
if (!requireNamespace("afex", quietly = TRUE)) {
  install.packages("afex")
}
if (!requireNamespace("emmeans", quietly = TRUE)) {
  install.packages("emmeans")
}

In jedem Fall müssen sie aktiviert werden.

# Paket laden 
library(afex)
library(emmeans)

Aufgabe 1: Variablen aufbereiten

Erstellen Sie zunächst für die Variablen education und urban jeweils einen Faktor. Für education ist die Codierung 1 = Less than High School, 2 = High School, 3 = University degree und4 = Graduate degree. Für urban ist es 1 = Rural (country side), 2 = Suburban und 3 = Urban (city, town).

Lösung
mach$education_fac <- factor(mach$education, levels=1:4, labels=c("Less than High School", "High School", "University degree", "Graduate degree"))
mach$urban_fac <- factor(mach$urban, levels = 1:3, labels = c("Rural", "Suburban", "Urban"))

Aufgabe 2: Deskriptivstatistik & folgende Erwartungshaltung

Betrachten Sie nun nach der Erstellung der Faktoren deskriptistatistisch, welchen Effekt Bildung und Ländlichkeit des Wohnortes auf negative zwischenmenschliche Taktiten nit haben. Hierbei interessieren uns sowohl Unterschiede zwischen den Stufen, als auch mögliche Interaktionseffekte.

LösungDie Mittelwerte für alle Gruppenkonstellationen kann man beispielsweise mit `aggregate` erstellen lassen.
aggregate(nit ~ education_fac + urban_fac, mach, mean)
##            education_fac urban_fac      nit
## 1  Less than High School     Rural 3.491461
## 2            High School     Rural 3.440724
## 3      University degree     Rural 3.295031
## 4        Graduate degree     Rural 3.224247
## 5  Less than High School  Suburban 3.564225
## 6            High School  Suburban 3.484743
## 7      University degree  Suburban 3.316169
## 8        Graduate degree  Suburban 3.201780
## 9  Less than High School     Urban 3.607052
## 10           High School     Urban 3.530450
## 11     University degree     Urban 3.454017
## 12       Graduate degree     Urban 3.413716
aggregate(nit ~ urban_fac + education_fac, mach, mean)
##    urban_fac         education_fac      nit
## 1      Rural Less than High School 3.491461
## 2   Suburban Less than High School 3.564225
## 3      Urban Less than High School 3.607052
## 4      Rural           High School 3.440724
## 5   Suburban           High School 3.484743
## 6      Urban           High School 3.530450
## 7      Rural     University degree 3.295031
## 8   Suburban     University degree 3.316169
## 9      Urban     University degree 3.454017
## 10     Rural       Graduate degree 3.224247
## 11  Suburban       Graduate degree 3.201780
## 12     Urban       Graduate degree 3.413716

Eine Betrachtung der Werte lässt, besonders gegeben der Anzahl an Beobachtungen, mögliche Haupteffekte und Interaktionen zwischen und auf beiden Faktoren vermuten.

Aufgabe 3: Zweifaktorielle ANOVA

Führen Sie die zweifaktorielle ANOVA durch. Interpretieren Sie den Output. Welcher Quadratsummentyp eignet sich für die Untersuchung der Haupteffekte?

LösungFür die Durchführung der ANOVA können wir das Paket `afex` nutzen. Zunächst muss die Variable `id` erstellt werden, die für jede Person eine eindeutige ID enthält.
mach$id <- 1:nrow(mach)

ano_zwei_fakt <- aov_4(nit ~ education_fac + urban_fac + education_fac * urban_fac+ (1|id), data = mach, type = 3)
## Contrasts set to contr.sum for the following variables: education_fac, urban_fac
summary(ano_zwei_fakt)
## Anova Table (Type 3 tests)
## 
## Response: nit
##                         num Df den Df    MSE        F       ges    Pr(>F)    
## education_fac                3  65139 1.1305 139.1722 0.0063688 < 2.2e-16 ***
## urban_fac                    2  65139 1.1305  77.6364 0.0023780 < 2.2e-16 ***
## education_fac:urban_fac      6  65139 1.1305   8.1254 0.0007479 8.423e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Da auch die Interaktion signifikant ist, nutzen wir hier die Quadratsummen des Typ 3.

Aufgabe 4: Post-Hoc: Spezifische Gruppenunterschiede

Stellen sie nun Kontraste für folgende Gruppenvergleiche auf: Für ländliche Lage: “Rural vs Rest” “Suburban vs Urban

sowie für Bildung: “Less than Highschool vs Rest” “Highschool vs University degree & Graduate degree” “University degree vs Graduate degree”.

Beschreiben Sie kurz die Ergebnisse jedes Kontrasts.

Lösung
emm_zweifakt <- emmeans(ano_zwei_fakt, ~ education_fac + urban_fac + education_fac:urban_fac)

# Stadt-Land Kontraste
contrast(emm_zweifakt,
  method = list(
    "Rural vs Rest" =
      c( 2, 2, 2, 2,
        -1,-1,-1,-1,
        -1,-1,-1,-1)
  ))
##  contrast      estimate     SE    df t.ratio p.value
##  Rural vs Rest   -0.669 0.0998 65139  -6.707 <0.0001
contrast(emm_zweifakt,
  method = list(
    "Suburban vs Urban" =
      c(0,0,0,0,
        1,1,1,1,
       -1,-1,-1,-1)
  ))
##  contrast          estimate     SE    df t.ratio p.value
##  Suburban vs Urban   -0.438 0.0419 65139 -10.473 <0.0001
# Bildungskontraste
contrast(emm_zweifakt,
  method = list(
    "Less vs Higher" =
      c( 3,-1,-1,-1,
         3,-1,-1,-1,
         3,-1,-1,-1)
  ))
##  contrast       estimate    SE    df t.ratio p.value
##  Less vs Higher     1.63 0.136 65139  11.957 <0.0001
contrast(emm_zweifakt,
  method = list(
    "High vs Uni+Grad" =
      c(0, 2,-1,-1,
        0, 2,-1,-1,
        0, 2,-1,-1)
  ))
##  contrast         estimate     SE    df t.ratio p.value
##  High vs Uni+Grad     1.01 0.0582 65139  17.303 <0.0001
contrast(emm_zweifakt,
  method = list(
    "Uni vs Grad" =
      c(0,0,1,-1,
        0,0,1,-1,
        0,0,1,-1)
  ))
##  contrast    estimate     SE    df t.ratio p.value
##  Uni vs Grad    0.225 0.0386 65139   5.844 <0.0001

Aufgabe 5: Grafische Darstellung der Gruppenstatistik

In dem PandaR Tutorial finden Sie eine Anleitung, wie Sie für die ANOVA eine schöne Grafik mit ggplot2 erstellen können. Erstellen Sie eine Grafik, die die Mittelwertsunterschiede der zweifaktoriellen ANOVA visualisiert.

LösungDie Grundlage für die Zeichnung schaffen wir mit der `aggregate()`-Funktion. Diese fasst die Daten auf Basis der Mittelwerte zusammen. Den Rest kann man mit den bekannten `ggplot2`-Funktionen erledigen. Dafür muss das Paket natürlich auch aktiviert werden.
library(ggplot2)

aggregate(nit ~ education_fac + urban_fac, mach, mean) |> 
  ggplot(aes(x = education_fac, y = nit, color = urban_fac, group = urban_fac)) +
    geom_point() +
    geom_line() +
    labs(x = "Education", y = "Mittelwert NIT", color = "Urban")

Kevin Pommeranz
Kevin Pommeranz
Teammitglied