插补法
7.2.1均值插补
cancer.new <- cancer
cancer.new[!complete.cases(cancer.new),]
cancer.new$wt.loss[is.na(cancer.new$wt.loss)] <- mean(cancer.new$wt.loss, na.rm=TRUE)
7.2.2众数插补
sleep.new <- sleep
library(DescTools)
Mode(sleep.new$Span,na.rm=TRUE) # M大写,众数可能不止一个,自行选择
sleep.new$Span[is.na(sleep.new$Span)] <- Mode(sleep.new$Span)[1] # [1]选择第一个众数
7.3.3数值型全用均值/中位数插补的批量操作
library(dplyr);library(naniar)
sleep2.2 <- sleep %>% impute_mean_if(is.numeric)
sleep3.3 <- sleep %>% impute_median_if(is.numeric)
7.3.4多重插补法(mice包)
library(mice) # 多重插补安装包
imtp <- mice(data, m) # imp是包含m个插补数据集的列表,包括插补过程的信息。默认m为5。
fit <- with(imtp, analysis) # fit是包含m个单独统计分析结果的列表。
# analysis是一个表达式,设定应用于m个插补数据集的统计分析方法。
# 线性回归模型:lm()、广义线性模型:glm()、广义可加模型:gam(),负二项模型:nbrm()
pooled <- pool(fit) # pooled是个包含这m个统计分析平均结果的列表。
summary(pooled)
#MICE IMPUTATION
my_imtp <- mice(sleep8, m=5, maxit=20) # 5重插补,即生成5个无缺失数据集
my_imtp$imp$NonD # 每个插补数据集缺失值位置的数据补齐具体数值
my_imtp$imp$Sleep
sleep9 <- complete(my_imtp, 4) # 选择第4个插补数据集作为结果
#MULTIPLE IMPUTATION
fit = with(my_imtp, lm(Sleep ~ NonD+Dream+Span+Gest+Pred+Exp+Danger))
summary(pool(fit))