Wie führt man eine Imputation von Werten in einer sehr großen Anzahl von Datenpunkten durch?


12

Ich habe einen sehr großen Datensatz und es fehlen ungefähr 5% zufällige Werte. Diese Variablen sind miteinander korreliert. Der folgende Beispiel-R-Datensatz ist nur ein Spielzeugbeispiel mit Dummy-korrelierten Daten.

set.seed(123)

# matrix of X variable 
xmat <- matrix(sample(-1:1, 2000000, replace = TRUE), ncol = 10000)
colnames(xmat) <- paste ("M", 1:10000, sep ="")
rownames(xmat) <- paste("sample", 1:200, sep = "")
#M variables are correlated 

N <- 2000000*0.05 # 5% random missing values 
inds <- round ( runif(N, 1, length(xmat)) )
xmat[inds] <- NA 
> xmat[1:10,1:10]
         M1 M2 M3 M4 M5 M6 M7 M8 M9 M10
sample1  -1 -1  1 NA  0 -1  1 -1  0  -1
sample2   1  1 -1  1  0  0  1 -1 -1   1
sample3   0  0  1 -1 -1 -1  0 -1 -1  -1
sample4   1  0  0 -1 -1  1  1  0  1   1
sample5  NA  0  0 -1 -1  1  0 NA  1  NA
sample6  -1  1  0  1  1  0  1  1 -1  -1
sample7  NA  0  1 -1  0  1 -1  0  1  NA
sample8   1 -1 -1  1  0 -1 -1  1 -1   0
sample9   0 -1  0 -1  1 -1  1 NA  0   1
sample10  0 -1  1  0  1  0  0  1 NA   0

Gibt es in dieser Situation eine (beste) Möglichkeit, fehlende Werte zu unterstellen? Ist der Random Forest-Algorithmus hilfreich? Jede funktionierende Lösung in R wäre sehr dankbar.

Bearbeitungen:

(1) Fehlende Werte werden zufällig auf die Variablen und Stichproben verteilt. Die Anzahl der Variablen ist sehr groß (hier im Beispiel - 10000), während die Anzahl der Stichproben hier im obigen Dummy-Beispiel etwa 200 beträgt Betrachtet man eine Stichprobe über alle Variablen (10000), besteht die hohe Wahrscheinlichkeit, dass bei einer Variablen ein Wert fehlt - aufgrund der großen Anzahl von Variablen. Das Löschen des Samples ist also keine Option.

(2) Die Variable kann sowohl quantitativ als auch qualitativ (binär) im Rahmen der Anrechnung behandelt werden. Das einzige Urteil ist, wie gut wir es vorhersagen können (Genauigkeit). Vorhersagen wie 0,98 anstelle von 1 könnten also akzeptabel sein, eher 0 gegen 1 oder -1 gegen 1. Ich muss möglicherweise einen Kompromiss zwischen Rechenzeit und Genauigkeit eingehen.

(3) Das Problem, über das ich nachgedacht habe, wie sich eine Überanpassung auf die Ergebnisse auswirken kann, da die Anzahl der Variablen im Vergleich zur Anzahl der Stichproben groß ist.

(4) Da die Gesamtmenge der fehlenden Werte ungefähr 5% beträgt und zufällig ist (nicht auf Variablen oder Proben konzentriert, da Vorsichtsmaßnahmen getroffen wurden, um Variablen oder Proben mit sehr hohen fehlenden Werten zu entfernen)

(5) Die Vervollständigung der Daten für die Analyse ist das erste Ziel und die Genauigkeit ist zweitrangig. Also nicht zu empfindlich auf Genauigkeit.

r  random-forest  missing-data  data-imputation  multiple-imputation  large-data  definition  moving-window  self-study  categorical-data  econometrics  standard-error  regression-coefficients  normal-distribution  pdf  lognormal  regression  python  scikit-learn  interpolation  r  self-study  poisson-distribution  chi-squared  matlab  matrix  r  modeling  multinomial  mlogit  choice  monte-carlo  indicator-function  r  aic  garch  likelihood  r  regression  repeated-measures  simulation  multilevel-analysis  chi-squared  expected-value  multinomial  yates-correction  classification  regression  self-study  repeated-measures  references  residuals  confidence-interval  bootstrap  normality-assumption  resampling  entropy  cauchy  clustering  k-means  r  clustering  categorical-data  continuous-data  r  hypothesis-testing  nonparametric  probability  bayesian  pdf  distributions  exponential  repeated-measures  random-effects-model  non-independent  regression  error  regression-to-the-mean  correlation  group-differences  post-hoc  neural-networks  r  time-series  t-test  p-value  normalization  probability  moments  mgf  time-series  model  seasonality  r  anova  generalized-linear-model  proportion  percentage  nonparametric  ranks  weighted-regression  variogram  classification  neural-networks  fuzzy  variance  dimensionality-reduction  confidence-interval  proportion  z-test  r  self-study  pdf 

