探索 R 库:MICE
介绍
处理缺失值是数据科学家在构建机器学习模型时经常要完成的任务。处理缺失值的方法有很多种,如果你想使用高级技术,R 中的mice库是个不错的选择。
MICE 代表链式方程多元插补,其工作原理是为多元缺失数据创建多个插补(替换值)。MICE 算法可用于不同类型的数据类型,例如连续、二进制、无序分类和有序分类数据。
在本指南中,您将学习如何使用R 中的mice库。
数据
在本指南中,您将使用包含 600 个观测值和 8 个变量的虚构贷款申请人数据,如下所述:
Is_graduate:申请人是否为毕业生(“是”)或不是(“否”)
收入:申请人的年收入(美元)
Loan_amount:提交申请的贷款金额(美元)
Credit_score:申请人的信用评分是否令人满意(“Satisfactory”)或不令人满意(“Not_Satisfactory”)
审批状态:贷款申请是否获得批准(“是”)或未获得批准(“否”)
年龄:申请人的年龄(岁)
投资额:申请人申报的股票和共同基金投资总额(美元)
目的:申请贷款的目的
第一步是加载所需的库和数据。
library(plyr)
library(readr)
library(dplyr)
library(caret)
library(mice)
library(VIM)
dat <- read_csv("C:/Notes_Old/A_Resources/data_qna/Content writing/R guides/caret package/data_mice.csv")
glimpse(dat)
输出:
Observations: 600
Variables: 8
$ Is_graduate <chr> "No", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Ye...
$ Income <int> 3000, 3000, 3000, 3000, 8990, NA, NA, NA, NA, NA, N...
$ Loan_amount <dbl> 6000, NA, NA, NA, 8091, NA, NA, NA, NA, NA, NA, NA,...
$ Credit_score <chr> "Satisfactory", "Satisfactory", "Satisfactory", NA,...
$ approval_status <chr> "Yes", "Yes", "No", "No", "Yes", "No", "Yes", "Yes"...
$ Age <int> 27, 29, 27, 33, 29, NA, 29, 27, 33, 29, NA, 29, 27,...
$ Investment <dbl> 9331, 9569, 2100, 2100, 6293, 9331, 9569, 9569, 121...
$ Purpose <chr> "Education", "Travel", "Others", "Others", "Travel"...
输出显示数据集有四个数值变量和四个字符变量。您将使用以下代码将它们转换为因子变量。
names <- c(1,4,5,8)
dat[,names] <- lapply(dat[,names] , factor)
glimpse(dat)
输出:
Observations: 600
Variables: 8
$ Is_graduate <fct> No, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, No...
$ Income <int> 3000, 3000, 3000, 3000, 8990, NA, NA, NA, NA, NA, N...
$ Loan_amount <dbl> 6000, NA, NA, NA, 8091, NA, NA, NA, NA, NA, NA, NA,...
$ Credit_score <fct> Satisfactory, Satisfactory, Satisfactory, NA, NA, S...
$ approval_status <fct> Yes, Yes, No, No, Yes, No, Yes, Yes, Yes, No, No, N...
$ Age <int> 27, 29, 27, 33, 29, NA, 29, 27, 33, 29, NA, 29, 27,...
$ Investment <dbl> 9331, 9569, 2100, 2100, 6293, 9331, 9569, 9569, 121...
$ Purpose <fct> Education, Travel, Others, Others, Travel, Travel, ...
缺失数据模式分析
summary ()函数快速概览变量和缺失值(如果有)。
summary(dat)
输出:
Is_graduate Income Loan_amount Credit_score
No :130 Min. : 3000 Min. : 6000 Not _satisfactory:123
Yes:470 1st Qu.: 39045 1st Qu.:115665 Satisfactory :458
Median : 50995 Median :135990 NA's : 19
Mean : 65901 Mean :149313
3rd Qu.: 76170 3rd Qu.:170740
Max. :277770 Max. :466660
NA's :20 NA's :17
approval_status Age Investment Purpose
No :190 Min. :22.00 Min. : 2100 Education: 94
Yes:410 1st Qu.:35.00 1st Qu.: 16678 Home :132
Median :50.00 Median : 26439 Others : 64
Mean :48.82 Mean : 34442 Personal :174
3rd Qu.:61.00 3rd Qu.: 35000 Travel :118
Max. :76.00 Max. :190422 NA's : 18
NA's :19
上面的输出显示一些变量有缺失值,用NA表示。为了更好地理解缺失值的模式,可以使用md.pattern()函数。
md.pattern(dat)
输出:
Is_graduate approval_status Investment Loan_amount Purpose
559 1 1 1 1 1
4 1 1 1 1 1
4 1 1 1 1 1
3 1 1 1 1 1
10 1 1 1 1 0
3 1 1 1 1 0
2 1 1 1 0 1
2 1 1 1 0 1
1 1 1 1 0 1
1 1 1 1 0 1
6 1 1 1 0 1
4 1 1 1 0 0
1 1 1 1 0 0
0 0 0 17 18
Credit_score Age Income
559 1 1 1 0
4 1 0 1 1
4 0 1 1 1
3 0 1 0 2
10 1 0 1 2
3 1 0 0 3
2 1 1 1 1
2 1 1 0 2
1 1 0 0 3
1 0 1 1 2
6 0 1 0 3
4 0 1 0 4
1 0 0 0 5
19 19 20 93
输出的最上面一行显示有 559 条记录没有缺失值。只有Income变量中有 10 条记录有缺失值,该变量总共有 20 个缺失值。
也可以用下面的代码来分析缺失值模式。
plot1 <- aggr(dat, col=c('blue','red'), numbers=TRUE, sortVars=TRUE, labels=names(dat), cex.axis=.7, gap=3, ylab=c("Histogram of missing data","Pattern"))
输出:
Variables sorted by number of missings:
Variable Count
Income 0.03333333
Credit_score 0.03166667
Age 0.03166667
Purpose 0.03000000
Loan_amount 0.02833333
Is_graduate 0.00000000
approval_status 0.00000000
Investment 0.00000000
上面的输出打印了每个变量中缺失值的百分比。总体而言,93%的数据没有缺失值,可以从下面右侧的图中看到。
缺失值的数量不多,您可以删除这些观察值。但目标是使用mice库来处理缺失值。
MICE 估算
mice ()函数用于估算缺失值。代码中使用的一些重要参数解释如下。
数据:包含不完整数据的数据框或矩阵。缺失值编码为NA。
m:多重插补的次数。默认值为五。
method:指定数据中每列要使用的插补方法。在本例中,您使用预测均值匹配 (PMM) 作为插补方法。
maxit:给出迭代次数的标量。默认值为 5。
上述参数传递给插补函数。
imputed_data <- mice(dat,m=5,maxit=50,meth='pmm',seed=500)
summary(imputed_data)
输出:
Class: mids
Number of multiple imputations: 5
Imputation methods:
Is_graduate Income Loan_amount Credit_score approval_status
"" "pmm" "pmm" "pmm" ""
Age Investment Purpose
"pmm" "" "pmm"
PredictorMatrix:
Is_graduate Income Loan_amount Credit_score approval_status Age
Is_graduate 0 1 1 1 1 1
Income 1 0 1 1 1 1
Loan_amount 1 1 0 1 1 1
Credit_score 1 1 1 0 1 1
approval_status 1 1 1 1 0 1
Age 1 1 1 1 1 0
Investment Purpose
Is_graduate 1 1
Income 1 1
Loan_amount 1 1
Credit_score 1 1
approval_status 1 1
Age 1 1
如果您想查看特定变量的估算数据(例如变量目的),您可以使用以下代码来实现。
imputed_data$imp$Purpose
输出:
1 2 3 4 5
9 Travel Education Travel Personal Travel
10 Education Home Home Home Home
11 Home Personal Home Home Travel
12 Home Home Travel Home Home
13 Education Education Travel Travel Home
588 Travel Others Travel Travel Personal
589 Travel Travel Personal Personal Personal
590 Travel Travel Travel Travel Personal
591 Travel Personal Travel Travel Others
592 Travel Personal Travel Travel Education
593 Home Education Personal Travel Education
594 Home Home Home Home Home
595 Personal Education Travel Travel Education
596 Travel Travel Travel Travel Home
597 Personal Travel Travel Travel Home
598 Home Education Travel Travel Education
599 Others Personal Personal Travel Personal
600 Others Travel Travel Travel Travel
上述输出显示,对于Purpose变量中的 18 个缺失值,有五组可用的插补。
下一步是使用以下代码完成对整个数据的缺失值插补。缺失值将被替换为五个插补数据集中的第一个数据集中的值,由第二个参数中的值 1 表示。
completeddata1 <- complete(imputed_data,1)
summary(completeddata1)
输出:
Is_graduate Income Loan_amount Credit_score
No :130 Min. : 3000 Min. : 6000 Not _satisfactory:129
Yes:470 1st Qu.: 38498 1st Qu.:112973 Satisfactory :471
Median : 50835 Median :134385
Mean : 65819 Mean :146552
3rd Qu.: 76040 3rd Qu.:168715
Max. :277770 Max. :466660
approval_status Age Investment Purpose
No :190 Min. :22.00 Min. : 2100 Education: 96
Yes:410 1st Qu.:35.00 1st Qu.: 16678 Home :137
Median :50.00 Median : 26439 Others : 66
Mean :49.18 Mean : 34442 Personal :176
3rd Qu.:61.25 3rd Qu.: 35000 Travel :125
Max. :76.00 Max. :190422
新数据的摘要显示没有任何缺失值,表明缺失值插补已完成。您可以继续使用新数据进行模型构建,以检查插补数据的模型性能。
使用插补数据建立模型
下面的代码行创建数据分区,在训练数据集上构建随机森林算法,并在测试数据集上评估模型。
# Create Data Partition
set.seed(100)
trainRowNumbers <- createDataPartition(completeddata1$approval_status, p=0.7, list=FALSE)
train <- completeddata1[trainRowNumbers,]
test <- completeddata1[-trainRowNumbers,]
# Build Random Forest Algorithm
control1 <- tra
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~