Site menu:

Sprache auf englisch umschalten

cNORM - Modellierung


Der eigentliche Modellierungsprozess besteht darin, ein Regressionsmodell zu finden, das die ursprünglichen Daten so genau wie möglich, aber mit so wenigen Prädiktoren wie möglich abbildet. Gleichzeitig sollen die Daten so stark wie möglich von Normierungsfehlern gesäubert werden, die durch den Zufallsprozess bei der Datenerhebung und eventuell auch durch kleine Abweichungen von der Repräsentativität in einzelnen Stufen der Gruppenvariable zustande kommen. Intern wird durch die 'bestModel'-Funktion erreicht, auf die auch die allgemeinen 'cnorm()'-Funktion zurückgreift. Man kann diese Funktion auf verschiedene Arten verwenden: Entweder man gibt vor, wie hoch der Anteil aufgeklärter Varianz (Radjusted2) mindestens sein soll. Dann wird diejenige Regressionsfunktion ausgewählt, die diese Anforderung mit der geringsten Anzahl an Prädiktoren erreicht. Oder man spezifiziert eine feste Anzahl an Prädiktoren. Dann wird dasjenige Modell ausgewählt, welches mit dieser Spezifikation die höchste Varianzaufklärung erreicht. Zur Ermittlung des jeweils besten Modells nutzt cNORM die 'regsubset'-Funktion aus dem 'leaps' package. Da vorab i. d. R. nicht bekannt ist, wie gut sich die Daten insgesamt modellieren lassen, beginnt man am besten mit den standardmäßig eingestellten Parametern (k = 5, t = 3 and Radjusted2 = .99):

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

Die Funktion gibt die folgenden Ergebnisse zurück:

Final solution: 3
R-Square Adj. amounts to 0.990812753080448
Final regression model: raw ~ L3 + L1A1 + L3A3
Beta weights are accessible via 'model$coefficients':

(Intercept)

L3

L1A1

L3A3

-1.141915e+01

2.085614e-05

1.651765e-01

-5.911150e-07


Regression formula:
[1] "raw ~ -11.4191452286606 + (2.08561440071111e-05*L3) + (0.165176532450589*L1A1) + (-5.9111502682762e-07*L3A3)"

Use 'plotSubset(model)' to inspect model fit

Glücklicherweise wird bereits jetzt die vorgegebene Schwelle von Radjusted2 = .99 überschritten, und zwar mit nur drei Prädiktoren (plus Intercept). Es werden auch alle einzelnen Koeffizienten sowie die komplette Regressionsformel zurückgegeben. Letztere klärt in diesem Fall, wie bereits erwähnt, mehr als 99% der gesamten Datenvarianz auf.

Das zurückgegebene Objekt 'model' enthält sowohl die Daten (model$data) als auch das Regressionsmodell (model$model). Alle Informationen über die Modellselektion können unter 'model$model$subsets' abgerufen werden. Der Prozess der Variablenselektion wird Schritt für Schritt in 'outmat' und 'which' aufgelistet. Dort findet man R2, Radjusted2, Mallow's Cp und BIC. Die Regressionskoeffizienten für das selektierte Modell ('model$model$coefficients') sind ebenso verfügbar wie die angepassten Werte ('model$model$fitted.values') und alle weiteren Informationen. Eine Tabelle mit den entsprechenden Informationen kann mithilfe des folgenden Codes gedruckt werden:

print(model)

