目录
1.重编码某些值为缺失值
2.在分析中排除缺失值
3.查看缺失值所在行
4.缺失值的数据和比例
5.列表显示缺失数据
6.图形探索
6.1使用aggr()函数
6.2使用matrixplot()函数
7.缺失值处理
7.1直接删除法
7.2插补法
NA # 缺失值符号,意为 Not Available,数值不可用
is.na() # 检测缺失值是否存在,存在返回true
NaN # 意为 not a number,不是一个数,不可能值
is.nan() # 识别是不是NaN
Inf和–Inf # 分别表示正无穷和负无穷值
is.infinite() # 识别是不是无穷值
colon$age[colon$age == 99] <- NA # colon为数据集,age为数据集中的变量
colon # colon数据集中任何等于99的年龄值都将被修改为NA
x <- c(1, 2, NA, 3)
y <- sum(x, na.rm=TRUE) # 排除x向量中的缺失值后在计算
y
删除colon数据集中含有缺失数据的行
newcolon <- na.omit(colon)
cancer #含有缺失值的数据集
complete.cases()
complete.cases() # 可识别矩阵或数据框中没有缺失值的行,函数仅将NA和NaN识别为缺失值,无穷值(Inf和-Inf)被当作有效值
cancer[complete.cases(cancer),] # 列出没有缺失值的行
data1 <- cancer[complete.cases(cancer),] # 将含有缺失值的观测删除后存储为数据框
cancer[!complete.cases(cancer),] # 列出有一个或多个缺失值的行
data2 <- cancer[!complete.cases(cancer),] # 将含有缺失值的数据存储为数据框
is.na.data.frame(cancer) # 判断数据框是否存在缺失
sum(is.na(cancer)) # 统计数据中缺失值数目
is.na(cancer$age) # 判断数据是否存在缺失
sum(is.na(cancer$age)) # 统计目标列缺失值数目
mean(is.na(cancer)) # 数据框中缺失值所占的比例
mean(!is.na(cancer)) # 数据框中非缺失值所占的比例
mean(is.na(cancer$age)) # 判断目标列缺失值比例
library(mice) # md.pattern()函数需要包
md.pattern(cancer) # 表中的1和0显示缺失值模式:0表示变量的列中有缺失值,1则表示没有缺失值。
?md.pattern()
# 第一行表述了“无缺失值”的模式(所有元素为1)
# 最后一行给出了每个变量中缺失值的数目
# 第一列表示各缺失值模式的实例个数
# 最后一列表示各模式中有缺失值的变量的个数
# install.packages("VIM")
library("VIM") # 函数所需安装包
aggr(cancer, prop=FALSE, numbers=TRUE) # 采用计数,默认numbers=FALSE
aggr(cancer, prop=TRUE, numbers=TRUE) # 采用比例
matrixplot(cancer)
# 生成展示每个实例数据的图形,默认缺失值为红色。
# 数值型数据被重新转换到[0,1]区间,并用灰度来表示大小
# 在每个列中,浅色表示值小,深色表示值大。
na.rm=TRUE # 移除缺失值
na.omit( ) # 删除所有含有缺失数据的行
mydata <- cancer
newdata <- na.omit(mydata) # 存储没有缺失值的数据框或者矩阵形式的观测
newdata1 <- cancer[complete.cases(mydata),] # 存储没有缺失值的数据框或者矩阵形式的观测
7.2.1均值插补
cancer1 <- cancer
cancer1[!complete.cases(cancer1),]
cancer1$wt.loss[is.na(cancer1$wt.loss)] <- mean(cancer1$wt.loss, na.rm=TRUE)
7.2.2众数插补
sleep1 <- sleep
library(DescTools)
Mode(sleep1$Span,na.rm=TRUE) # M大写,众数可能不止一个,自行选择
sleep1$Span[is.na(sleep1$Span)] <- Mode(sleep1$Span)[1] # [1]选择第一个众数
7.3.3数值型全用均值/中位数插补的批量操作
library(dplyr);library(naniar)
sleep2 <- sleep %>% impute_mean_if(is.numeric)
sleep3 <- sleep %>% impute_median_if(is.numeric)
7.3.4多重插补法(mice包)
library(mice) # 多重插补安装包
imp <- mice(data, m) # imp是包含m个插补数据集的列表,包括插补过程的信息。默认m为5。
fit <- with(imp, analysis) # fit是包含m个单独统计分析结果的列表。
# analysis是一个表达式,设定应用于m个插补数据集的统计分析方法。
# 线性回归模型:lm()、广义线性模型:glm()、广义可加模型:gam(),负二项模型:nbrm()
pooled <- pool(fit) # pooled是个包含这m个统计分析平均结果的列表。
summary(pooled)
#MICE IMPUTATION
my_imp <- mice(sleep8, m=5, maxit=20) # 5重插补,即生成5个无缺失数据集
my_imp$imp$NonD # 每个插补数据集缺失值位置的数据补齐具体数值
my_imp$imp$Sleep
sleep9 <- complete(my_imp, 4) # 选择第4个插补数据集作为结果
#MULTIPLE IMPUTATION
fit = with(my_imp, lm(Sleep ~ NonD+Dream+Span+Gest+Pred+Exp+Danger))
summary(pool(fit))