Last updated on March 19, 2024 pm
在分析数据集时,常常会碰到一些缺失值,如果缺失值的数量相对总体来说非常小,那么直接删除缺失值就是一种可行的方法。但某些情况下,直接删除缺失值可能会损失一些有用信息,此时就需要寻找方法来补全缺失值。
安装包
1 2 3 4 5 6
| 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')"
|
导入数据
数据来源
1 2 3 4 5
| 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
查看数据质量
1 2 3 4 5
| 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)])
|
进行迭代插补
1 2 3 4 5 6 7
| tempData <- mice::mice(airquality,m=5,maxit=50,meth='pmm',seed=1)
|
选择合适的插补
1 2 3
| mice::densityplot(tempData,~ Ozone + Solar.R .imp)
mice::densityplot(tempData, ~ Ozone + Solar.R .imp == 4)
|
导出插补后的数据
1 2
| Data <- mice::complete(tempData, action = 4)
|