Datanın mənimsədilməsi:
library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
method from
print.tbl_lazy
print.tbl_sql
-- Attaching packages ------------------------------ tidyverse 1.3.0 --
v ggplot2 3.3.3 v purrr 0.3.4
v tibble 3.0.6 v dplyr 1.0.4
v tidyr 1.1.2 v stringr 1.4.0
v readr 1.4.0 v forcats 0.5.1
-- Conflicts --------------------------------- tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag() masks stats::lag()
df <- mtcars
df
NA
“mpg” və “qsec” sütunlarına müəyyən sayda NA-lərin əlavə edilməsi:
df[sample(1:nrow(df), 3), "mpg"] <- NA
df[sample(1:nrow(df), 2), "qsec"] <- NA
Əksik datalara ön baxış:
# Sütunlara görə əksik dataların yoxlanması;
colSums(is.na(df))
mpg cyl disp hp drat wt qsec vs am gear carb
3 0 0 0 0 0 2 0 0 0 0
# İndekslərinə görə əksik dataların yoxlanması;
which(is.na(df))
[1] 8 24 27 195 215
# Əksik datalara sahib olmayan database;
df[complete.cases(df),]
# Yalnız əksik datalara sahib olan database;
df[!complete.cases(df),]
NA
Hipotez testi və normallığın yoxlanması:
H0: Əksik datalar normal paylanmışdır.
H1: Paylanmamışdır.
library(BaylorEdpsych)
library(mvnmle)
r_test <- littleMcar(df)
# P-value;
r_test$p.value
md.pattern funksiyası ilə əksik dataya baxış:
library(mice)
Attaching package: 㤼㸱mice㤼㸲
The following object is masked from 㤼㸱package:stats㤼㸲:
filter
The following objects are masked from 㤼㸱package:base㤼㸲:
cbind, rbind
md.pattern(df)
cyl disp hp drat wt vs am gear carb qsec mpg
27 1 1 1 1 1 1 1 1 1 1 1 0
3 1 1 1 1 1 1 1 1 1 1 0 1
2 1 1 1 1 1 1 1 1 1 0 1 1
0 0 0 0 0 0 0 0 0 2 3 5

Şərh: 28 sətirdə heç bir əksik data yoxdur. 2 sətirdə sadəcə mpg deyişəni ilə bağlı, 1 sətirdə isə sadəcə qsec dəyişəni ilə bağlı əksik data var. Sadəcə 1 sətirdə həm mpg, həm də qsec deyişəni ilə bağlı əksik datalar var.
aggr funskiyası ilə əksik datanın vizuallaşdırılması:
library(VIM)
Loading required package: colorspace
Loading required package: grid
VIM is ready to use.
Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
Attaching package: 㤼㸱VIM㤼㸲
The following object is masked from 㤼㸱package:datasets㤼㸲:
sleep
aggr_plot <- aggr(df, col = c("navyblue", "red"),
numbers = T,
sortVars = T,
labels = names(df),
cex.axis = .7,
gap = 3)
Variables sorted by number of missings:

