2016-06-29 19 views
2

So verwende ich das mice Paket, um fehlende Daten zu imputieren. Ich bin neu in der Imputation, also bin ich zu einem Punkt gekommen, aber habe eine steile Lernkurve erreicht. Um ein Spielzeug Beispiel:Imputation mit Mäusen mit gruppierten Daten

library(mice) 
# Using nhanes dataset as example 
df1 <- mice(nhanes, m=10) 

So wie Sie sehen können uns df1 10 mal kalkulatorische meist Standardeinstellung - und ich fühle mich wohl, dieses Ergebnis in Regressionsmodellen, Ergebnisse etc. Aber in meinen wirklichen Leben Daten bündeln, Ich habe Umfragedaten aus verschiedenen Ländern. Und so unterscheiden sich die Missing-Levels nach Ländern, ebenso wie die Werte bestimmter Variablen - d. H. Alter, Bildungsniveau usw. Deshalb möchte ich die Missstände unterstellen, so dass das Land sich gruppieren kann. Also werde ich eine Gruppenvariable erstellen, die keine Missings haben (natürlich in diesem Spielzeug Beispiel der Korrelationen mit anderen Variablen fehlen, aber in meinen realen Daten existieren sie)

# Create a grouping variable 
nhanes$country <- sample(c("A", "B"), size=nrow(nhanes), replace=TRUE) 

So wie ich mice() sagen, dass diese Variable unterscheidet sich von den anderen - dh es ist eine Ebene in einem mehrstufigen Datensatz?

+1

Wäre das Ausführen von 'Mäusen' auf jeder Faktorebene ein guter Workaround? Zum Beispiel, 'Mäuse (nhanes [welche (nhans $ country == 'A'),], m = 10)' und dann Schleife über die Faktoren oder verwenden Sie Ihre Lieblings-R's groupby Operation? Dies setzt natürlich voraus, dass man für das Land "A" keine anderen Länder benötigt, dh sie sind unabhängig. –

+0

Nun ja, ich habe es versucht - und es gibt eine Funktion, um die Datensätze 'rbind.mids (') zu kombinieren - aber ich habe festgestellt, dass dieser Functino mir viele Warnungen und Fehler liefert, die ich nicht herausfinden konnte Die Erkennung der Datenstruktur wäre besser Danke für den Vorschlag – user2498193

Antwort

2

Wenn Sie Cluster wie in "Mixed-Effects" -Modellen denken, sollten Sie die von mice bereitgestellten Methoden verwenden, die für Clustered-Daten vorgesehen sind. Diese Verfahren können in der manual gefunden werden und werden üblicherweise wie 2l.something vorangestellt.

Die Vielzahl von Verfahren zum gruppierten Datum ist etwas in mice beschränkt, sondern kann unter Verwendung von I 2l.pan für fehlende Daten, die in untergeordneten Einheiten und 2l.only.norm auf Clusterebene empfehlen.

Als Alternative zu Mixed-Effects-Modellen können Sie Dummy-Indikatoren verwenden, um die Clusterstruktur darzustellen (d. H. Eine Dummy-Variable für jeden Cluster). Diese Methode ist nicht ideal, wenn Sie die Cluster aus der Perspektive von Mixed-Effects-Modellen betrachten. Wenn Sie also Mixed-Effects-Analysen durchführen möchten, sollten Sie bei Mixed-Effects-Modellen bleiben.

Im Folgenden zeige ich ein Beispiel für beide Strategien.

Zubereitung:

library(mice) 
data(nhanes) 

set.seed(123) 
nhanes <- within(nhanes,{ 
    country <- factor(sample(LETTERS[1:10], size=nrow(nhanes), replace=TRUE)) 
    countryID <- as.numeric(country) 
}) 

Fall 1: Imputation Mixed-Effekte mit Hilfe von Modellen

Dieser Abschnitt verwendet 2l.pan die drei Variablen mit fehlenden Daten zurechnen.Beachten Sie, dass ich clusterID als Clustervariable verwenden, indem Sie in der Prädiktormatrix eine -2 angeben. Zu allen anderen Variablen weise ich nur feste Effekte zu (1).

# "empty" imputation as a template 
imp0 <- mice(nhanes, maxit=0) 
pred1 <- imp0$predictorMatrix 
meth1 <- imp0$method 

# set imputation procedures 
meth1[c("bmi","hyp","chl")] <- "2l.pan" 

# set predictor Matrix (mixed-effects models with random intercept 
# for countryID and fixed effects otherwise) 
pred1[,"country"] <- 0  # don't use country factor 
pred1[,"countryID"] <- -2 # use countryID as cluster variable 
pred1["bmi", c("age","hyp","chl")] <- c(1,1,1) # fixed effects (bmi) 
pred1["hyp", c("age","bmi","chl")] <- c(1,1,1) # fixed effects (hyp) 
pred1["chl", c("age","bmi","hyp")] <- c(1,1,1) # fixed effects (chl) 

# impute 
imp1 <- mice(nhanes, maxit=20, m=10, predictorMatrix=pred1, method=meth1) 

Fall 2: Imputation dummy Indikatoren (dis) für Cluster

