dbmsoutputputline输出多个值_R语言统计与绘图:缺失值的处理

1. 前言

在数据收集过程中由于失访、拒访、录入错误等原因造成的不完全数据称为缺失数据(Missing data)。 缺失数据会对统计结果造成影响,所以对缺失数据的处理非常重要。

处理缺失数据的方法有很多,介绍三种最流行的处理缺失数据的方法(推理法、删除法和插补法)。


目 录

  • 1. 前言
  • 2. 数据缺失机制
  • 3. 识别缺失值
    • 3.1 complete.cases()
    • 3.2 sum()和mean()
  • 4. 探索缺失值
    • 4.1 列表显示缺失值
    • 4.2 图形探索缺失值
    • 4.3 相关性探索缺失值
  • 5. 缺失值处理
    • 5.1 推理法
    • 5.2 删除法
    • 5.3 插补法
  • End

2. 数据缺失机制

处理缺失数据前,首先应该了解数据缺失的原因,了解缺失变量与分析变量的关系,有利于选择合适的处理方法对数据进行处理。

  1. 完全随机缺失(MCAR):假如缺失的概率对于各变量的取值是等概率的,即缺失是完全随即的,那么删除缺失数据后的结果将是无偏的。
  2. 随机缺失(MAR):指缺失的概率只与数据集中被观察到的值有关,与未观察到的值无关。
  3. 非随机缺失(NMAR):若缺失数据不属于MCAR和MAR,则数据为非随机缺失。

大部分处理缺失数据的方法都假定数据是 MCAR 或 MAR。

3. 识别缺失值

NA  # 缺失值符号,意为 Not Available,数值不可用
is.na()  # 检测缺失值是否存在,存在返回true
NaN  # 意为 not a number,不是一个数,不可能值
is.nan()  # 识别是不是NaN
Inf和–Inf  # 分别表示正无穷和负无穷值
is.infinite()  # 识别是不是无穷值

3.1 complete.cases()

complete.cases()  # 可识别矩阵或数据框中没有缺失值的行,函数仅将NA和NaN识别为缺失值,无穷值(Inf和-Inf)被当作有效值
sleep[complete.cases(sleep),]  # 列出没有缺失值的行
sleep[!complete.cases(sleep),]  # 列出有一个或多个缺失值的行

3.2 sum()和mean()

sum(is.na(sleep$Dream))  # 输出sleep数据集中Dream变量中含有缺失值的数目
mean(is.na(sleep$Dream))  # 输出sleep数据集中Dream变量中缺失值所占的比例
mean(!complete.cases(sleep))  # 输出sleep数据集中包含一个或多个缺失值的比例

4. 探索缺失值

4.1 列表显示缺失值

library(mice)  # md.pattern()函数需要包
md.pattern(sleep) # 表中的1和0显示缺失值模式:0表示变量的列中有缺失值,1则表示没有缺失值。

第一行表述了“无缺失值”的模式(所有元素为1)。
第二行表述了“除了Span之外无缺失值”的模式。
最后一行给出了每个变量中缺失值的数目。
第一列表示各缺失值模式的实例个数。
最后一列表示各模式中有缺失值的变量的个数。

4.2 图形探索缺失值

aggr()函数

aggr()函数不仅绘制每个变量的缺失值数,还绘制每个变量组合的缺失值数。

library("VIM") # 没有请安装
aggr(sleep, prop=FALSE, numbers=TRUE) # 采用计数,默认numbers=FALSE
aggr(sleep, prop=TRUE, numbers=TRUE) # 采用比例

matrixplot()函数

matrixplot(sleep)  # 生成展示每个实例数据的图形,默认缺失值为红色。

数值型数据被重新转换到[0,1]区间,并用灰度来表示大小:浅色表示值小,深色表示值大。

通过矩阵图,你可以看出某些变量的缺失值模式是否与其他变量的真实值有关联。

4.3 相关性探索缺失值

用指示变量替代数据集中的数据(1表示缺失,0表示存在),这样生成的矩阵有时被称作影子矩阵。

求这些指示变量之间和它们与初始(可观测)变量之间的相关性,有助于观察哪些变量常一起缺失,以及分析变量“缺失”与其他变量间的关系。

