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
Gemiddelde, mediaan en modus
Het berekenen van het algemene gemiddelde, de mediaan of de modus is een zeer elementaire imputatiemethode, het is de enige geteste functie die geen gebruik maakt van de kenmerken van de tijdreeks of de relatie tussen de variabelen. Zij is zeer snel, maar heeft duidelijke nadelen. Een nadeel is dat gemiddelde imputatie de variantie in de dataset vermindert.
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"
Lineaire regressie
Om te beginnen worden verschillende voorspellers van de variabele met ontbrekende waarden geïdentificeerd met behulp van een correlatiematrix. De beste voorspellers worden geselecteerd en als onafhankelijke variabelen in een regressievergelijking gebruikt. De variabele met ontbrekende gegevens wordt gebruikt als afhankelijke variabele. Gevallen met volledige gegevens voor de voorspellende variabelen worden gebruikt om de regressievergelijking op te stellen; de vergelijking wordt vervolgens gebruikt om ontbrekende waarden voor onvolledige gevallen te voorspellen. In een iteratief proces worden waarden voor de ontbrekende variabele ingevoegd en vervolgens worden alle gevallen gebruikt om de afhankelijke variabele te voorspellen. Deze stappen worden herhaald tot er weinig verschil meer is tussen de voorspelde waarden van de ene stap en de volgende, dat wil zeggen dat zij convergeren.
Het levert “theoretisch” goede schattingen op voor ontbrekende waarden. Er zijn echter verscheidene nadelen aan dit model, die de neiging hebben zwaarder te wegen dan de voordelen. Ten eerste, omdat de vervangen waarden uit andere variabelen werden voorspeld, hebben zij de neiging “te goed” bij elkaar te passen en wordt de standaardfout dus kleiner. Men moet er ook van uitgaan dat er een lineair verband bestaat tussen de variabelen die in de regressievergelijking worden gebruikt, terwijl dat er misschien niet is.
Multiple Imputation
- Imputatie: Imputeer de ontbrekende gegevens van de onvolledige gegevensverzamelingen m keer (m=3 in de figuur). Merk op dat geïmputeerde waarden uit een verdeling getrokken worden. Simulatie van willekeurige trekkingen houdt geen rekening met de onzekerheid in de modelparameters. Een betere aanpak is het gebruik van Markov Chain Monte Carlo (MCMC)-simulatie. Deze stap resulteert in m volledige datasets.
- Analyse: Analyseer elk van de m complete datasets.
- Pooling: Integreer de m analyseresultaten tot een eindresultaat
# 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)
Dit is veruit de meest geprefereerde methode voor imputatie om de volgende redenen:
– Gemakkelijk te gebruiken
– Geen biases (als het imputatiemodel correct is)
Imputatie van categorische variabelen
- Mode imputatie is één methode, maar die zal zeker bias introduceren
- De ontbrekende waarden kunnen als een aparte categorie op zich worden behandeld. We kunnen een andere categorie voor de ontbrekende waarden creëren en ze als een ander niveau gebruiken. Dit is de eenvoudigste methode.
- Voorspellende modellen: Hier maken we een voorspellend model om waarden te schatten die de ontbrekende gegevens zullen vervangen. In dit geval verdelen wij onze gegevensverzameling in twee reeksen: Een set met geen ontbrekende waarden voor de variabele (training) en een andere met ontbrekende waarden (test). We kunnen methoden gebruiken als logistische regressie en ANOVA voor voorspelling
- Multiple Imputation
KNN (K Nearest Neighbors)
Er zijn andere technieken voor machinaal leren, zoals XGBoost en Random Forest voor gegevens imputatie, maar we zullen KNN bespreken omdat het veel gebruikt wordt. Bij deze methode worden k buren gekozen op basis van een afstandsmaat en wordt hun gemiddelde gebruikt als imputatieschatting. De methode vereist de selectie van het aantal naaste buren en een afstandsmaatstaf. KNN kan zowel discrete attributen (de meest frequente waarde onder de k dichtstbijzijnde buren) als continue attributen (het gemiddelde onder de k dichtstbijzijnde buren) voorspellen
De afstandsmetriek varieert naar gelang van het type gegevens:
1. Continue gegevens: De meest gebruikte afstandsmetrieken voor continue gegevens zijn Euclidisch, Manhattan en Cosinus
2. Categorische gegevens: In dit geval wordt meestal de Hamming-afstand gebruikt. Hij neemt alle categorische attributen en telt voor elk ervan één als de waarde tussen twee punten niet dezelfde is. De Hamming-afstand is dan gelijk aan het aantal attributen waarvoor de waarde verschillend was.
Een van de aantrekkelijkste kenmerken van het KNN-algoritme is dat het eenvoudig te begrijpen en eenvoudig te implementeren is. De niet-parametrische aard van KNN geeft het een voordeel in bepaalde omgevingen waar de gegevens zeer “ongebruikelijk” kunnen zijn.
Een van de duidelijke nadelen van het KNN-algoritme is dat het tijdrovend wordt bij het analyseren van grote datasets omdat het door de hele dataset heen naar gelijksoortige instanties zoekt. Bovendien kan de nauwkeurigheid van KNN ernstig worden aangetast bij hoog-dimensionale gegevens, omdat er weinig verschil is tussen de dichtstbijzijnde en de verste buur.
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)
Van alle hierboven besproken methoden worden meervoudige imputatie en KNN veel gebruikt, waarbij meervoudige imputatie, omdat deze eenvoudiger is, over het algemeen de voorkeur geniet.
Als u vragen hebt over dit bericht, stel ze dan in de commentaren en ik zal mijn best doen om te antwoorden.