Site menu:

Sprache auf englisch umschalten

cNORM - Datenaufbereitung

Inhalt

  1. Repräsentativität der Datenbasis
  2. Gewichtung bei Verstößen gegen die Repräsentativität
  3. Wahl der Stichprobengröße
  4. Datenaufbereitung in R
  5. Ermittlung der Perzentile und Normwerte
  6. Berechnung von Potenzen und Interaktionen
  7. In einem Schritt



Repräsentativität der Datenbasis

Der Ausgangspunkt einer Normierung sollte immer eine repräsentative Stichprobe sein. Die Herstellung der Repräsentativität ist eine der schwierigsten Aufgaben der Testkonstruktion und muss deshalb mit entsprechender Sorgfalt durchgeführt werden. Dabei ist es zunächst wichtig, diejenigen Variablen zu identifizieren, die systematisch mit der zu messenden Variable kovariieren. Bei Schulleistungs- und Intelligenztests sind dies in Deutschland beispielsweise die Schulform, das Bundesland, der sozioökonomische Hintergrund usw. Achtung: Die Vergrößerung einer Stichprobe nützt der Normierungssicherheit nur dann, wenn die genannten Variablen hierdurch nicht systematisch verzerrt bleiben oder verzerrt werden. So wäre es beispielsweise bei der Erhebung von Schulleistungstests nutzlos oder sogar kontraproduktiv, die Stichprobe weiter zu vergrößern, wenn die Stichprobe nur an einer einzigen Schulform oder nur in einem einzigen Bundesland erhoben wird. Der Vorteil von cNORM liegt in der generell niedrigeren, erforderlichen Stichprobengröße, sodass aus der Stichprobe ggf. Fälle gelöscht werden können, um die Daten besser zu stratifizieren.



Gewichtung

Sollte Repräsentativität nicht erreicht werden und auch das manuelle Stratifizieren schwierig sein, so lassen sich die Daten mittels Iterative Proportional Fitting (Raking) gewichten. Wir haben umfangreiche Simulationsstudien durchgeführt (Publikation in Vorbereitung), die zeigen, dass Gewichtungen fast immer zu besseren, repräsentativen Normen führen und i. d. R. nicht schaden.



Wahl der Stichprobengröße

Die Größe der notwendigen Stichprobe kann nicht allgemein verbindlich beziffert werden, sondern richtet sich danach, wie gut der Test (bzw. die Skala) in den Extrembereichen differenzieren muss. In Deutschland ist es beispielsweise üblich (wenn auch längst nicht immer sinnvoll), bei der Auswahl der geeigneten Schulform zwischen IQ < 70 (Förderschwerpunkt geistige Entwicklung) und IQ > 70 (Förderschwerpunkt Lernen) zu differenzieren. Ein IQ-Test, der für die Schulplatzierung eingesetzt wird, muss also in der Lage sein, eine Abweichung von 2 SD vom Mittelwert noch möglichst präzise abzubilden. Geht es hingegen um die Diagnose einer Lese-Rechtschreibstörung, dann reicht im Allgemeinen bereits eine Abweichung von 1,5 SD vom Populationsmittelwert für die Diagnose aus. Als Daumenregel für die Ermittlung der idealen Stichprobengröße lässt sich festhalten, dass die Normierungsunsicherheit vor allem in denjenigen Leistungsbereichen zunimmt, die nur noch mit geringer Wahrscheinlichkeit in der Normierungsstichprobe vertreten sind. (Dies gilt übrigens nicht nur für das hier vorgestellte, sondern im Prinzip auch für alle anderen kontinuierlichen Normierungsverfahren.) So beträgt beispielsweise die Wahrscheinlichkeit, dass in einer repräsentativen Zufallsstichprobe von N = 100 kein einziges Kind einen IQ unter 70 aufweist, etwa 10%. Bei einer Stichprobengröße von N = 200 sinkt diese Wahrscheinlichkeit auf 1 %. Die Verdopplung der Stichprobengröße trägt in diesem Bereich also stark zur Erhöhung der Normierungssicherheit bei.

Da cNORM immer auf die gesamte Stichprobe zurück greift, erhöht sich die statistische Power der Normwertanpassung. In der Folge können die Normstichproben deutlich reduziert werden. Mit einer Stichprobengröße von n = 100 erreichen die Normen bereits eine Anpassungsgüte, die bei konventioneller Normierung erst mit Stichprobengrößen von n = 400 und mehr erreicht werden (W. Lenhard & Lenhard, 2021). Die Normen werden also insgesamt nicht nur präziser, sondern die Normierungsprojekte insgesamt kostengünstiger.



Datenaufbereitung in R

