Kapitel 8 {LSAmitR} | R Documentation |
Kapitel 8: Fehlende Daten und Plausible Values
Description
Das ist die Nutzerseite zum Kapitel 8, Fehlende Daten und Plausible Values, im Herausgeberband Large-Scale Assessment mit R: Methodische Grundlagen der österreichischen Bildungsstandardüberprüfung. Im Abschnitt Details werden die im Kapitel verwendeten R-Syntaxen zur Unterstützung für Leser/innen kommentiert und dokumentiert. Im Abschnitt Examples werden die R-Syntaxen des Kapitels vollständig wiedergegeben und gegebenenfalls erweitert.
Details
Vorbereitungen
Zur Illustration der Konsequenzen fehlender Daten und der Messfehlerbehaftetheit
von Variablen soll zunächst ein Illustrationsdatensatz (data08I
) mit
N=1500 simuliert werden. Dabei sollen zwei Variablen vorliegen: Der
Sozialstatus X
soll teilweise fehlende Werte aufweisen und die zu
erfassende Kompetenz liegt sowohl als wahrer Wert \theta
als auch als
messfehlerbehaftete Variable \hat{\theta}
vor.
Im Datensatz data08I
liegt sowohl der vollständig beobachtete
Sozialstatus (x
) als auch derselbe Sozialstatus mit teilweise fehlenden
Variablen (X
) vor.
Neben dem Illustrationsdatensatz werden in diesem Kapitel Datensätze der
österreichischen Bildungsstandards im Fach Englisch verwendet.
Der Datensatz data08H
enthält Kovariaten (d.h. Variablen aus Fragebögen
oder administrative Daten) auf Ebene der Schüler (Ebene 1) und auf Ebene der
Schulen (Ebene 2).
Variablen beider Ebenen können dabei fehlende Werte besitzen.
Im Datensatz data08J
sind fehlende Werte des Datensatzes data08H
durch eine Ersetzung von Werten bereits aufgefüllt.
Außerdem liegen Item Responses der Schüler für den Bereich Hörverstehen
(Listening, L) im Datensatz data08K
vor.
Folgende R-Pakete werden in diesem Kapitel verwendet: mice
,
miceadds
, TAM
, pls
.
library(miceadds)
library(mice)
library(TAM)
library(pls)
Abschnitt 8.1.1: Konsequenzen fehlender Daten und messfehlerbehafteter Variablen
Listing 1: Deskriptive Statistiken des Datensatzes
Mit folgendem R-Code werden deskriptive Statistiken des Datensatzes
data08I
ermittelt, an denen die Bedeutung der geeigneten Behandlung
fehlender Werte und von Messfehlern herausgearbeitet werden soll.
data(datenKapitel08)
dat <- datenKapitel08$data08I[,-1]
#*** Missinganteile
round( colMeans( is.na(dat), na.rm=TRUE) , 2 )
#*** Mittelwerte
round( apply( dat , 2 , mean , na.rm=TRUE ) , 2 )
#*** Zusammenhang von Missingindikator und Variablen
round( miceadds::mi_dstat( dat[,c("WLE","X")] ) , 2 )
#*** Varianzen
round( apply( dat , 2 , var , na.rm=TRUE ) , 2 )
#*** Korrelationsmatrix
round( cor( dat , use = "pairwise.complete.obs") , 2 )
Abschnitt 8.2.5: Durchführung der multiplen Imputation in R
Listing 2: Variablenauswahl und leere Imputation
In diesem Abschnitt wird die multiple Imputation basierend auf dem MICE-Ansatz im
Paket mice
in R umgesetzt. Als Datensatz soll data08H
verwendet
werden.
Zur Vereinfachung der Darstellung wählen wir auf der Ebene der Schüler die
Variablen Sozialstatus (HISEI
), Anzahl der Bücher zu Hause (buch
)
und den WLE der Hörverstehenskompetenz (E8LWLE
) sowie einen auf der
Schulebene erfassten Sozialstatus (SES_Schule
) aus.
set.seed(56)
dat <- datenKapitel08$data08H
# wähle Variablen aus
dat1 <- dat[ , c("idschool", "HISEI", "buch", "E8LWLE",
"SES_Schule") ]
colMeans(is.na(dat1))
# führe leere Imputation durch
imp0 <- mice::mice(dat1, m=0, maxit=0)
Listing 3: Spezifikation der Imputationsmethoden
Die nachfolgende Syntax zeigt die Spezifikation der Imputationsmethoden im
Vektor impMethod
in mice
für unser Datenbeispiel.
impMethod <- imp0$method
impMethod["HISEI"] <- "2l.continuous"
# [...] weitere Spezifikationen
impMethod["SES_Schule"] <- "2lonly.norm"
impMethod
Listing 4: Definition der Prädiktormatrix für die Imputation in mice
Nachfolgender R-Code zeigt die Definition der Prädiktormatrix (Matrix
predMatrix
) für die Imputation in mice
.
predMatrix <- imp0$predictorMatrix
predMatrix[-1,"idschool"] <- -2
# [...]
predMatrix
Listing 5: Datenimputation
Die Imputation kann nun unter dem Aufruf der Funktion mice
unter
Übergabe der Imputationsmethoden und der Prädiktormatrix erfolgen.
Für das PMM werden 5 Donoren gewählt. Insgesamt sollen 10 imputierte Datensätze
generiert werden, wobei der Algorithmus 7 Iterationen durchlaufen soll.
imp1 <- mice::mice( dat1, imputationMethod=impMethod,
predictorMatrix=predMatrix, donors=5,
m=10, maxit=7 )
Abschnitt 8.3.2: Dimensionsreduzierende Verfahren für Kovariaten im latenten Regressionsmodell
Listing 6: Kovariatenauswahl, Interaktionsbildung und Bestimmung PLS-Faktoren
Die Methode des Partial Least Squares soll für den Datensatz data08J
illustriert werden.
Es wird zum Auffüllen der Kovariaten mit fehlenden Werten nur ein imputierter
Datensatz erstellt.
Danach wird eine PLS-Regression des WLE der Hörverstehenskompetenz
E8LWLE
auf Kovariaten und deren Interaktionen bestimmt.
Für die Bestimmung der PLS-Faktoren wird das R-Paket pls
verwendet.
Die nachfolgende R-Syntax zeigt die Kovariatenauswahl, die Bildung der
Interaktionen und die Bestimmung der PLS-Faktoren. Insgesamt entstehen durch
Aufnahme der Haupteffekte und Interaktionen 55 Kovariaten.
dat <- datenKapitel08$data08J
#*** Kovariatenauswahl
kovariaten <- scan(what="character", nlines=2)
female migrant HISEI eltausb buch
SK LF NSchueler NKlassen SES_Schule
X <- scale( dat[, kovariaten ] )
V <- ncol(X)
# bilde alle Zweifachinteraktionen
c2 <- combinat::combn(V,2)
X2 <- apply( c2 , 2 , FUN = function(cc){
X[,cc[1]] * X[,cc[2]] } )
X0 <- cbind( X , X2 )
mod1 <- pls::plsr( dat$E8LWLE ~ X0 , ncomp=55 )
summary(mod1)
Abschnitt 8.3.3: Ziehung von Plausible Values in R
In diesem Abschnitt soll die Ziehung von Plausible Values mit dem R-Paket
TAM
illustriert werden. Dabei beschränken wir uns auf den
Kompetenzbereich des Hörverstehens.
Listing 7: PLS-Faktoren auswählen
In Abschnitt 8.3.2 wurden dabei die Kovariaten auf PLS-Faktoren reduziert. Für die Ziehung von Plausible Values werden nachfolgend 10 PLS-Faktoren verwendet.
facs <- mod1$scores[,1:10]
Listing 8: Rasch-Skalierung
Für die Hörverstehenskompetenz im Datensatz data08K
wird nachfolgend das
Messmodell als Rasch-Modell geschätzt. Dabei werden Stichprobengewichte für die
Bestimmung der Itemparameter verwendet.
dat2 <- datenKapitel08$data08K
items <- grep("E8L", colnames(dat2), value=TRUE)
# Schätzung des Rasch-Modells in TAM
mod11 <- TAM::tam.mml( resp= dat2[,items ] ,
pid = dat2$idstud,
pweights = dat2$wgtstud )
Listing 9: Individuelle Likelihood, latente Regressionsmodell und PV-Ziehung
Bei einer Fixierung von Itemparametern ist die bedingte Verteilung
P(\mathbf{X}|\boldsymbol{\theta})
des Messmodells konstant.
Die Schätzung von Item-Response-Modellen erfolgt in TAM
unter Verwendung
eines diskreten Gitters von \boldsymbol{\theta}
-Werten.
Während der Anpassung des Rasch-Modells in mod11
liegt daher die auf
diesem Gitter ausgewertete sog. individuelle Likelihood
P(\mathbf{X}|\boldsymbol{\theta})
vor, die mit der Funktion
IRT.likelihood
aus dem Objekt mod11
extrahiert werden kann.
Das latente Regressionsmodell kann unter Rückgriff auf die individuelle
Likelihood mit der Funktion tam.latreg
angepasst werden.
Die Ziehung der Plausible Values erfolgt anschließend mit der Funktion
tam.pv
.
#*** extrahiere individuelle Likelihood
lmod11 <- IRT.likelihood(mod11)
#*** schätze latentes Regressionsmodell
mod12 <- TAM::tam.latreg( like = lmod11 , Y = facs )
#*** ziehe Plausible Values
pv12 <- TAM::tam.pv(mod12, normal.approx=TRUE,
samp.regr=TRUE , ntheta=400)
Listing 10: Plausible Values extrahieren
Die imputierten Plausible Values lassen sich im Element $pv
des
Ergebnisobjekts aus tam.pv
extrahieren.
#*** Plausible Values für drei verschiedene Schüler
round( pv12$pv[c(2,5,9),] , 3 )
Author(s)
Alexander Robitzsch, Giang Pham, Takuya Yanagida
References
Robitzsch, A., Pham, G. & Yanagida, T. (2016). Fehlende Daten und Plausible Values. In S. Breit & C. Schreiner (Hrsg.), Large-Scale Assessment mit R: Methodische Grundlagen der österreichischen Bildungsstandardüberprüfung (pp. 259–293). Wien: facultas.
See Also
Zu datenKapitel08
, den im Kapitel verwendeten Daten.
Zurück zu Kapitel 7
, Statistische Analysen produktiver
Kompetenzen .
Zu Kapitel 9
, Fairer Vergleich in der Rückmeldung.
Zur Übersicht
.
Examples
## Not run:
library(TAM)
library(mice)
library(miceadds)
library(pls)
library(combinat)
library(mitml)
data(datenKapitel08)
data08H <- datenKapitel08$data08H
data08I <- datenKapitel08$data08I
data08J <- datenKapitel08$data08J
data08K <- datenKapitel08$data08K
## -------------------------------------------------------------
## Abschnitt 8.1.1: Konsequenzen fehlender Daten und
## messfehlerbehafteter Variablen
## -------------------------------------------------------------
# -------------------------------------------------------------
# Abschnitt 8.1.1, Listing 1: Deskriptive Statistiken des
# Illustrationsdatensatzes
#
data(datenKapitel08)
dat <- datenKapitel08$data08I[,-1]
#*** Missinganteile
round( colMeans( is.na(dat), na.rm=TRUE) , 2 )
#*** Mittelwerte
round( apply( dat , 2 , mean , na.rm=TRUE ) , 2 )
#*** Zusammenhang von Missingindikator und Variablen
round( miceadds::mi_dstat( dat[,c("WLE","X")] ) , 2 )
#*** Varianzen
round( apply( dat , 2 , var , na.rm=TRUE ) , 2 )
#*** Korrelationsmatrix
round( cor( dat , use = "pairwise.complete.obs") , 2 )
## -------------------------------------------------------------
## Abschnitt 8.2: Multiple Imputation
## -------------------------------------------------------------
# -------------------------------------------------------------
# Abschnitt 8.2.5, Listing 1: Variablenauswahl und leere
# Imputation
#
set.seed(56)
data(datenKapitel08)
dat <- datenKapitel08$data08H
# wähle Variablen aus
dat1 <- dat[ , c("idschool", "HISEI", "buch", "E8LWLE",
"SES_Schule") ]
colMeans(is.na(dat1))
# führe leere Imputation durch
imp0 <- mice::mice(dat1, m=0, maxit=0)
# -------------------------------------------------------------
# Abschnitt 8.2.5, Listing 2: Spezifikation der Imputations-
# methoden
#
impMethod <- imp0$method
impMethod["HISEI"] <- "2l.continuous"
# [...] weitere Spezifikationen
impMethod["SES_Schule"] <- "2lonly.norm"
impMethod
# -------------------------------------------------------------
# Abschnitt 8.2.5, Listing 2b: Ergänzung zum Buch
#
# [...] weitere Spezifikationen
impMethod["buch"] <- "2l.pmm"
impMethod
# -------------------------------------------------------------
# Abschnitt 8.2.5, Listing 3: Definition der Prädiktormatrix
# für die Imputation in mice
#
predMatrix <- imp0$predictorMatrix
predMatrix[-1,"idschool"] <- -2
# [...]
predMatrix
# -------------------------------------------------------------
# Abschnitt 8.2.5, Listing 3b: Ergänzung zum Buch
#
# [...]
predMatrix[2:4,2:4] <- 3*predMatrix[2:4,2:4]
predMatrix
# -------------------------------------------------------------
# Abschnitt 8.2.5, Listing 4: Führe Imputation durch
#
imp1 <- mice::mice( dat1, imputationMethod=impMethod,
predictorMatrix=predMatrix, donors=5, m=10, maxit=7)
# -------------------------------------------------------------
# Abschnitt 8.2.5, Listing 4b: Ergänzung zum Buch
#
#-- Mittelwert HISEI
wmod1 <- with( imp1 , lm(HISEI ~ 1))
summary( mice::pool( wmod1 ) )
#-- lineare Regression HISEI auf Büchervariable
wmod2 <- with( imp1 , lm(E8LWLE ~ HISEI) )
summary( mice::pool( wmod2 ))
#-- Inferenz Mehrebenenmodelle mit Paket mitml
imp1b <- mitml::mids2mitml.list(imp1)
wmod3 <- with(imp1b, lme4::lmer( HISEI ~ (1|idschool)) )
mitml::testEstimates(wmod3, var.comp=TRUE)
## ------------------------------------------------------------
## Abschnitt 8.3.2: Dimensionsreduzierende Verfahren für
## Kovariaten im latenten Regressionsmodell
## ------------------------------------------------------------
# -------------------------------------------------------------
# Abschnitt 8.3.2, Listing 1: Kovariatenauswahl, Interaktions-
# bildung und Bestimmung PLS-Faktoren
#
set.seed(56)
data(datenKapitel08)
dat <- datenKapitel08$data08J
#*** Kovariatenauswahl
kovariaten <- scan(what="character", nlines=2)
female migrant HISEI eltausb buch
SK LF NSchueler NKlassen SES_Schule
X <- scale( dat[, kovariaten ] )
V <- ncol(X)
# bilde alle Zweifachinteraktionen
c2 <- combinat::combn(V,2)
X2 <- apply( c2 , 2 , FUN = function(cc){
X[,cc[1]] * X[,cc[2]] } )
X0 <- cbind( X , X2 )
# Partial Least Squares Regression
mod1 <- pls::plsr( dat$E8LWLE ~ X0 , ncomp=55 )
summary(mod1)
# -------------------------------------------------------------
# Abschnitt 8.3.2, Listing 1b: Ergänzung zum Buch
# Abbildung: Aufgeklärter Varianzanteil
#
# Principal Component Regression (Extraktion der Hauptkomponenten)
mod2 <- pls::pcr( dat$E8LWLE ~ X0 , ncomp=55 )
summary(mod2)
#*** extrahierte Varianzen mit PLS-Faktoren und PCA-Faktoren
res <- mod1
R2 <- base::cumsum(res$Xvar) / res$Xtotvar
ncomp <- 55
Y <- dat$E8LWLE
R21 <- base::sapply( 1:ncomp , FUN = function(cc){
1 - stats::var( Y - res$fitted.values[,1,cc] ) / stats::var( Y )
} )
dfr <- data.frame("comp" = 1:ncomp , "PLS" = R21 )
res <- mod2
R2 <- base::cumsum(res$Xvar) / res$Xtotvar
ncomp <- 55
Y <- dat$E8LWLE
R21 <- base::sapply( 1:ncomp , FUN = function(cc){
1 - stats::var( Y - res$fitted.values[,1,cc] ) / stats::var( Y )
} )
dfr$PCA <- R21
plot( dfr$comp , dfr$PLS , type="l" , xlab="Anzahl Faktoren" ,
ylab="Aufgeklärter Varianzanteil" ,
ylim=c(0,.3) )
points( dfr$comp , dfr$PLS , pch=16 )
points( dfr$comp , dfr$PCA , pch=17 )
lines( dfr$comp , dfr$PCA , lty=2 )
legend( 45 , .15 , c("PLS" , "PCA") , pch=c(16,17) , lty=c(1,2))
## ------------------------------------------------------------
## Abschnitt 8.3.3: Ziehung von Plausible Values in R
## ------------------------------------------------------------
# -------------------------------------------------------------
# Abschnitt 8.3.3, Listing 1: PLS-Faktoren auswählen
#
facs <- mod1$scores[,1:10]
# -------------------------------------------------------------
# Abschnitt 8.3.3, Listing 1b: Ergänzung zum Buch
#
set.seed(98766)
# -------------------------------------------------------------
# Abschnitt 8.3.3, Listing 2: Anpassung kognitive Daten
#
data(datenKapitel08)
dat2 <- datenKapitel08$data08K
items <- grep("E8L", colnames(dat2), value=TRUE)
# Schätzung des Rasch-Modells in TAM
mod11 <- TAM::tam.mml( resp= dat2[,items ] ,
pid = dat2$idstud, pweights = dat2$wgtstud )
# -------------------------------------------------------------
# Abschnitt 8.3.3, Listing 3: Individuelle Likelihood, latentes
# Regressionsmodell und PV-Ziehung
#
#*** extrahiere individuelle Likelihood
lmod11 <- IRT.likelihood(mod11)
#*** schätze latentes Regressionsmodell
mod12 <- TAM::tam.latreg( like = lmod11 , Y = facs )
#*** ziehe Plausible Values
pv12 <- TAM::tam.pv(mod12, normal.approx=TRUE,
samp.regr=TRUE , ntheta=400)
# -------------------------------------------------------------
# Abschnitt 8.3.3, Listing 4: Plausible Values extrahieren
#
#*** Plausible Values für drei verschiedene Schüler
round( pv12$pv[c(2,5,9),] , 3 )
# -------------------------------------------------------------
# Abschnitt 8.3.3, Listing 4b: Ergänzung zum Buch
#
hist( pv12$pv$PV1.Dim1 )
# Korrelation mit Kovariaten
round( cor( pv12$pv$PV1.Dim1 , dat[,kovariaten] ,
use="pairwise.complete.obs") , 3 )
round( cor( dat$E8LWLE , dat[,kovariaten] ,
use="pairwise.complete.obs" ) , 3 )
## End(Not run)