--- title: 使用MICE包对数据缺失值进行插补 tags: [] id: '2326' categories: - - 数据清洗 date: 2022-09-10 23:24:56 --- 在分析数据集时,常常会碰到一些缺失值,如果缺失值的数量相对总体来说非常小,那么直接删除缺失值就是一种可行的方法。但某些情况下,直接删除缺失值可能会损失一些有用信息,此时就需要寻找方法来补全缺失值。([庄闪闪](https://cloud.tencent.com/developer/user/8270620)) ## 安装包 * conda create -n MICE -c conda-forge r-mice -y * conda activate MICE * conda install -c conda-forge r-tidyverse -y * conda install -c conda-forge r-irkernel -y * conda install -c conda-forge r-vim -y * Rscript -e "IRkernel::installspec(name='MICE', displayname='r-MICE')" ## 导入数据 [数据来源](https://occdn.limour.top/2325.html) ```R rppa <- readRDS('PRAD_rppa.rds') pMiss <- function(x){round(sum(is.na(x))/length(x),3)} rppa <- rppa[apply(rppa, 1, pMiss) < 0.05, ] rppa <- rppa[, apply(rppa, 2, pMiss) < 0.05] sum(is.na(rppa)) ``` 额,好像没有NA了,这一步先不跑,熟悉一下MICE包吧,数据集用airquality ## 查看数据质量 ```R mice::md.pattern(airquality) VIM::aggr(airquality, col=c('navyblue','red'), numbers=TRUE, sortVars=TRUE, labels=names(airquality), cex.axis=.7, gap=3, ylab=c("Histogram of missing data","Pattern")) VIM::marginplot(airquality[c(1,2)]) ``` ## 进行迭代插补 ```R tempData <- mice::mice(airquality,m=5,maxit=50,meth='pmm',seed=1) # meth:指定数据中每一列的输入方法。 # 1)数值型数据适用 pmm; # 2)二分类数据适用 logreg; # 3)无序多类别数据适用 ployreg; # 4)有序多分类变量适用 polr。 # 默认方法为 pmm ``` ## 选择合适的插补 ```R mice::densityplot(tempData,~ Ozone + Solar.R .imp) # 蓝色为原始数据的分布,第一幅红色图为一重插补,以此类推,选择最符合的 mice::densityplot(tempData, ~ Ozone + Solar.R .imp == 4) ``` ## 导出插补后的数据 ```R Data <- mice::complete(tempData, action = 4) # action的参数值表示选择第几重的插补值来填补原始数据集,根据前面的图来选择 ```