1
Der Grund, warum die Daten fehlen, hängt stark von der Wahl der geeigneten Technik ab. Wenn zum Beispiel die Daten völlig zufällig fehlen, verlieren Sie wenig, indem Sie alle Fälle mit fehlenden Werten löschen (weil der Datensatz groß ist und relativ wenige Werte fehlen). Wenn das Fehlen jedoch mit wichtigen Variablen in der Analyse zusammenhängt, kann das Löschen dieser Fälle zu einer Verzerrung führen.
whuber

1
Ich bin damit einverstanden, dass es nicht möglich ist, einen Datensatz dieser Größe zu entfernen, da in jedem Fall mindestens bei einer Variablen ein Wert fehlt. Dies führt zu einem vollständigen Datenverlust.
John

4
Das ändert die Frage erheblich, John, denn in der jetzigen Form heißt es ausdrücklich anders: Es wird behauptet, dass nur 5% der Werte fehlen. Selbst wenn wir verstehen, dass die 5% auf alle Einträge in der Datenmatrix zutreffen , und nicht auf 5% der Fälle, jeder, der das Beispiel als Hinweis auf die Art Ihrer Daten betrachtet, zu dem gültigen Schluss kommen, dass nicht mehr als 10 * 5% = 50 % der Fälle haben fehlende Werte. Die drei Dinge, die bei solchen Fragen am wichtigsten sind, sind (1) der Zweck der Analyse, (2) die Art des Fehlens und (3) das Ausmaß des Fehlens.
whuber

Antworten:


8

Abhängig von Ihrer Situation und Ihrem Datensatz gibt es zwei Möglichkeiten, um Probleme mit großen Variablen und kleinen Stichproben (Beobachtungen) zu lösen.

(1) Verwenden Sie einfach Stichproben (Beobachtungen) als Variable, vorausgesetzt, dass die Bewertungen für alle Variablen gleich oder normalisiert sind.

(2) Verwenden Sie Variablen als Variable, aber führen Sie während der Eingabe einige Stichproben durch, damit die Anzahl der Variablen unter der Anzahl der Stichproben liegt, und führen Sie schließlich die Daten zusammen.

Das folgende Training können Sie an Ihre Bedürfnisse anpassen. Ich gehe davon aus, dass die Variable kontinuierlich ist, aber Sie trainieren ähnlich für diskrete Variablen. Hier gebe ich ein kleines Beispiel für eine schnelle Überprüfung.

Erstens können für das Training, das korrelierte Daten generiert, die Beobachtungen (Proben) korreliert werden. Dies kann in Situationen realistisch sein, in denen Variablen als unabhängig angenommen werden, während Beobachtungen korreliert werden. Aber in anderen Situationen, in denen sowohl Beobachtungen als auch Variablen korrelieren.

# example correlated data, correlated by observations 
# number of observations 
nobs = 200
nvars = 100
# number of variables 
# covariance matrix matrixCR to create correlated data 
matrixCR <- matrix(NA, nrow = nobs, ncol = nobs)
diag(matrixCR) <- 1
matrixCR[upper.tri (matrixCR, diag = FALSE)] <- 0.5
matrixCR[lower.tri (matrixCR, diag = FALSE)] <- 0.5
matrixCR[1:10,1:10]
L = chol(matrixCR)# Cholesky decomposition
nvars = dim(L)[1]
set.seed(123)
rM = t(L) %*% matrix(rnorm(nvars*nobs), nrow=nvars, ncol=nobs)
rownames(rM) <- paste("V", 1:nvars, sep = "") 
colnames(rM) <- paste("O", 1:nobs, sep = "")
rM[1:10,1:10]



# introduce missing values in random places 
N <- round(nobs*nvars*0.05,0) # 5% random missing values 
set.seed(123)
inds <- round ( runif(N, 1, length(rM)) )
rM1 <- rM
rM1[inds] <- NA

Ich benutze missForestPaket für die Anrechnung, die von der abhängenrandomForest Paket um dies zu tun. Sie können parallel rechnen, wenn Sie eine sehr große Anzahl von Datenpunkten zu unterstellen haben.

# now use the rM1 matrix in imputation. 
require(missForest)
out.m <- missForest(rM1, maxiter = 10, ntree = 300)
# imputed 
imp.rM1 <- out.m$ximp

