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
Medelvärde, median och läge
Beräkning av det övergripande medelvärdet, medianen eller läget är en mycket grundläggande imputeringsmetod, och det är den enda testade funktionen som inte drar någon fördel av tidsseriens egenskaper eller förhållandet mellan variablerna. Den är mycket snabb, men har tydliga nackdelar. En nackdel är att medelvärdesimputering minskar variansen i datasetet.
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"
Linjär regression
För att börja identifieras flera prediktorer för variabeln med saknade värden med hjälp av en korrelationsmatris. De bästa prediktorerna väljs ut och används som oberoende variabler i en regressionsekvation. Variabeln med saknade uppgifter används som beroende variabel. Fall med fullständiga uppgifter för prediktorvariablerna används för att generera regressionsekvationen; ekvationen används sedan för att förutsäga saknade värden för ofullständiga fall. I en iterativ process läggs värden för den saknade variabeln in och sedan används alla fall för att förutsäga den beroende variabeln. Dessa steg upprepas tills det är liten skillnad mellan de förutspådda värdena från ett steg till nästa, dvs. de konvergerar.
Det ger ”teoretiskt” goda skattningar för saknade värden. Det finns dock flera nackdelar med denna modell som tenderar att uppväga fördelarna. För det första tenderar de, eftersom de ersatta värdena förutspåddes från andra variabler, att passa ihop ”för bra”, vilket gör att standardfelet deflateras. Man måste också anta att det finns ett linjärt samband mellan de variabler som används i regressionsekvationen när det kanske inte finns något sådant.
Multiple Imputation
- Imputation: Imputera de saknade posterna i de ofullständiga datamängderna m gånger (m=3 i figuren). Observera att imputerade värden dras från en fördelning. Simulering av slumpmässiga dragningar inkluderar inte osäkerheten i modellparametrarna. Ett bättre tillvägagångssätt är att använda Markov Chain Monte Carlo-simulering (MCMC). Detta steg resulterar i m kompletta datauppsättningar.
- Analys: Analysera var och en av de m kompletta datamängderna.
- Pooling: Integrera de m analysresultaten i ett 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)
Detta är den överlägset mest föredragna metoden för imputering av följande skäl:
– Lätt att använda
– Ingen bias (om imputeringsmodellen är korrekt)
Imputering av kategoriska variabler
- Mode imputation är en metod, men den kommer definitivt att introducera bias
- Missing values can be treated as a separate category by itself. Vi kan skapa en annan kategori för de saknade värdena och använda dem som en annan nivå. Detta är den enklaste metoden.
- Prediktionsmodeller: Här skapar vi en prediktiv modell för att uppskatta värden som ersätter de saknade uppgifterna. I det här fallet delar vi upp vår datamängd i två uppsättningar: En uppsättning utan saknade värden för variabeln (träning) och en annan uppsättning med saknade värden (test). Vi kan använda metoder som logistisk regression och ANOVA för prediktion
- Multiple Imputation
KNN (K Nearest Neighbors)
Det finns andra tekniker för maskininlärning som XGBoost och Random Forest för imputering av data, men vi kommer att diskutera KNN eftersom den används i stor utsträckning. I den här metoden väljs k grannar ut baserat på ett visst avståndsmått och deras genomsnitt används som en uppskattning av imputeringen. Metoden kräver att man väljer antalet närmaste grannar och ett avståndsmått. KNN kan förutsäga både diskreta attribut (det mest frekventa värdet bland de k närmaste grannarna) och kontinuerliga attribut (medelvärdet bland de k närmaste grannarna)
Avståndsmåttet varierar beroende på typen av data:
1. Kontinuerliga data: De vanligaste distansmåtten för kontinuerliga data är Euklidisk, Manhattan och Cosine
2. Kategoriska data: Hamming-distans används i allmänhet i detta fall. Den tar alla kategoriska attribut och för varje attribut räknas ett om värdet inte är detsamma mellan två punkter. Hammingavståndet är då lika med antalet attribut för vilka värdet var olika.
En av de mest attraktiva egenskaperna hos KNN-algoritmen är att den är enkel att förstå och lätt att genomföra. KNN:s icke-parametriska karaktär ger den en fördel i vissa sammanhang där data kan vara mycket ”ovanliga”.
En av de uppenbara nackdelarna med KNN-algoritmen är att den blir tidskrävande när man analyserar stora datamängder, eftersom den söker efter likartade fall genom hela datamängden. Dessutom kan KNN:s noggrannhet försämras kraftigt med högdimensionella data eftersom det är liten skillnad mellan den närmaste och den mest avlägsna grannen.
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)
Av alla metoder som diskuteras ovan används multipel imputering och KNN i stor utsträckning, och eftersom multipel imputering är enklare föredras det i allmänhet.
Om du har några frågor om det här inlägget kan du ställa dem i kommentarerna, så kommer jag att göra mitt bästa för att svara.