5  Itemcharakteristiken & Testwerte

Voraussetzungen

  • In diesem Kapitel gehen wir von einem bereinigten Datensatz aus, der für die betrachteten Merkmale keine NAs mehr enthält.

  • Wir betrachten n Testpersonen v = 1, \cdots, n, die jeweils die Items i = 1, \cdots, m bearbeitet haben. Die Testantworten werden mit y_{vi} bezeichnet, das heißt die Testperson v hat das Item i mit y_{vi} beantwortet.

  • Ferner soll die Items derart kodiert sein, dass die Antwortmöglichkeiten für ein Item i zwischen 0 und einen maximalen Wert y_{\text{i, max}} liegen. Sollte das nicht der Fall, so müssen die Items umskaliert werden.

5.1 Mittlerer Itemwert

WarnungDefinition: Mittlerer Itemwert (analog zu Moosbrugger und Kelava 2020)

Der mittlere Itemwert eines Items i mit i = 1, \cdots, m ist das arithmetische Mittel der Antworten, gemittelt über alle n Testpersonen

\overline{y}_i = \frac{1}{n} \sum_{v=1}^n y_{vi} \quad \text{für} \quad i = 1, \cdots, m.

Berechnung spaltenweise (Mittelwert über alle Reihen)

Mit Hilfe der Funktion summarise() (bzw. summarize()) können Berechnungen spaltenweise, in diesem Fall also bezüglich eines Items gemacht werden. Da iwr das für alle Items gleichzeitig machen ist das Ergebnis eine neue Datentabelle.

umfrage |> summarise(across(c(starts_with("SE0"), starts_with("TE0")), mean))
# A tibble: 1 × 14
  SE01_01 SE01_02_invers SE01_03 SE01_04_invers SE01_05 SE01_06 SE01_07 TE01_01
    <dbl>          <dbl>   <dbl>          <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
1    3.12            3.2    2.97           3.22    2.85    3.05    2.88     2.2
# ℹ 6 more variables: TE01_02_invers <dbl>, TE01_03 <dbl>,
#   TE01_04_invers <dbl>, TE01_05 <dbl>, TE01_06_invers <dbl>, TE01_07 <dbl>

Diese Tabelle ist ein wenig unübersichtlich. Mit Hilfe des Pivotierens aus Kapitel 4.3 können wir die obige Tabelle aber als eine lange Tabelle schreiben und bei Bedarf sortieren.

umfrage |> summarise(across(c(starts_with("SE0"), starts_with("TE0")), mean)) |> 
           pivot_longer(everything(), values_to = "Mittelwert", names_to = "Item") |> 
           arrange(desc(Mittelwert))           
# A tibble: 14 × 2
   Item           Mittelwert
   <chr>               <dbl>
 1 SE01_04_invers      3.22 
 2 SE01_02_invers      3.2  
 3 SE01_01             3.12 
 4 SE01_06             3.05 
 5 SE01_03             2.97 
 6 SE01_07             2.88 
 7 SE01_05             2.85 
 8 TE01_01             2.2  
 9 TE01_03             1.65 
10 TE01_02_invers      1.63 
11 TE01_07             1.61 
12 TE01_05             1.34 
13 TE01_06_invers      0.891
14 TE01_04_invers      0.882

5.2 Zustimmungsindex | Schwierigkeitsindex (Mittlere Itenschwierigkeit)

WarnungZustimmungsindex | Schwierigkeitsindex

Der Zustimmungsindex (oder Schwierigkeitsindex) P_i eines Items i ist der Quotient aus der durchschnittlich erreichten Punktsumme aller n Testpersonen und der beim Item i maximal erreichbaren Punktsumme y_{\text{i, max}} multipliziert mit 100:

P_i = 100 \cdot \frac{\overline{y}_i}{y_{\text{i, max}}}

Bemerkungen

  • Sollte die Skala eines Items nicht bei 0 beginnen, so muss die Itemskala entsprechend umskaliert werden:

