Multiple Imputation für die Regression bei fehlenden Werten in R

Arndt Regorz, Dipl. Kfm. & MSc. Psychologie, 26.04.2022

Dieses ist eine Begleitseite zum Video-Tutorial über die Regressionsanalyse mit multipler Imputation für fehlende Werte mit R (multiple imputation with chained equations).



(Hinweis: Mit Anklicken des Videos wird ein Angebot des Anbieters YouTube genutzt.)

Code aus dem Video-Tutorial:

Hier ist der gesamte Code aus dem Video-Tutorial zur multiplen Imputation bei der Regressionsanalyse mit missing values (MCAR, MAR):

# install.packages("mice")

library(mice)

# Verwendung des Datensatzes nhanes2 aus dem mice Package
?nhanes2
summary(nhanes2)
str(nhanes2)
md.pattern(nhanes2)

# Gewöhnliche Regression mit listweisem Fallauschluss
reg.fit <- lm(chl ~ bmi + hyp, data=nhanes2)
summary(reg.fit)

# Multiple Imputation mit dem mice Paket
#=========================================

# 1. Imputation

imp.data <- mice (data = nhanes2, m = 50, maxit = 10, seed = 12345, print=FALSE)

# Which Methoden wurden zum Imputieren genutzt?
imp.data

#=====================================================================

# (Wenn man sich die vervollständigten Datensätze ansehen möchte:
imp.datasets <- complete(imp.data, "long")
imp.datasets
#)

# (Wenn wir die Imputationmethoden ändern wollten
methods(mice)
my.method <- c("", "pmm", "logreg", "norm")
imp.data2 <- mice (data = nhanes2, m = 50, maxit = 10, seed = 12345,
method = my.method, print=FALSE)
imp.data2
# Aber wir werden für dieses Tutorial die Default-Methoden nehmen)

#=====================================================================

# Prüfen auf Konvergenz der Schätzung
plot(imp.data)

# Prüfen, ob Imputation gültige Werte ergibt
stripplot(imp.data)

#(für die veränderte Schätzmethode:)
stripplot(imp.data2)

# 2. Regression für jeden imputierten Datensatz

reg.fit.mi <- with(imp.data, lm(chl ~ bmi + hyp))

reg.fit.mi

# Regressionsergebnisse beispielhaft für die 3. Imputation
summary(reg.fit.mi$analyses[[3]])

# 3. Poolen der Ergebnisse

pool.fit <- pool(reg.fit.mi)

summary(pool.fit)

# technische Zusatzinfos:
pool.fit
?mipo

# R²
pool.r2 <- pool.r.squared(reg.fit.mi)

pool.r2

# Vergleich mit fallweisem Ausschluss (nochmals)
summary(reg.fit)