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
Middelværdi, median og mode
Beregning af den samlede middelværdi, median eller mode er en meget grundlæggende imputeringsmetode, og det er den eneste testede funktion, der ikke udnytter tidsseriens karakteristika eller forholdet mellem variablerne. Den er meget hurtig, men har klare ulemper. En ulempe er, at middelimputation reducerer variansen i datasættet.
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"
Linear regression
Til at begynde med identificeres flere prædiktorer for den variabel med manglende værdier ved hjælp af en korrelationsmatrix. De bedste prædiktorer udvælges og anvendes som uafhængige variabler i en regressionsligning. Variablen med manglende data anvendes som den afhængige variabel. Tilfælde med fuldstændige data for prædiktorvariablerne anvendes til at generere regressionsligningen; ligningen anvendes derefter til at forudsige manglende værdier for ufuldstændige tilfælde. I en iterativ proces indsættes værdier for den manglende variabel, og derefter anvendes alle tilfælde til at forudsige den afhængige variabel. Disse trin gentages, indtil der kun er lille forskel mellem de forudsagte værdier fra det ene trin til det næste, dvs. de konvergerer.
Det giver “teoretisk” gode estimater for manglende værdier. Der er imidlertid flere ulemper ved denne model, som har en tendens til at opveje fordelene. For det første, fordi de erstattede værdier blev forudsagt ud fra andre variabler, har de en tendens til at passe “for godt” sammen, og derfor bliver standardfejlen deflateret. Man må også antage, at der er et lineært forhold mellem de variabler, der anvendes i regressionsligningen, når der måske ikke er et sådant forhold.
Multiple Imputation
- Imputation: Imputere de manglende poster i de ufuldstændige datasæt m gange (m=3 i figuren). Bemærk, at imputerede værdier trækkes fra en fordeling. Simulering af tilfældige trækninger omfatter ikke usikkerhed i modelparametre. En bedre fremgangsmåde er at anvende Markov Chain Monte Carlo-simulering (MCMC). Dette trin resulterer i m komplette datasæt.
- Analyse: Analyser hvert af de m komplette datasæt.
- Pooling: Integrer de m analyseresultater i et slutresultat
# 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)
Dette er langt den mest foretrukne metode til imputering af følgende årsager:
– Let at bruge
– Ingen bias (hvis imputeringsmodellen er korrekt)
Imputation af kategoriske variabler
- Modeimputation er en metode, men den vil helt sikkert indføre bias
- Manglende værdier kan behandles som en separat kategori for sig selv. Vi kan oprette en anden kategori for de manglende værdier og bruge dem som et andet niveau. Dette er den enkleste metode.
- Forudsigelsesmodeller: Her opretter vi en prædiktiv model til at estimere værdier, der skal erstatte de manglende data. I dette tilfælde opdeler vi vores datasæt i to sæt: Vi opdeler vores datasæt i to sæt: Et sæt uden manglende værdier for variablen (træning) og et andet sæt med manglende værdier (test). Vi kan bruge metoder som logistisk regression og ANOVA til forudsigelse
- Multiple Imputation
KNN (K Nearest Neighbors)
Der findes andre maskinlæringsteknikker som XGBoost og Random Forest til dataimputation, men vi vil diskutere KNN, da den er meget anvendt. I denne metode vælges k naboer på grundlag af en vis afstandsmåling, og deres gennemsnit anvendes som et imputeringsestimat. Metoden kræver, at man vælger antallet af nærmeste naboer og en afstandsmetrik. KNN kan forudsige både diskrete attributter (den hyppigste værdi blandt de k nærmeste naboer) og kontinuerlige attributter (gennemsnittet blandt de k nærmeste naboer)
Afstandsmåleren varierer alt efter datatype:
1. Kontinuerlige data: De almindeligt anvendte afstandsmålinger for kontinuerlige data er Euklidisk, Manhattan og Cosine
2. Kategoriske data: Hamming-afstanden anvendes generelt i dette tilfælde. Den tager alle de kategoriske attributter og tæller en for hver enkelt, hvis værdien ikke er den samme mellem to punkter. Hamming-afstanden er derefter lig med antallet af attributter, for hvilke værdien var forskellig.
Et af de mest attraktive træk ved KNN-algoritmen er, at den er enkel at forstå og let at implementere. KNN’s ikke-parametriske karakter giver den en fordel i visse sammenhænge, hvor dataene kan være meget “usædvanlige”.
En af de indlysende ulemper ved KNN-algoritmen er, at den bliver tidskrævende ved analyse af store datasæt, fordi den søger efter lignende forekomster gennem hele datasættet. Desuden kan KNN’s nøjagtighed blive alvorligt forringet med højdimensionelle data, fordi der er lille forskel på nærmeste og fjerneste nabo.
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)
Men blandt alle de metoder, der er diskuteret ovenfor, er multiple imputation og KNN meget udbredt, og da multiple imputation er enklere, foretrækkes den generelt.
Hvis du har spørgsmål til dette indlæg, så spørg i kommentarerne, og jeg vil gøre mit bedste for at svare.