Da dies ein simulierter Datensatz ist, haben wir den Luxus, die Genauigkeit der Imputation abzuschätzen, indem wir das Original vergleichen, bevor fehlende Werte mit den imputierten Werten eingeführt werden.

# actual values that were made missing 
aval <- rM[inds]
impv <- imp.rM1[inds]

# accuracy - defined as correlation between actual (before na introduction) and imputed values 
cor(aval,impv)
[1] 0.6759404

Sie können dies umgehen, um die Genauigkeit zu erhöhen. Viel Glück !


5

Es gibt eine Fülle von Datenimputationsbüchern, so dass es schwierig ist, in diesem Rahmen eine Antwort zu geben.

yx .

y=f(x) wird trainiert und die fehlenden Werte werden durch die von unserem Modell vorhergesagten Werte ersetzt. Ihre Daten scheinen kategorisch zu sein, sodass eine zufällige Gesamtstruktur eine gute Wahl sein kann.

Wenn Ihr Datensatz sehr groß ist, sollten Sie einen schnellen oder skalierbaren Algorithmus verwenden.


danke, hast du einen buchvorschlag
John

nichts Bestimmtes. Aber wenn Sie Google Data Imputation finden Sie eine Menge Dinge
Donbeo

Wenn jedoch nur wenige Werte fehlen, können Sie einfach alle Zeilen entfernen. Aus Ihren Datensätzen
Donbeo

3
Obwohl Sie immer nur Fälle mit fehlenden Werten löschen können, ist dies manchmal eine schlechte Wahl, je nachdem, warum die Daten fehlen.
whuber

@whuber Ich stimme dir vollkommen zu, aber oft ist dies nur die sicherere Wahl.
Donbeo

5

Das ist eine wirklich interessante Frage. Ich suche auch das Gleiche. Tatsächlich gibt es viele verschiedene Möglichkeiten, damit umzugehen.

Meiner Meinung nach besteht das erste darin, festzustellen, welche Art von fehlenden Daten Sie haben - völlig zufällig (MCAR), zufällig (MAR) oder nicht zufällig (NMAR). Dies ist schwierig und kontrovers zu beweisen, aber dieses Papier zeigt eine interessante Art, MAR-Daten zu betrachten.

Um mit multipler Imputation umzugehen, hat R einige Pakete:

  • MICE (was sehr gebraucht zu sein scheint),
  • randomForest,
  • Hmisc
  • Amelia
  • mi

Dies sind nur einige der Pakete, die ich bisher gefunden habe.

MICE hat auch zufällige Gesamtstrukturen und einige andere Methoden implementiert, wie z. B. die Vorhersage des Mittelwerts.

Dies ist nicht viel, kann Ihnen aber dabei helfen, einige Dinge herauszufinden. Sobald ich Ergebnisse habe oder mich für eine Methode entschieden habe, bearbeite ich den Beitrag.

Viel Glück!


Meine Daten sind MCAR.
John

1
Wenn Ihre Daten MCAR sind, können Sie nur eine vollständige Fallanalyse verwenden. Viele Veröffentlichungen berichten, dass die Verwendung einer vollständigen Fallanalyse mit MCAR-Daten die beste Lösung ist. Zumindest berichten einige der Papiere, die ich gefunden habe, davon, auch wenn man sie mit anderen Anrechnungsmethoden vergleicht
psoares

3

Interessante Frage. Der Trick dabei ist, dass Sie für die mehrfache Imputation mehr als nur ein Vorhersagemodell benötigen (was zum Beispiel mit einem Ansatz des maschinellen Lernens leicht zu erreichen wäre). Wir werden diese Modelle als Simulationsmodelle bezeichnen, da es sich nicht ganz um Wahrscheinlichkeitsmodelle handelt.

Der kombinierte Aspekt der Merkmalsauswahl (groß p) und das Trainieren eines Simulationsmodells lässt mich denken, dass ein Bayes'scher Ansatz der beste ist. Das bedeutet auch, dass es keinen klaren Ansatz dafür gibt. Für mich hätte der beste Ansatz den folgenden Ansatz:

  1. Identifizieren Sie alle Fehlverhaltensmuster
  2. Verwenden Sie für jedes Muster einen Bayes'schen Merkmalsauswahlansatz, um Hintergewichtungen zuzuweisen, um Fälle in den Daten zu vervollständigen.
  3. Stichproben Sie iterativ vollständige Fälle ab, um vollständige Datenrahmen zu generieren.

3

Ihr Problem scheint auf eine Art niedrigrangige Matrix-Vervollständigung zugeschnitten zu sein. Versuchen Sie es mit der impute.svd()Funktion aus dem bcvPaket . Ich würde vorschlagen, einen kleinen Rang (das Argument k) zu verwenden - so etwas wie 5.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.