P_i = 100 \cdot \frac{\overline{y_i} - y_{i, \text{min}}} {y_{i, \text{ max}} - y_{i, \text{min}}} \quad \text{für} \quad i = 1, \cdots, m. Dabei ist y_{i, \text{min}} der minimal mögliche Wert bevor die Skala umskaliert wird. Dann ist dann \overline{y_i} - y_{i, \text{min}} der mittlere Itemwert der umskalierten Items und y_{i, \text{ max}} - y_{i, \text{min}} der durch das Umskalieren neue maximale Wert der Items. Siehe dazu auch die Transformationsregel .

  • Die Bezeichnung Schwierigkeitsindex kommt aus der Pädagogik und bezieht sich auf Tests bei denen die Antworten richtig oder falsch sein können. Im Kontext von Umfragen, wie sie zum Beispiel in diesem Kurs gemacht werden, ist es sinnvoller von Zustimmungsindex zu sprechen.

Beispiel: Zustimmungsindex

max_punkte <- 4
umfrage |> mutate(across(c(starts_with("SE0"), starts_with("TE0")), \(x) {x/max_punkte})) |>      
           summarise(across(c(starts_with("SE0"), starts_with("TE0")), mean)) 
# A tibble: 1 × 14
  SE01_01 SE01_02_invers SE01_03 SE01_04_invers SE01_05 SE01_06 SE01_07 TE01_01
    <dbl>          <dbl>   <dbl>          <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
1   0.780            0.8   0.743          0.805   0.714   0.764   0.720    0.55
# ℹ 6 more variables: TE01_02_invers <dbl>, TE01_03 <dbl>,
#   TE01_04_invers <dbl>, TE01_05 <dbl>, TE01_06_invers <dbl>, TE01_07 <dbl>

Mit Hilfe des Pivotierens aus Kapitel 4.3 können wir die obige Tabelle auch als eine lange Tabelle schreiben und danach sortieren

umfrage |>  mutate(across(c(starts_with("SE0"), starts_with("TE0")), \(x){x/max_punkte})) |> 
            summarise(across(c(starts_with("SE0"), starts_with("TE0")), mean)) |> 
            pivot_longer(everything(), values_to = "Mittelwert", names_to = "Item") |> 
            arrange(desc(Mittelwert))
# A tibble: 14 × 2
   Item           Mittelwert
   <chr>               <dbl>
 1 SE01_04_invers      0.805
 2 SE01_02_invers      0.8  
 3 SE01_01             0.780
 4 SE01_06             0.764
 5 SE01_03             0.743
 6 SE01_07             0.720
 7 SE01_05             0.714
 8 TE01_01             0.55 
 9 TE01_03             0.414
10 TE01_02_invers      0.407
11 TE01_07             0.402
12 TE01_05             0.334
13 TE01_06_invers      0.223
14 TE01_04_invers      0.220

Interpretation

Wir möchten nach Möglichkeit eine mittlere Zustimmung bei jedem Item haben, da dies zur besten Differenzierung führen kann.

5.3 Itemwertvarianz

Warum die Varianz der Items wichtig ist

Falls ein Item zwar einen angemessen mittleren Itemwert hat, aber alle Personen die gleiche Antwort gegeben haben, ist das Item zwar bezüglich der Zustimmung in Ordnung, aber nicht nützlich, um Individuen voneinander zu differenzieren.

WarnungItemvarianz

Unter der Itemvarianz versteht man ein Maß für die Differenzierungsfähigkeit eines Items i in der untersuchten Stichprobe:

{s_i}^2 = \frac{1}{n-1} \sum_{v=1}^n (y_{vi} - \overline{y}_i)^2 \quad \text{für} \quad i = 1,\cdots,m.

Berechnung spaltenweise:

umfrage |> summarise(across(c(starts_with("SE0"), starts_with("TE0")), var)) |> 
           pivot_longer(everything(), values_to = "Varianz", names_to = "Item") |> 
           mutate(StdAbw = sqrt(Varianz)) |> 
           arrange(desc(Varianz))