Wenn eine repräsentative Stichprobe in ausreichender Größe hergestellt wurde (cNORM schließt bei Missings betreffende Fälle aus), dann müssen die Daten zunächst eingelesen werden. Es ist sinnvoll, zunächst mit einem einfach strukturierten Datensatz vom Typ data.frame zu beginnen, der nur numerische Variablen ohne Wertelabels enthält. Es sollte mindestens die Variable mit den Rohwerten und entweder eine Gruppierungsvariable oder eine kontinuierliche Altersvariable enthalten sein. Auch die Beschulungsdauer oder andere explanatorische Variablen können in die Modellierung einfließen. Es muss sich dabei aber um eine intervallskalierte (oder ggf. dichotome) Variable handeln. Das Verfahren ist relativ robust gegenüber Veränderungen in der "Feinheit" der Gruppenunterteilung. So hängt das Ergebnis der Normierung beispielsweise kaum davon ab, ob man Halbjahres- oder Ganzjahresabstufungen wählt (siehe A. Lenhard, Lenhard, Suggate & Segerer, 2016). Je stärker die zu messende Variable mit der explanatorischen Variable kovariiert, desto feinstufiger sollten die Gruppen gebildet werden.

Falls Sie bei der Verwendung von cNORM zunächst nur die kontinuierliche Altersvariable zur Verfügung haben, ist die Berechnung einer Gruppierungsvariable sinnvoll. Die Werte der Gruppierungsvariablen sollten dabei dem Altersmittel der jeweiligen Gruppe entsprechen:

# Generiert eine Gruppierungsvariable aus einer fiktiven Altersvariable
# für Kinder zwischen 2 und 18 Jahren für den ppvt-Datensatz. Die
# Variable Alter wird hierdurch in eine diskrete Gruppenvariable
# umkodiert, im Beispiel in 12 äquidistante Gruppen.

group <- getGroups(ppvt$age, 12)

Es ist natürlich auch möglich, einen Datensatz zu verwenden, bei dem bereits Normwerte für einzelne Altersgruppen existieren. Eine kontinuierlich verteilte Altersvariable ist in diesem Fall nicht notwendig. Bei Verwendung von RStudio lassen sich Daten bequem über die Import-Funktion aus anderen Statistik-Umgebungen einlesen:


Für Demonstrationszwecke enthält cNORM bereits einen bereinigten Datensatz, welcher einem ehemaligen Normierungsprojekt entstammt (ELFE 1-6, W. Lenhard & Schneider, 2006, Untertest Satzverständnis) und den wir in der Folge zur Demonstration des Packages verwenden.

Ein weiterer großer (aber nicht repräsentativer) Datensatz, den wir hier zur Demonstration verwenden, basiert auf einem ins Deutsche adaptierten Wortschatztest (PPVT-4, A. Lenhard, Lenhard, Segerer & Suggate, 2015). Als weitere Datensätze für physiologische bzw. biometrische Daten enthält cNORM einen großen Datensatz des CDC mit Wachstumskurven von 2 bis 25 (Körpergröße, Gewicht und BMI) von über 45.000 Kindern und Jugendlichen aus den USA (CDC, 2012) und Daten der Weltbank zur weltweiten Entwicklung der Mortalität und Lebenserwartung Neugeborener. Informationen über die zwei Datensätze erhalten Sie, indem Sie ?elfe, ?ppvt, ?CDC, ?life oder ?mortality eingeben. Um die Datensätze zu laden, gehen Sie bitte wie folgt vor:

# Lädt das Package cNorm

library(cNORM)

# Beschreibung der verschiedenen Datensätze aufrufen

?elfe
?ppvt
?CDC # hier als Rohwertvariable 'bmi' verwenden

# Zeigt die ersten Reihen des Datensatzes

head(elfe)

Wie man sieht, existiert im Datensatz "elfe" gar keine Altersvariable, sondern nur eine Personen-ID, ein Rohwert und eine Gruppierungsvariable. Die Gruppierungsvariable dient in diesem Fall gleichzeitig als kontinuierliche explanatorische Variable, da bei der Testnormierung Kinder nur ganz zu Beginn und in der Mitte des Schuljahres untersucht wurden. Der Wert 2.0 bedeutet beispielsweise, dass sich die Kinder zu Beginn des 2. Schuljahres befanden, der Wert 2.5 heißt, dass die Kinder in der Mitte des 2. Schuljahres untersucht wurden. Man könnte bei der Durchführung einer Normierung aber beispielsweise auch Kinder gleichmäßig über das ganze Schuljahr hinweg untersuchen. Die Beschulungsdauer ginge dann als explanatorische Variable ein, in der Gruppierungsvariable könnte jeweils die erste und die zweite Hälfte jedes Schuljahres zu einer Gruppe zusammengefasst werden.


Im "elfe"-Datensatz gibt es sieben Gruppen mit jeweils 200 Fällen, ingesamt also 1400 Fälle:

# Deskriptive Ergebnisse ausgeben

by(elfe$raw, elfe$group, summary)



Ermittlung der Perzentile und Normwerte