x <- as.data.frame(abs(is.na(sleep)))  # sleep的元素缺失,对应的元素为1,否则为0
y <- x[which(apply(x,2,sum)>0)]  # 可提取含(但不全部是)缺失值的变量
cor(y)  # 列出这些指示变量间的相关系数
cor(sleep, y, use="pairwise.complete.obs")   # 含缺失值变量与其他可观测变量间的关系

5. 缺失值处理

缺失值的产生有很多原因,但缺失值的处理一般有两种:

  1. 删除含有缺失值的病例;
  2. 用其他数值替代缺失值。

5.1 推理法

当数据存在冗余信息或有外部信息可用时,推理方法会根据变量间的数学或者逻辑关系来填补或恢复缺失值。

推理研究法常常需要创造性和想法,同时还需要许多数据处理技巧,而且数据的恢复可能是准确的或者近似的。

5.2 删除法

行删除法

大部分流行的统计软件包都默认采用行删除法来处理缺失值。

行删除法假定数据是 MCAR(即完整的观测只是全数据集的一个随机子样本)。

数据集中只有少量缺失值或缺失值仅集中在一小部分观测中,后续样本量的减少对统计检验效力不会造成很严重的影响时,删除行是解决缺失值问题的好方法。但缺失值较多,删除行会删除掉相当比例的数据,影响统计结果。

na.rm=TRUE  # 移除缺失值
na.omit()  # 删除所有含有缺失数据的行
complete.cases()  # 存储没有缺失值的数据框或者矩阵形式的实例

newdata <- mydata[complete.cases(mydata),] 
newdata <- na.omit(mydata)
# mydata中所有包含缺失数据的行都被删除,然后结果才存储到newdata中

cor(na.omit(sleep))  # 计算相关系数,行删除法可删除所有含有缺失值病例
cor(sleep, use="complete.obs") # 同上

变量删除

当某个变量的缺失率较大时,可将该变量删除。

完全变量分析

研究的某一个问题可能只涉及到某几个变量,而这几个变量的原始数据是完整的,那就可以只分析这几个完整的原始数据,而无需使用缺失的不相关数据。

无回答权重

当缺失值类型为非完全随机缺失的时候,可以通过对完整的数据加权来减小偏差。把数据不完全的个案标记后,将完整的数据个案赋予不同的权重,个案的权重可以通过 logistic 回归求得。

5.3 插补法

单一插补法

单一插补法包括随机插补、均值插补、热卡插补、冷卡插补、回归插补。这些插补各有优点,但劣势也很明显。

随机插补指利用抽样的原理,将已观测的数据做为样本,从中随机抽取样本值来做为缺失数据的替代值。

均值插补即用缺失变量的均值来代替所缺失的数据。

均值插补和随机插补仅考虑到缺失数据自身,会导致统计分析的结果偏差较大。

热卡插补进行起来较为繁琐,不常使用。冷卡插补是利用从其他来源获取的完整个体值来做为缺失数据的替代值。

回归插补必须在缺失数据的变量和其他相关变量之间关系是线性的情况下才可进行。

多重插补法

多重插补法(MI)是基于重复模拟的处理缺失值的方法。

当你数据是MCAR或MAR,缺失值问题较复杂时,MI是最常选用的方法,它将从一个包含缺失值的数据集中生成一组完整的数据集(通常是3到10个)。每个模拟数据集中,缺失数据将用蒙特卡洛方法来填补。

此时,标准的统计方法便可应用到每个模拟的数据集上,通过组合输出结果给出估计的结果,以及引入缺失值时的置信区间。

797a9be9597e39a2d0489eb012874cd4.png

基于mice包的分析通常符合以下分析过程:

library(mice)  # 没有请安装
imp <- mice(data, m)  # data是包含缺失值的矩阵或数据框。  
fit <- with(imp, analysis)  # fit是一个包含m个单独统计分析结果的列表对象。
pooled <- pool(fit) # pooled是一个包含这m个统计分析平均结果的列表对象。
summary(pooled) 
# imp是一个包含m个插补数据集的列表对象,同时还含有完成插补过程的信息。默认m为5。
# analysis是一个表达式对象,用来设定应用于m个插补数据集的统计分析方法。    
线性回归模型:lm()、广义线性模型:glm()、广义可加模型:gam(),负二项模型:nbrm()。    
# 表达式在函数的括号中,~的左边是响应变量,右边是预测变量(用+符号分隔开)。  

End

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值