# A tibble: 14 × 3
   Item           Varianz StdAbw
   <chr>            <dbl>  <dbl>
 1 TE01_05          1.64   1.28 
 2 TE01_07          1.43   1.20 
 3 TE01_02_invers   1.37   1.17 
 4 SE01_07          1.28   1.13 
 5 SE01_03          1.26   1.12 
 6 SE01_02_invers   1.23   1.11 
 7 SE01_04_invers   1.16   1.08 
 8 SE01_01          1.11   1.06 
 9 TE01_03          1.05   1.03 
10 SE01_06          0.933  0.966
11 TE01_01          0.822  0.907
12 SE01_05          0.786  0.887
13 TE01_06_invers   0.704  0.839
14 TE01_04_invers   0.601  0.775

5.4 Testwerte

Betrachte Testpersonen v = 1, \cdots, n, die jeweils die Items i=1, \cdots, m bearbeiten.

WarnungDefinition: Testwert (Moosbrugger und Kelava 2020)

Der Testwert Y_v für Person v ist die Summe der Werte y_{vi} der Items i=1, \cdots, m:

Y_v = \sum_{i=1}^m y_{vi}.

Bemerkungen:

  • Testwerte werden manchmal auch Summenwerte, Rohwerte oder Skalenwerte genannt.
  • Die Testwerte werdeb bezüglich eines Konstrukts berechnet.
  • Statt der Summe kann komplett analog auch der Mittelwert benutzt werden.

Beispiel: Testwerte

Berechnung zeilenweise (über selektierte Spalten)

testwerte <- umfrage |> rowwise() |>  
                        mutate(S_Summe = sum(c_across(starts_with("SE0"))),
                               T_Summe = sum(c_across(starts_with("TE0"))) 
                              ) |> 
                        ungroup() |> 
                        select(S_Summe, T_Summe) # nur für die Übersicht
testwerte
# A tibble: 110 × 2
   S_Summe T_Summe
     <dbl>   <dbl>
 1      24      12
 2      17      16
 3      20      10
 4      25      11
 5      21       7
 6      25      11
 7      25      11
 8      23       8
 9      25       9
10      20       8
# ℹ 100 more rows
  • Testwert durch Addition muss nicht unbedingt sinnvoll sein.
  • Eindimensionalität sollte vorliegen.
  • Darstellung der Testwerte über Histogramme (univariat) oder Streudiagramm (bivariat).
library(patchwork)

g1 <- testwerte |> ggplot(aes(x = S_Summe)) + 
                   geom_histogram(alpha = 0.6, 
                                  fill = "steelblue2",
                                  binwidth= 1)


g2 <- testwerte |> ggplot(aes(x = T_Summe)) + 
                   geom_histogram(alpha = 0.6, 
                                  fill = "steelblue2",
                                  binwidth = 1)


g3 <- testwerte |> ggplot(aes(x = S_Summe, y = T_Summe)) + 
                   geom_point(alpha = 0.6, 
                              color = "steelblue2")

(g1|g2)/g3

5.4.1 Homogenitätsindex

WarnungMittlere Inter-Item Korrelation (MIC)

Die mittlere Inter-Item Korrelation gibt an, wie ähnlich (homogen) die Items sind. Sie wird als durchschnittliche paarweise Korrelation berechnet: \mathrm{MIC} = \frac{2}{m(m-1)} \cdot \sum_{i < j} \mathrm{Cor}(y_i, y_j)

HinweisDaumenregel

Die mittlere Inter-Item Korrelation liegt typischerweise zwischen 0.2 und 0.4.

performance::item_intercor(umfrage[, -c(1, 2)])
[1] 0.06991869

5.4.2 Alle paarweisen Korrelationen

mic_pw <- function(dataset) {
  corr <- cor(dataset)
  p <- dim(corr)[2]
  result <- rep(NA, p * (p - 1) / 2)
  laufindex <- 1
  for (spalten in 2:p) {
    for (zeilen in 1:(spalten - 1)) {
      result[laufindex] <- corr[zeilen, spalten]
      laufindex <- laufindex + 1
    }
  }
  return(result)
}