Der nächste Schritt, der automatisch beim Aufrufen der 'cnorm'-Funktion durchgeführt wird, ist das Ranking der einzelnen Fälle pro Gruppe. Intern wird dabei die rankByGroup-Funktion verwendet, die einen Rangplatz für jede Person ermittelt, Perzentile liefert und eine Normalrangtransformation durchführt, bei der standardmäßig T-Werte (M = 50, SD = 10) zurückgeliefert werden. Grundsätzlich kommt unsere mathematische Methode auch ohne Normalrangtransformation aus, d. h. das Verfahren könnte theoretisch auch mit den Perzentilen durchgeführt werden. Dies bietet sich beispielsweise dann an, wenn man eine Größe erfassen möchte, die extrem von der Normalverteilung abweicht bzw. einer ganz anderen Verteilung folgt. Für die meisten psychischen oder physischen Skalen gilt allerdings, dass die Verteilungen selbst bei starken Boden- und Deckeneffekten noch genug Ähnlichkeit mit der Normalverteilung aufweisen. In diesen Fällen erhöht die Normalrangtransformation i. d. R. die Modellpassung und erleichtert die Weiterverrechnung der Daten. Außer als T-Werte können die Normwert auch als z- oder IQ-Werte zurückgegeben werden, oder eine beliebige Skala definiert werden. Außerdem kann zwischen verschiedenen Ranking-Verfahren zum Umgang mit Bindungen gewählt werden (RankIt, Blom, van der Warden, Tukey, Levenbach, Filliben, Yu & Huang).

Um die Ranking-Methode zu ändern, muss die Methode mit method = x spezifiziert werden (x = Methodenindex; siehe Funktionshilfe). Der Normwert kann als T-Wert, IQ-Wert, z-Wert oder mithilfe eines Doppelvektors aus M und SD spezifiziert werden, z. B. scale = c(10, 3) für Wertpunkt-Skalen. Die Gruppierungsvariable kann deaktiviert werden, indem group = FALSE gesetzt wird. Die Normalrangtransformation wird dann auf die gesamte Stichprobe angewendet. Bitte beachten Sie, dass es noch eine weitere Funktion zur Ermittlung des Rangplatzes gibt, welche ohne diskrete Gruppierungsvariable funktioniert (rankBySlidingWindow). Der Rang jeder einzelnen Testperson wird dann auf Basis der kontinuierlichen explanatorischen Variablen mit Hilfe eines gleitenden Fensters geschätzt. Die Breite dieses Fensters lässt sich individuell spezifizieren.

Das gleitende Fenster ist aber eher eine Nebenanwendung und die Verwendung ist nur dann sinnvoll, wenn die Altersvariable tatsächlich kontinuierlich ist. Im ,elfe'-Datensatz dient die Variable 'group' hingegen sowohl als kontinuierliche explanatorische Variable als auch als diskrete Gruppierungsvariable. Wir erhalten hier deshalb mit der Funktion 'rankBySlidingWindow' die gleichen Normwerte wie mit der Funktion 'rankByGroup'.

Berechnung von Potenzen und Interaktionen

An dieser Stelle, an der viele Testentwickler mit der Normierung bereits aufhören, beginnt der eigentliche Modellierungsprozess. Hierbei wird eine Funktion ermittelt, die den Rohwert in Abhängigkeit vom latenten Personenparameter l und von der explanatorischen Variable darstellt. Letztere bezeichnen wir im Folgenden mit a. Im 'elfe'-Beispiel verwenden wir für a die diskrete Variable 'group'.

Zur Umsetzung des mathematischen Modells müssen alle Potenzen der Variablen l und a bis zu einem bestimmten Exponenten k und t gebildet werden. Anschließend müssen auch alle Interaktionen zwischen diesen Potenzen durch einfaches Ausmultiplizieren berechnet werden. Als Faustregel gilt, dass k > 5 zu Überanpassung führt. In der Regel wird aber bereits k = 4 oder sogar k = 3 ausreichen, um menschliche Leistungsdaten mit ausreichender Präzision zu modellieren. Insbesondere die Altersentwicklung kann meistens bereits mit der dritten Potenz abgedeckt werden. Intern verwendet cNORM die computePowers-Funktion. Sie erstellt im Datenobjekt neue Variablen, nämlich alle Potenzen von l (L1, L2, L3, L4 ...), alle Potenzen von a (A1, A2, A3, A4 ...) und alle Produkte aus den Potenzen (L1A1, L1A2, L1A3, ... L4A3, L4A4 ...).



In einem Schritt

cNorm führt automatisch alle Schritte durch und speichert das Datenobjekt unter $data, also z. B. bei der Modellierung des Rohwerts aus dem elfe-Datensatz:

model.elfe <- cnorm(raw=elfe$raw, group=elfe$group)
head(model.elfe$data)






Installation
Gewichtung