Kapitel 5 Normierung
5.1 R-Pakete
In diesem Kapitel benötigen wir folgende R-Pakete:
library(tidyverse) # Datenjudo
library(sjmisc) # Datenhausmeister
library(mice) # fehlende Daten imputieren
5.1.1 Daten
data_url <- "https://raw.githubusercontent.com/sebastiansauer/modar/master/datasets/extra.csv"
extra <- read_csv(data_url)
5.2 Vergleich mit Normierungsstichprobe
Satow (2012) berichtet Normierungswerte, leider aber nur für die Allgemeinbevölkerung, nicht heruntergebrochen auf Geschlechter- oder Altersgruppen. Für Extraversion berichtet er folgende Daten:
- Summenscore: 26,67
- Standardabweichung: 5,74
Auf Errisch:
extra_sum_normstipro <- 26.67
extra_sd_normstipro <- 5.74
Ob die Daten normal verteilt sind, wird in der Publikation nicht erwähnt. Wir gehen im Folgenden davon aus. Allerdings ist es ein Manko, wenn diese Information nicht gegeben ist. Weiter berichtet Satow (2012) nicht, ob fehlende Werte die Summenscores verringert haben bzw. wie er ggf. mit diesem Problem umgegangen ist. Bevor wir den Vergleich mit der Normierungsstichprobe heranziehen können, müssen wir uns um fehlende Werte kümmern.
5.2.1 Anzahl der fehlenden Werte
Eine Möglichkeit, fehlende Werte zu zählen, sieht so aus:
extra %>%
row_count(i01:i10, count = "na") %>%
count(rowcount)
#> # A tibble: 1 × 2
#> rowcount n
#> <int> <int>
#> 1 0 826
Wir haben Glück; es gibt keine fehlenden Werte in diesem Datensatz. Aber haben wir wirklich Glück? Vermutlich wurden die Respondenten gezwungen, alle Fragen zu beantworten. Vielleicht wurden sie damit ordentlich genervt und haben zur Strafe Blümchen gekreuzt? Wir wissen es nicht genau, sollten aber die Datenqualität noch einmal überprüfen.
5.2.2 Vertiefung: Fehlende Werte ersetzen
Das Ersetzen fehlender Werte ist eine Wissenschaft für sich, aber ein einfacher (alldieweil nicht optimaler) Weg besteht darin, die fehlenden Werte durch den Mittelwert des Items zu ersetzen. Ein Item wurde im Schnitt mit 3,2 beantwortet, aber für Alois fehlt der Wert? Okay, ersetzen wir den fehlenden Wert für dieses Items mit 3,2.
daten <- data_frame(
namen = c("Alois", "Bertram", "Zenzi"),
i1 = c(1, 1, NA),
i2 = c(3, 2, NA),
i3 = c(NA, 2, 4)
)
daten
#> # A tibble: 3 × 4
#> namen i1 i2 i3
#> <chr> <dbl> <dbl> <dbl>
#> 1 Alois 1 3 NA
#> 2 Bertram 1 2 2
#> 3 Zenzi NA NA 4
Für i1
ist “1” eine plausible Schätzung für den fehlenden Wert, bei i2
ist “3” sinnvoll und bei i3
“4”, also jeweils der Zeilenmittelwert.
daten_imp <-
daten %>%
mice(method = "mean")
#>
#> iter imp variable
#> 1 1 i2 i3
#> 1 2 i2 i3
#> 1 3 i2 i3
#> 1 4 i2 i3
#> 1 5 i2 i3
#> 2 1 i2 i3
#> 2 2 i2 i3
#> 2 3 i2 i3
#> 2 4 i2 i3
#> 2 5 i2 i3
#> 3 1 i2 i3
#> 3 2 i2 i3
#> 3 3 i2 i3
#> 3 4 i2 i3
#> 3 5 i2 i3
#> 4 1 i2 i3
#> 4 2 i2 i3
#> 4 3 i2 i3
#> 4 4 i2 i3
#> 4 5 i2 i3
#> 5 1 i2 i3
#> 5 2 i2 i3
#> 5 3 i2 i3
#> 5 4 i2 i3
#> 5 5 i2 i3
daten2 <- complete(daten_imp, 1)
Wie wir sehen, wurde in jeder Spalte jeder fehlende Wert durch den Spalten-Mittelwert ersetzt.
5.2.3 z-Werte auf Basis der Normierungsstichprobe
Im Handbuch sind, wie oben beschrieben, nur Mittelwert und Streuung des Summenwerts, nicht des Mittelwerts angegeben, also müssen wir mit diesen Werten arbeiten:
Zuerst berechnen wir von Hand den z-Score auf Basis der Normierungsstichprobe:
extra <- extra %>%
mutate(extra_z_normstipro = (extra_sum - extra_sum_normstipro) / extra_sd_normstipro) %>%
mutate(extra_percrank_normstipro = pnorm(extra_z_normstipro))
extra %>%
select(extra_z_normstipro, extra_percrank_normstipro) %>%
slice_head(n = 5)
#> # A tibble: 5 × 2
#> extra_z_normstipro extra_percrank_normstipro
#> <dbl> <dbl>
#> 1 0.406 0.658
#> 2 -0.988 0.162
#> 3 -0.117 0.454
#> 4 0.406 0.658
#> 5 0.929 0.823