summary(mic_pw(umfrage[, -c(1, 2)]))
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-0.48336 -0.14551  0.07643  0.06992  0.22193  0.69104 

5.5 Reliabilität & Cronbach’s \alpha – PI

5.5.1 Reliabilität & Cronbach’s \alpha

WarnungReliabilität

Die Messgenauigkeit/Reliabilität/Zuverlässigkeit einer Skala ist als Varianzverhältnis definiert: \mathrm{Rel}(\overline{Y}) = \mathrm{Rel}\left(\frac{1}{m}\sum_{i=1}^m Y_i\right) = \frac{\mathrm{Var}\left(\sum \tau_i\right)}{\mathrm{Var}\left(\sum Y_i\right)} \in [0, 1].

Schätzung von \mathrm{Rel} durch (Herleitung nach Bühner, 2021): \alpha = \frac{m}{m-1}\left(1 - \frac{\sum \mathrm{Var}(Y_i)}{\mathrm{Var}(\sum Y_i)}\right) = 2 \cdot \frac{m}{m-1}\frac{\sum \mathrm{Cov}_{i<j}(Y_i, Y_j)}{\mathrm{Var}(\sum Y_i)}.

HinweisInterpretation
  • Maßzahl für interne Konsistenz einer Skala
  • Wie stehen Fragen einer Skala miteinander in Beziehung?

5.5.2 Beispiel

Interne Konsistenz von Noten (Leistungsfähigkeit in Schule)

Schüler Note M Note Ph Note D
Anton 1 1 1
Berta 2 2 2
Cäsar 3 3 1
  • \alpha für Mathe & Physik: \alpha_{M,P} = \frac{2}{2-1}\cdot \frac{2\cdot \mathrm{cov}(M,P)}{s_t^2} = 1
  • \alpha für Mathe & Deutsch: \alpha_{M,D} = \frac{2}{2-1}\cdot \frac{2\cdot \mathrm{cov}(M,D)}{s_t^2} = 0
  • \alpha für alle drei Items: \alpha_{M,P,D} = \cdots = 0.69

Zurück zu unserer Umfrage:

# Umfrage_relevant <- umfrage |> select(all_of(relevant))
# psych::alpha(Umfrage_relevant)$total$raw_alpha

5.5.3 Cronbachs \alpha je Konstrukt & if item deleted

Mehrere Konstrukte in einer Umfrage:

  • Cronbachs \alpha je Konstrukt (nur die jeweiligen Items)
  • Messung der internen Konsistenz der Skalen (der Konstrukte)

Cronbach \alpha if item deleted:

  • Interne Konsistenz einzelner Items mit restlichen Items
  • Cronbach’s \alpha nach Weglassen des Items
  • Wert größer als für Gesamtkonstrukt: Item ggf. weglassen
A <- matrix(c(1,2,3, 1,2,3, 1,2,1), nrow = 3)
#psych::alpha(A)$alpha.drop$raw_alpha  # Alpha für (Ph,D), (M,D) und (M,Ph)
#psych::alpha(A)$total$raw_alpha       # Alpha für alle drei Items

Zurück zu unserer Umfrage:

# psych::alpha(Umfrage_relevant)$alpha.drop$raw_alpha

5.6 Runden

5.6.1 APA-konformes Runden

TippAPA-konformes Runden

Prinzipiell gilt, dass man stets nur sinnvoll viele Nachkommastellen angeben sollte. Sämtliche Zahlen, die prinzipiell Nachkommastellen haben können, sollen nach APA (American Psychological Association) auf zwei Nachkommastellen gerundet werden. Dabei soll ein 0 vor dem Komma weggelassen werden.

# APA-konformes Runden geht so:
library(weights)

Zahlen <- c(-0.8, 1.456, 0.09, -3.4)
rd(Zahlen, digits = 2)
[1] "-.80"  "1.46"  ".09"   "-3.40"
HinweisAusnahmen

Bei p-Werten sollte auf drei Nachkommastellen gerundet werden.

Moosbrugger, Helfried, und Augustin Kelava. 2020. Testtheorie und Fragebogenkonstruktion. 3. Aufl. Springer.