Weiterhin kann Information über die Veränderung von Radjusted und anderer Informationskriterien (Mallow's Cp oder BIC) durch Hinzunahme weiterer Prädiktoren bei gegebenem k auch grafisch inspiziert werden. Verwenden Sie hierfür den folgenden Befehl:

plot(model, "subset", type = 0)

In der Grafik wird standardmäßig Radjusted2 über der Anzahl an Prädiktoren ausgegeben. Alternativ kann auch Mallow's Cp in logarithmierter Form (type = 1) oder BIC (type = 2) über Radjusted2 aufgetragen werden.

Man sieht an dieser Grafik, dass der voreingestellte Wert von Radjusted = .99 bereits mit nur drei Prädiktoren erreicht wird. Die Hinzunahme weiterer Prädiktoren führt hingegen nur zu kleinen Steigerungen von Radjusted bzw. zu kleinen Verringerungen von Mallow's Cp. Ab der Stelle, ab der die eingezeichneten Punkte nah beieinander liegen, bringt also die Hinzunahme weiterer Prädiktoren nur wenig Nutzen. Um eine Überanpassung zu vermeiden, sollte deshalb aus diesem Bereich ein Modell mit möglichst wenigen Prädiktoren gewählt werden.

Das Modell mit drei Prädiktoren scheint also geeignet zu sein. Trotzdem muss das auf diese Weise gefundene Modell noch weiter mit den in Modellvalidierung beschriebenen Mitteln auf Plausibilität getestet werden. Vor allem ist es notwendig, die Grenzen der Modellgültigkeit zu ermitteln. Falls sich ein Modell nach dieser Prüfung doch als suboptimal herausstellt, sollten Radjusted2, die Anzahl an Prädiktoren oder gegebenenfalls auch k anders gewählt werden.



Wiederholte Kreuzvalidierung

Tatsächlich besteht das Ziel des Modellierungsprozesses nicht darin, die maximale Varianz der beobachteten Daten zu erfassen, sondern Modelle zu erhalten, die die (wahrscheinlich unbekannte) Bevölkerungsverteilung vorhersagen. Eine zu enge Anpassung des Modells an die Trainingsdaten führt wahrscheinlich zu einem Overfit. Um dies zu vermeiden und abzuschätzen, wie gut die Anpassung durchgeführt werden kann, müssen Sie eine Kreuzvalidierung der Modellierung durchführen. cNORM hilft bei der Auswahl der Anzahl der Terme für das Modell, indem es eine wiederholte Kreuzvalidierung mit 80 Prozent der Daten als Trainingsdaten und 20 Prozent als Validierungsdaten durchführt. Die Fälle werden nach dem Zufallsprinzip gezogen, aber nach Normgruppe geschichtet. Aufeinanderfolgende Modelle werden mit zunehmender Anzahl von Termen gerechnet und der RMSE der Rohwerte (durch das Regressionsmodell gefittet) wird für das Training, die Validierung und den kompletten Datensatz berechnet. Zusätzlich zu dieser Analyse auf der Rohwertebene ist es möglich, die Normierungsreliabilität und Crossfit-Maße zu schätzen.



Ein Crossfit größer als 1 ist ein Zeichen für eine Überanpassung. Ein Wert unter 1 deutet auf eine Unteranpassung aufgrund einer suboptimalen Modellierung hin, d. h. das Verfahren hat möglicherweise nicht die gesamte Varianz der beobachteten Daten erfasst, die es möglicherweise erfassen könnte. Werte um 1 sind ideal, solange der Rohwert-RMSE niedrig ist und die Normwertreliabilität R2 hohe Werte erreicht. Als Vorschlag für echte psychometrische Tests:

Das folgende Beispiel wurde auf Basis des elfe-Datensatzes mit 10 Wiederholungen und bis zu einer maximalen Anzahl von 10 Termen in der Regressionsfunktion generiert:

model <- cnorm(raw = elfe$raw, group = elfe$group)
cnorm.cv(model$data, repetitions = 10, max = 10)

Die Ergebnisse unterstützen die Entscheidung im obigen Beispiel, drei Terme (+ Intercept) in die Regressionsfunktion aufzunehmen. Das Hinzufügen weiterer Terme führt weder zu einem niedrigeren Rohwert-RMSE noch zu einer Erhöhung des Normwert R2 in den Validierungsdaten. Die Einbeziehung von mehr Termen führt einfach zu einem Overfit. Solange es keine sich überschneidenden Perzentilkurven in plotPercentiles gibt, ist es ratsam, bei dieser Anzahl von Termen zu bleiben.



Gewichtung
Modellvalidierung