library(imputeTS)na.random(mydata) # Random Imputation
na.locf(mydata, option = "locf") # Last Obs. Carried Forward
na.locf(mydata, option = "nocb") # Next Obs. Carried Backward
na.interpolation(mydata) # Linear Interpolation
na.seadec(mydata, algorithm = "interpolation") # Seasonal Adjustment then Linear Interpolation
Mittelwert, Median und Modus
Die Berechnung des Gesamtmittelwerts, des Medians oder des Modus ist eine sehr einfache Imputationsmethode. Es ist die einzige getestete Funktion, die keinen Vorteil aus den Merkmalen der Zeitreihe oder der Beziehung zwischen den Variablen zieht. Sie ist sehr schnell, hat aber deutliche Nachteile. Ein Nachteil ist, dass die Imputation von Mittelwerten die Varianz im Datensatz verringert.
library(imputeTS)na.mean(mydata, option = "mean") # Mean Imputation
na.mean(mydata, option = "median") # Median Imputation
na.mean(mydata, option = "mode") # Mode ImputationIn Python
from sklearn.preprocessing import Imputer
values = mydata.values
imputer = Imputer(missing_values='NaN', strategy='mean')
transformed_values = imputer.fit_transform(values)# strategy can be changed to "median" and "most_frequent"
Lineare Regression
Zu Beginn werden mehrere Prädiktoren der Variablen mit fehlenden Werten anhand einer Korrelationsmatrix ermittelt. Die besten Prädiktoren werden ausgewählt und als unabhängige Variablen in einer Regressionsgleichung verwendet. Die Variable mit fehlenden Daten wird als abhängige Variable verwendet. Fälle mit vollständigen Daten für die Prädiktorvariablen werden zur Erstellung der Regressionsgleichung verwendet; die Gleichung wird dann zur Vorhersage fehlender Werte für unvollständige Fälle verwendet. In einem iterativen Prozess werden die Werte für die fehlende Variable eingefügt und dann alle Fälle zur Vorhersage der abhängigen Variable verwendet. Diese Schritte werden so lange wiederholt, bis sich die vorhergesagten Werte von einem Schritt zum nächsten kaum noch unterscheiden, d.h. konvergieren.
Es liefert „theoretisch“ gute Schätzungen für fehlende Werte. Es gibt jedoch mehrere Nachteile dieses Modells, die die Vorteile überwiegen. Erstens: Da die ersetzten Werte aus anderen Variablen vorhergesagt wurden, neigen sie dazu, „zu gut“ zusammenzupassen, so dass der Standardfehler aufgebläht wird. Außerdem muss man davon ausgehen, dass es eine lineare Beziehung zwischen den in der Regressionsgleichung verwendeten Variablen gibt, obwohl dies möglicherweise nicht der Fall ist.
Multiple Imputation
- Imputation: Imputiert die fehlenden Einträge der unvollständigen Datensätze m-mal (m=3 in der Abbildung). Beachten Sie, dass die imputierten Werte aus einer Verteilung gezogen werden. Bei der Simulation von Zufallsziehungen wird die Unsicherheit der Modellparameter nicht berücksichtigt. Ein besserer Ansatz ist die Verwendung der Markov-Chain-Monte-Carlo-Simulation (MCMC). Dieser Schritt führt zu m vollständigen Datensätzen.
- Analyse: Analysieren Sie jeden der m vollständigen Datensätze.
- Pooling: Integriere die m Analyseergebnisse in ein Endergebnis
# We will be using mice library in r
library(mice)
# Deterministic regression imputation via mice
imp <- mice(mydata, method = "norm.predict", m = 1)
# Store data
data_imp <- complete(imp)# Multiple Imputation
imp <- mice(mydata, m = 5)#build predictive model
fit <- with(data = imp, lm(y ~ x + z))#combine results of all 5 models
combine <- pool(fit)
Dies ist aus den folgenden Gründen die bei weitem bevorzugte Methode für die Imputation:
– Einfache Anwendung
– Keine Verzerrungen (wenn das Imputationsmodell korrekt ist)
Imputation kategorialer Variablen
- Modus-Imputation ist eine Methode, die aber definitiv Verzerrungen mit sich bringt
- Fehlende Werte können als eigene Kategorie behandelt werden. Wir können eine weitere Kategorie für die fehlenden Werte erstellen und sie als eine andere Ebene verwenden. Dies ist die einfachste Methode.
- Prädiktionsmodelle: Hier erstellen wir ein Vorhersagemodell, um die Werte zu schätzen, die die fehlenden Daten ersetzen sollen. In diesem Fall teilen wir unseren Datensatz in zwei Gruppen auf: Einen Satz ohne fehlende Werte für die Variable (Training) und einen anderen mit fehlenden Werten (Test). Wir können Methoden wie logistische Regression und ANOVA für die Vorhersage verwenden
- Multiple Imputation
KNN (K Nearest Neighbors)
Es gibt noch andere maschinelle Lerntechniken wie XGBoost und Random Forest für die Datenimputation, aber wir werden KNN diskutieren, da es weit verbreitet ist. Bei dieser Methode werden k Nachbarn auf der Grundlage eines Abstandsmaßes ausgewählt, und ihr Durchschnitt wird als Imputationsschätzung verwendet. Die Methode erfordert die Auswahl der Anzahl der nächsten Nachbarn und eines Abstandsmaßes. KNN kann sowohl diskrete Attribute (der häufigste Wert unter den k nächsten Nachbarn) als auch kontinuierliche Attribute (der Mittelwert unter den k nächsten Nachbarn)
Die Abstandsmetrik variiert je nach Art der Daten:
1. Kontinuierliche Daten: Die üblicherweise verwendeten Abstandsmetriken für kontinuierliche Daten sind Euklidisch, Manhattan und Cosinus
2. Kategorische Daten: In diesem Fall wird im Allgemeinen die Hamming-Distanz verwendet. Es werden alle kategorialen Attribute genommen und für jedes wird eins gezählt, wenn der Wert zwischen zwei Punkten nicht gleich ist. Die Hamming-Distanz ist dann gleich der Anzahl der Attribute, für die der Wert unterschiedlich war.
Eine der attraktivsten Eigenschaften des KNN-Algorithmus ist, dass er einfach zu verstehen und leicht zu implementieren ist. Die nicht-parametrische Natur des KNN-Algorithmus verschafft ihm einen Vorteil in bestimmten Situationen, in denen die Daten sehr „ungewöhnlich“ sein können.
Einer der offensichtlichen Nachteile des KNN-Algorithmus ist, dass er bei der Analyse großer Datensätze zeitaufwändig wird, da er im gesamten Datensatz nach ähnlichen Instanzen sucht. Darüber hinaus kann die Genauigkeit von KNN bei hochdimensionalen Daten stark beeinträchtigt werden, da es kaum einen Unterschied zwischen dem nächsten und dem entferntesten Nachbarn gibt.
library(DMwR)
knnOutput <- knnImputation(mydata)In python
from fancyimpute import KNN
# Use 5 nearest rows which have a feature to fill in each row's missing features
knnOutput = KNN(k=5).complete(mydata)
Unter allen oben genannten Methoden sind die multiple Imputation und KNN weit verbreitet, wobei die multiple Imputation, da sie einfacher ist, im Allgemeinen bevorzugt wird.
Wenn Sie Fragen zu diesem Beitrag haben, stellen Sie sie bitte in den Kommentaren, und ich werde mein Bestes tun, um zu antworten.