title: 使用MICE包对数据缺失值进行插补 tags: [] id: '2019' categories:
在分析数据集时,常常会碰到一些缺失值,如果缺失值的数量相对总体来说非常小,那么直接删除缺失值就是一种可行的方法。但某些情况下,直接删除缺失值可能会损失一些有用信息,此时就需要寻找方法来补全缺失值。(庄闪闪)
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
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)])
tempData <- mice::mice(airquality,m=5,maxit=50,meth='pmm',seed=1)
# meth:指定数据中每一列的输入方法。
# 1)数值型数据适用 pmm;
# 2)二分类数据适用 logreg;
# 3)无序多类别数据适用 ployreg;
# 4)有序多分类变量适用 polr。
# 默认方法为 pmm
mice::densityplot(tempData,~ Ozone + Solar.R .imp)
# 蓝色为原始数据的分布,第一幅红色图为一重插补,以此类推,选择最符合的
mice::densityplot(tempData, ~ Ozone + Solar.R .imp == 4)
Data <- mice::complete(tempData, action = 4)
# action的参数值表示选择第几重的插补值来填补原始数据集,根据前面的图来选择