Şərh: Qrafiki nəzərdən keçirəndə məlum olur ki, ən çox əksik data 0.9 nisbətində mpg dəyişəninə aiddir. Database-in 87.5%-ində əksik data yoxdur.
KNN ilə əksik dataları təxmin etmə:
library(DMwR)
Loading required package: lattice
Registered S3 method overwritten by 'quantmod':
method from
as.zoo.data.frame zoo
Attaching package: 㤼㸱DMwR㤼㸲
The following object is masked from 㤼㸱package:VIM㤼㸲:
kNN
knn_data <- knnImputation(df, k = 5)
anyNA(knn_data)
[1] FALSE
Gərçək data ilə KNN-lə təxmin edilən dataların müqayisəsi:
#1. Əksik dataların indeksləri;
l <- sapply(df, function(x) which(is.na(x)))
l
$mpg
[1] 8 24 27
$cyl
integer(0)
$disp
integer(0)
$hp
integer(0)
$drat
integer(0)
$wt
integer(0)
$qsec
[1] 3 23
$vs
integer(0)
$am
integer(0)
$gear
integer(0)
$carb
integer(0)
#2. Real əksik datalar;
mtcars[c(l$mpg),]$mpg
[1] 24.4 13.3 26.0
mtcars[c(l$qsec),]$qsec
[1] 18.61 17.30
#3. KNN ilə təxmin edilən əksik datalar;
knn_data[c(l$mpg),]$mpg
[1] 20.75631 15.72021 24.20438
knn_data[c(l$qsec),]$qsec
[1] 18.79580 17.35616
#4. Gərçək əksik datalarla KNN-lə təxmin edilən əksik dataların ortalamaları arasında fərq;
mean(mtcars[c(l$mpg),]$mpg - knn_data[c(l$mpg),]$mpg)
[1] 1.006366
mean(mtcars[c(l$qsec),]$qsec - knn_data[c(l$qsec),]$qsec)
[1] -0.1209823
Şərh: mpg deyişəni ilə bağlı ortalama fərq 0.24, qsec dəyişəni ilə bağlı ortalama fərq isə -0.67-dir. Nəticə olaraq hər iki praqnoz [-1:1] aralığında olduğuna görə modeli uğurlu hesab edə bilərik.
Random forest-lə əksik dataları təxmin etmə:
library(missForest)
Loading required package: randomForest
randomForest 4.6-14
Type rfNews() to see new features/changes/bug fixes.
Attaching package: 㤼㸱randomForest㤼㸲
The following object is masked from 㤼㸱package:dplyr㤼㸲:
combine
The following object is masked from 㤼㸱package:ggplot2㤼㸲:
margin
Loading required package: foreach
Attaching package: 㤼㸱foreach㤼㸲
The following objects are masked from 㤼㸱package:purrr㤼㸲:
accumulate, when
Loading required package: itertools
Loading required package: iterators
Attaching package: 㤼㸱missForest㤼㸲
The following object is masked from 㤼㸱package:VIM㤼㸲:
nrmse
rf_data <- missForest(df, ntree = 7)
missForest iteration 1 in progress...done!
missForest iteration 2 in progress...done!
missForest iteration 3 in progress...done!
missForest iteration 4 in progress...done!
rf_data <- rf_data$ximp
anyNA(rf_data)
[1] FALSE
Gərçək data ilə Random Forest-lə təxmin edilən dataların müqayisəsi
#1. Əksik dataların indeksləri
l <- sapply(df, function(x) which(is.na(x)))
l
$mpg
[1] 8 24 27
$cyl
integer(0)
$disp
integer(0)
$hp
integer(0)
$drat
integer(0)
$wt
integer(0)
$qsec
[1] 3 23
$vs
integer(0)
$am
integer(0)
$gear
integer(0)
$carb
integer(0)
#2. Real əksik datalar
mtcars[c(l$mpg),]$mpg
[1] 24.4 13.3 26.0
mtcars[c(l$qsec),]$qsec
[1] 18.61 17.30
#3. KNN ilə təxmin edilən əksik datalar
rf_data[c(l$mpg),]$mpg
[1] 22.42857 15.09429 20.77143
rf_data[c(l$qsec),]$qsec
[1] 19.53286 17.01571
#4. Gərçək əksik datalarla KNN-lə təxmin edilən əksik dataların ortalamaları arasında fərq
mean(mtcars[c(l$mpg),]$mpg - rf_data[c(l$mpg),]$mpg)
[1] 1.801905
mean(mtcars[c(l$qsec),]$qsec - rf_data[c(l$qsec),]$qsec)
[1] -0.3192857
Şərh: mpg deyişəni ilə bağlı ortalama fərq 0.57, qsec dəyişəni ilə bağlı ortalama fərq isə -0.66-dir. Nəticə olaraq hər iki praqnoz [-1:1] aralığında olduğuna görə modeli uğurlu hesab edə bilərik.
LS0tDQp0aXRsZTogIk1pc3NpbmcgZGF0YSAoTkEpIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyBEYXRhbsSxbiBtyZluaW1zyZlkaWxtyZlzaToNCg0KYGBge3J9DQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KZGYgPC0gbXRjYXJzDQpkZg0KDQpgYGANCg0KIyAibXBnIiB2yZkgInFzZWMiIHPDvHR1bmxhcsSxbmEgbcO8yZl5ecmZbiBzYXlkYSBOQS1syZlyaW4gyZlsYXbJmSBlZGlsbcmZc2k6DQoNCmBgYHtyfQ0KDQpkZltzYW1wbGUoMTpucm93KGRmKSwgMyksICJtcGciXSA8LSBOQQ0KZGZbc2FtcGxlKDE6bnJvdyhkZiksIDIpLCAicXNlYyJdIDwtIE5BDQoNCmBgYA0KDQojIMaPa3NpayBkYXRhbGFyYSDDtm4gYmF4xLHFnzoNCg0KYGBge3J9DQoNCiMgU8O8dHVubGFyYSBnw7ZyyZkgyZlrc2lrIGRhdGFsYXLEsW4geW94bGFubWFzxLE7DQpjb2xTdW1zKGlzLm5hKGRmKSkNCg0KIyDEsG5kZWtzbMmZcmluyZkgZ8O2csmZIMmZa3NpayBkYXRhbGFyxLFuIHlveGxhbm1hc8SxOw0Kd2hpY2goaXMubmEoZGYpKQ0KDQojIMaPa3NpayBkYXRhbGFyYSBzYWhpYiBvbG1heWFuIGRhdGFiYXNlOw0KZGZbY29tcGxldGUuY2FzZXMoZGYpLF0NCg0KIyBZYWxuxLF6IMmZa3NpayBkYXRhbGFyYSBzYWhpYiBvbGFuIGRhdGFiYXNlOw0KZGZbIWNvbXBsZXRlLmNhc2VzKGRmKSxdDQoNCmBgYA0KDQojIEhpcG90ZXogdGVzdGkgdsmZIG5vcm1hbGzEscSfxLFuIHlveGxhbm1hc8SxOg0KDQojIyMgSDA6IMaPa3NpayBkYXRhbGFyIG5vcm1hbCBwYXlsYW5txLHFn2TEsXIuDQojIyMgSDE6IFBheWxhbm1hbcSxxZ9kxLFyLg0KDQpgYGB7cn0NCg0KbGlicmFyeShCYXlsb3JFZHBzeWNoKQ0KbGlicmFyeShtdm5tbGUpDQoNCnJfdGVzdCA8LSBsaXR0bGVNY2FyKGRmKQ0KDQojIFAtdmFsdWU7DQpyX3Rlc3QkcC52YWx1ZQ0KDQpgYGANCg0KIyBtZC5wYXR0ZXJuIGZ1bmtzaXlhc8SxIGlsyZkgyZlrc2lrIGRhdGF5YSBiYXjEscWfOg0KDQpgYGB7ciBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9VFJVRSwgcGFnZWQucHJpbnQ9RkFMU0V9DQoNCmxpYnJhcnkobWljZSkNCm1kLnBhdHRlcm4oZGYpDQoNCmBgYA0KDQojIyMgxZ7JmXJoOiAyOCBzyZl0aXJkyZkgaGXDpyBiaXIgyZlrc2lrIGRhdGEgeW94ZHVyLiAyIHPJmXRpcmTJmSBzYWTJmWPJmSBtcGcgZGV5acWfyZluaSBpbMmZIGJhxJ9sxLEsIDEgc8mZdGlyZMmZIGlzyZkgc2FkyZljyZkgcXNlYyBkyZl5acWfyZluaSBpbMmZIGJhxJ9sxLEgyZlrc2lrIGRhdGEgdmFyLiBTYWTJmWPJmSAxIHPJmXRpcmTJmSBoyZltIG1wZywgaMmZbSBkyZkgcXNlYyBkZXlpxZ/JmW5pIGlsyZkgYmHEn2zEsSDJmWtzaWsgZGF0YWxhciB2YXIuDQoNCiMgYWdnciBmdW5za2l5YXPEsSBpbMmZIMmZa3NpayBkYXRhbsSxbiB2aXp1YWxsYcWfZMSxcsSxbG1hc8SxOg0KDQpgYGB7cn0NCg0KbGlicmFyeShWSU0pDQphZ2dyX3Bsb3QgPC0gYWdncihkZiwgY29sID0gYygibmF2eWJsdWUiLCAicmVkIiksIA0KICAgICAgICAgICAgICAgICAgbnVtYmVycyA9IFQsIA0KICAgICAgICAgICAgICAgICAgc29ydFZhcnMgPSBULCANCiAgICAgICAgICAgICAgICAgIGxhYmVscyA9IG5hbWVzKGRmKSwgDQogICAgICAgICAgICAgICAgICBjZXguYXhpcyA9IC43LCANCiAgICAgICAgICAgICAgICAgIGdhcCA9IDMpDQoNCmBgYA0KDQojIyMgxZ7JmXJoOiBRcmFmaWtpIG7JmXrJmXJkyZluIGtlw6dpcsmZbmTJmSBtyZlsdW0gb2x1ciBraSwgyZluIMOnb3ggyZlrc2lrIGRhdGEgMC45IG5pc2LJmXRpbmTJmSBtcGcgZMmZeWnFn8mZbmluyZkgYWlkZGlyLiBEYXRhYmFzZS1pbiA4Ny41JS1pbmTJmSDJmWtzaWsgZGF0YSB5b3hkdXIuDQoNCiMgS05OIGlsyZkgyZlrc2lrIGRhdGFsYXLEsSB0yZl4bWluIGV0bcmZOg0KDQpgYGB7cn0NCg0KbGlicmFyeShETXdSKQ0KDQprbm5fZGF0YSA8LSBrbm5JbXB1dGF0aW9uKGRmLCBrID0gNSkNCmFueU5BKGtubl9kYXRhKQ0KDQpgYGANCg0KIyBHyZlyw6fJmWsgZGF0YSBpbMmZIEtOTi1syZkgdMmZeG1pbiBlZGlsyZluIGRhdGFsYXLEsW4gbcO8cWF5aXPJmXNpOg0KDQpgYGB7cn0NCg0KIzEuIMaPa3NpayBkYXRhbGFyxLFuIGluZGVrc2zJmXJpOw0KbCA8LSBzYXBwbHkoZGYsIGZ1bmN0aW9uKHgpIHdoaWNoKGlzLm5hKHgpKSkNCmwNCg0KIzIuIFJlYWwgyZlrc2lrIGRhdGFsYXI7DQptdGNhcnNbYyhsJG1wZyksXSRtcGcNCm10Y2Fyc1tjKGwkcXNlYyksXSRxc2VjDQoNCiMzLiBLTk4gaWzJmSB0yZl4bWluIGVkaWzJmW4gyZlrc2lrIGRhdGFsYXI7DQprbm5fZGF0YVtjKGwkbXBnKSxdJG1wZw0Ka25uX2RhdGFbYyhsJHFzZWMpLF0kcXNlYw0KDQojNC4gR8mZcsOnyZlrIMmZa3NpayBkYXRhbGFybGEgS05OLWzJmSB0yZl4bWluIGVkaWzJmW4gyZlrc2lrIGRhdGFsYXLEsW4gb3J0YWxhbWFsYXLEsSBhcmFzxLFuZGEgZsmZcnE7DQptZWFuKG10Y2Fyc1tjKGwkbXBnKSxdJG1wZyAtIGtubl9kYXRhW2MobCRtcGcpLF0kbXBnKQ0KbWVhbihtdGNhcnNbYyhsJHFzZWMpLF0kcXNlYyAtIGtubl9kYXRhW2MobCRxc2VjKSxdJHFzZWMpDQoNCmBgYA0KDQojIyMgxZ7JmXJoOiBtcGcgZGV5acWfyZluaSBpbMmZIGJhxJ9sxLEgb3J0YWxhbWEgZsmZcnEgMC4yNCwgcXNlYyBkyZl5acWfyZluaSBpbMmZIGJhxJ9sxLEgb3J0YWxhbWEgZsmZcnEgaXPJmSAtMC42Ny1kaXIuIE7JmXRpY8mZIG9sYXJhcSBoyZlyIGlraSBwcmFxbm96IFstMToxXSBhcmFsxLHEn8SxbmRhIG9sZHXEn3VuYSBnw7ZyyZkgbW9kZWxpIHXEn3VybHUgaGVzYWIgZWTJmSBiaWzJmXJpay4NCg0KIyBSYW5kb20gZm9yZXN0LWzJmSDJmWtzaWsgZGF0YWxhcsSxIHTJmXhtaW4gZXRtyZk6DQoNCmBgYHtyfQ0KDQpsaWJyYXJ5KG1pc3NGb3Jlc3QpDQoNCnJmX2RhdGEgPC0gbWlzc0ZvcmVzdChkZiwgbnRyZWUgPSA3KQ0KcmZfZGF0YSA8LSByZl9kYXRhJHhpbXANCmFueU5BKHJmX2RhdGEpDQoNCmBgYA0KDQojIEfJmXLDp8mZayBkYXRhIGlsyZkgUmFuZG9tIEZvcmVzdC1syZkgdMmZeG1pbiBlZGlsyZluIGRhdGFsYXLEsW4gbcO8cWF5aXPJmXNpDQoNCmBgYHtyfQ0KDQojMS4gxo9rc2lrIGRhdGFsYXLEsW4gaW5kZWtzbMmZcmkNCmwgPC0gc2FwcGx5KGRmLCBmdW5jdGlvbih4KSB3aGljaChpcy5uYSh4KSkpDQpsDQoNCiMyLiBSZWFsIMmZa3NpayBkYXRhbGFyDQptdGNhcnNbYyhsJG1wZyksXSRtcGcNCm10Y2Fyc1tjKGwkcXNlYyksXSRxc2VjDQoNCiMzLiBLTk4gaWzJmSB0yZl4bWluIGVkaWzJmW4gyZlrc2lrIGRhdGFsYXINCnJmX2RhdGFbYyhsJG1wZyksXSRtcGcNCnJmX2RhdGFbYyhsJHFzZWMpLF0kcXNlYw0KDQojNC4gR8mZcsOnyZlrIMmZa3NpayBkYXRhbGFybGEgS05OLWzJmSB0yZl4bWluIGVkaWzJmW4gyZlrc2lrIGRhdGFsYXLEsW4gb3J0YWxhbWFsYXLEsSBhcmFzxLFuZGEgZsmZcnENCm1lYW4obXRjYXJzW2MobCRtcGcpLF0kbXBnIC0gcmZfZGF0YVtjKGwkbXBnKSxdJG1wZykNCm1lYW4obXRjYXJzW2MobCRxc2VjKSxdJHFzZWMgLSByZl9kYXRhW2MobCRxc2VjKSxdJHFzZWMpDQoNCmBgYA0KDQojIyMgxZ7JmXJoOiBtcGcgZGV5acWfyZluaSBpbMmZIGJhxJ9sxLEgb3J0YWxhbWEgZsmZcnEgMC41NywgcXNlYyBkyZl5acWfyZluaSBpbMmZIGJhxJ9sxLEgb3J0YWxhbWEgZsmZcnEgaXPJmSAtMC42Ni1kaXIuIE7JmXRpY8mZIG9sYXJhcSBoyZlyIGlraSBwcmFxbm96IFstMToxXSBhcmFsxLHEn8SxbmRhIG9sZHXEn3VuYSBnw7ZyyZkgbW9kZWxpIHXEn3VybHUgaGVzYWIgZWTJmSBiaWzJmXJpay4NCg==