In diesem Abschnitt verwendet pmm für imputation und die gruppierten Struktur wird in einer "ad hoc" Art und Weise dargestellt. Das heißt, die Cluster werden nicht durch zufällige Effekte dargestellt, sondern durch feste Effekte. Dies kann die Variabilität der Variablen auf Clusterniveau mit fehlenden Daten überbewerten, also stellen Sie sicher, dass Sie wissen, was Sie tun, wenn Sie es verwenden.

# create dummy indicator variables 
DIs <- with(nhanes, contrasts(country)[country,]) 
colnames(DIs) <- paste0("country",colnames(DIs)) 
nhanes <- cbind(nhanes,DIs) 


# "empty" imputation as a template 
imp0 <- mice(nhanes, maxit=0) 
pred2 <- imp0$predictorMatrix 
meth2 <- imp0$method 

# set imputation procedures 
meth2[c("bmi","hyp","chl")] <- "pmm" 

# for countryID and fixed effects otherwise) 
pred2[,"country"] <- 0  # don't use country factor 
pred2[,"countryID"] <- 0 # don't use countryID 
pred2[,colnames(DIs)] <- 1 # use dummy indicators 
pred2["bmi", c("age","hyp","chl")] <- c(1,1,1) # fixed effects (bmi) 
pred2["hyp", c("age","bmi","chl")] <- c(1,1,1) # fixed effects (hyp) 
pred2["chl", c("age","bmi","hyp")] <- c(1,1,1) # fixed effects (chl) 

# impute 
imp2 <- mice(nhanes, maxit=20, m=10, predictorMatrix=pred2, method=meth2) 

Wenn Sie lesen wollen, was diese Methoden zu denken, haben einen Blick auf one oder two von these Papieren.

+0

Hallo SimonG. Große Antwort, es hilft viel! Dies hilft mir viel besser zu verstehen als die Paket-Referenz. Ich habe jedoch eine Frage. In Fall 1 haben Sie -2 verwendet, um die Clustervariable anstelle von +2 anzugeben. Was ist der Unterschied in -2 und +2 - dies wird nicht in der Hilfe-Datei erklärt, die ich sehen kann. – user2498193

+1

Es wird im [manual] (https://cran.r-project.org/web/packages/mice/mice.pdf) (Seite 47) erklärt, wo sie das 'type' Argument von' 2l.pan' erklären . Das 'type'-Argument beschreibt, wie' Mäuse' die Zeilen in der Prädiktormatrix ('pred1') versteht. In allen zweistufigen Funktionen wird die mit "-2" bezeichnete Variable als Clustervariable interpretiert. Diejenigen mit einer "1" werden als Prädiktoren mit festen Effekten verstanden, "2" als Prädiktoren mit zufälligen Effekten. Die Codes "3" und "4" arbeiten ähnlich wie "1" und "2" mit dem Unterschied, dass der Clustermittelwert berechnet und als zusätzlicher Prädiktor einbezogen wird. – SimonG

+0

Ahh brilliant danke das habe ich vermisst. Vielen Dank für Ihre Hilfe! – user2498193

1

Sie müssen eine Prädiktormatrix einrichten, um den Mäusen zu sagen, welche Variable verwendet werden soll, um eine andere zuzuordnen. Ein schneller Weg ist die Verwendung von predictorM<-quickpred(nhanes)

Dann ändern Sie die 1s in der Matrix zu 2, wenn es eine normale Variable ist und -2, wenn es die Ebene zwei Variable für verschiedene Länder ist, und senden Sie es an die Mäuse Befehl als predictorMatrix =predictorM. Im Methodenkommando müssen Sie nun die Methoden auf 2l.norm setzen, wenn es sich um eine metrische Variable handelt, oder 2l.binom, wenn es sich um eine binäre Variable handelt. Für letztere benötigen Sie die von Sabine Zinn geschriebene Funktion (https://www.neps-data.de/Portals/0/Working%20Papers/WP_XXXI.pdf). Leider ist mir nicht bekannt, ob es Methoden zur Imputation von zwei Level-Count-Daten gibt.

Achten Sie darauf, dass die Eingabe eines mehrstufigen Datensatzes den Prozess verlangsamen wird. Meiner Erfahrung nach funktioniert die Resampling-Methode, wie PMM oder im Paket von Pavian, gut, um die hierarchische Struktur der Daten zu erhalten, und sie sind viel schneller im Gebrauch.

+0

Danke für deine Antwort Ich verstehe nicht ganz, wie ich zu 2 & -2 wechseln soll - welche Zellen ändere ich (auch nicht aus der Funktion helpfile) Methoden '2l.norm' und' 2l.binom' - sind diese Dinge, die ich für jede Variable in dem data.frame einstellen muss, das ich anspreche? re: 'PMM' - ist das nicht Teil des 'mice 'command? – user2498193

+1

Bitte verwenden Sie nicht '2l.norm'. Die Funktion ist immer noch fehlerhaft, und niemand war da, um es zu beheben. Für kontinuierliche Variablen in gruppierten Daten sollte die' 2l.pan' Methode sein verwendet – SimonG

+2

Das OP lieferte einen Beispieldatensatz, diese Antwort wäre viel impro Indem Sie eine codierte Darstellung Ihrer Antwort bereitstellen, die für die Beispieldaten spezifisch ist, anstatt nur die Lösung in "Pseudocode-Sprache" zu durchlaufen. –