本文主要介绍VIM和mice包,使用数据集为VIM包提供的哺乳动物睡眠数据sleep,主要研究62种哺乳动物的睡眠、生态学变量和体质变量间的关系。
睡眠变量包含睡眠中做梦时(Dream)、不做梦的时长(NonD)以及它们的和(Sleep)。体质变量包含体重(BodyWgt,单位为千克)、脑重(BrainWgt,单位为克)、寿命(Span,单位为年)和妊娠期(Gest,单位为天)。生态学变量包含物种被捕食的程度(Pred)、睡眠时暴露的程度(Exp)和面临的总危险度(Danger)。生态学变量以从1(低)到5(高)的5分制进行测量。

1 处理缺失值的步骤

一个完整的处理方法通常包含以下几个步骤:
(1) 识别缺失数据;
(2) 检查导致数据缺失的原因;
(3) 删除包含缺失值的实例或用合理的数值代替(插补)缺失值。
缺失数据的分类:完全随机缺失(MCAR)、随机缺失(MAR)、非随机缺失(NMAR)

2 识别缺失值

NA(不可得)代表缺失值,NaN(不是一个数)代表不可能的值。符合Inf和-Inf分别代表正无穷和负无穷。识别函数分别为is.na、is.nan()、is.infinite()。
VIM包函数中complete.cases()可用来识别矩阵或数据框中没有缺失值的行。若每行都包含完整的实例,则返回TRUE的逻辑向量;若每行有一个或多个缺失值,则返回FALSE。
由于逻辑值TRUE和FALSE分别等价于数值1和0,可用sum()和mean()函数来获取关于缺失数据的有用信息。
注:complete.cases()函数仅将NA和NaN识别为缺失值,无穷值(Inf和-Inf)被当做有效值。

3 探索缺失值模式

在决定如何处理缺失数据前,了解哪些变量有缺失值、数目有多少、是什么组合形式等信息非常有用。

1 列表显示缺失值

mice包中的md.pattern()函数可生成一个以矩阵或数据框形式展示缺失值模式的表格。例:

library(VIM)
library(mice)
data(sleep,package = "VIM")
md.pattern(sleep)


表中1和0显示了缺失值模式,0表示变量的列中有缺失值,1则表示没有缺失值。第一列表示各缺失值模式的实例个数,最后一列表示各模式中有缺失值的变量的个数。此处可以看到,有42个实例没有缺失值,仅2个实例缺失了Span。数据集包含了总共 38个缺失值。最后一行给出了每个变量中缺失值的数目。

2 图形探究缺失数据

VIM包提供了大量能可视化数据集中缺失值模式的函数,本节主要介绍其中几个:aggr()、matrixplot()和scattMiss()。
aggr()函数不仅绘制每个变量的缺失值数,还绘制每个变量组合的缺失值数。
matrixplot()函数可生成展示每个实例数据的图形。
marginplot()函数可生成一幅散点图,在图形边界展示两个变量的缺失值信息。

3 用相关性探索缺失值

指示变量替代数据集中的数据(1表示缺失,0表示存在),这样生成的矩阵有时称作影子矩阵。求这些指示变量间和它们与初始(可观测)变量间的相关性,有助于观察哪些变量常一起缺失,以及分析变量“缺失”与其他变量间的关系。

#以sleep数据集为例
x<-as.data.frame(abs(is.na(sleep)))
#此时x为影子矩阵
y<-x[which(sd(x)>0)]#可提取含(但不全部是)缺失值的变量
cor(y)#可看出哪些变量常一起缺失
#缺失值变量与其他可观察变量间的关系
cor(sleep,y,use="pairwise.complete.obs")

4 理解缺失数据的来由和影响

识别缺失数据的数目、分布和模式有两个目的:
(1)分析生成缺失数据的潜在机制;
(2)评价缺失数据对回答实质性问题的影响。

5 理性处理不完整数据

推理方法会根据变量间的数学或者逻辑关系来填补或恢复缺失值。
例:在sleep数据集中,变量Sleep是Dream和NonD变量的和。若知道了它们中任意两个动物的得分,你便可以推导出第三个。

6 完整实例分析(行删除)

在完整实例分析中,只有每个变量都包含了有效数据值的观测才会保留下来做进一步的分析。实际上,这样会导致包含一个或多个缺失值的任意一行都会被删除,因此常称作行删除(listwise)、个案删除(case-wise)或剔除。

#方法1
newdata<-mydata[complete.cases(mydata),]
#方法2
newdata<-na.omit(mydata)

7 多重插补

多重插补(MI)是一种基于重复模拟的处理缺失值的方法。R可利用Amelia、mice和mi包来执行插补。下面介绍mice包(利用链式方程的多远插补)提供的方法,步骤为:
(1)函数mice()首先从一个包含缺失数据的数据框开始,然后返回一个包含多个(默认为5个)完整数据集的对象。每个完整数据集都是通过对原始数据框中的缺失数据进行插补而生成的。
(2)with()函数可依次对每个完整数据集应用统计模型(如线性模型或广义线性模型)
(3)pool()函数将这些单独的分析结果整合为一组结果

#常用分析过程
library(mice)
imp<-mice(mydata,m)
fit<-with(imp,analysis)
pooled<-pool(fit)
summary(pooled)

8 处理缺失值的其他方法

(1)成对删除。观测只是当它含缺失数据的变量涉及某个特定分析时才会被删除。
(2)简单(非随机)插补。用某个值(如均值、中位数或众数)来替换变量中的缺失值。

缺失值的处理——R语言相关推荐

  1. r语言中检测异常值_R中的异常值检测

    r语言中检测异常值 介绍 (Introduction) An outlier is a value or an observation that is distant from other obser ...

  2. R语言把dataframe数据转化为tibble格式、查看每个数据列的缺失值个数、使用数据列的均值对数据列的缺失值进行填充

    R语言把dataframe数据转化为tibble格式.查看每个数据列的缺失值个数.使用数据列的均值对数据列的缺失值进行填充 目录

  3. R语言进行缺失值填充(Filling in missing values):使用R原生方法、data.table、dplyr等方案

    R语言进行缺失值填充(Filling in missing values):使用R原生方法.data.table.dplyr等方案 目录 R语言进行缺失值填充&#x

  4. R语言缺失值替换:缺失的值(NA)替换每个分组最近的非缺失值

    R语言缺失值替换:缺失的值(NA)替换每个分组最近的非缺失值 目录 R语言缺失值替换:缺失的值(NA)替换每个分组最近的非缺失值

  5. R语言ggplot2可视化:计算dataframe中每个数据列缺失值的个数、使用堆叠的条形图(Stacked Barplot)可视化每个数据列的缺失值的情况(自定义堆叠条形图的形式)

    R语言ggplot2可视化:计算dataframe中每个数据列缺失值的个数.使用堆叠的条形图(Stacked Barplot)可视化每个数据列的缺失值的情况(自定义堆叠条形图的形式) 目录

  6. R语言ggplot2可视化:使用堆叠的条形图(Stacked Barplot)可视化每个数据行(row)的缺失值的情况(Visualizing missing data counts in rows)

    R语言ggplot2可视化:使用堆叠的条形图(Stacked Barplot)可视化每个数据行(row)的缺失值的情况(Visualizing missing data counts in rows) ...

  7. R语言使用xgboost构建回归模型:vtreat包为xgboost回归模型进行数据预处理(缺失值填充、缺失值标识、离散变量独热onehot编码)、构建出生体重的xgboost模型回归模型

    R语言使用xgboost构建回归模型:vtreat包为xgboost回归模型进行数据预处理(缺失值填充.缺失值标识.离散变量独热onehot编码).构建出生体重的xgboost模型回归模型 目录

  8. R语言ggplot2可视化:使用pracma包的interp1函数对缺失值进行线性插值后进行可视化分析、用虚线标记进行数据填充的区域

    R语言ggplot2可视化:使用pracma包的interp1函数对缺失值进行线性插值后进行可视化分析.用虚线标记进行数据填充的区域 目录

  9. R语言vtreat包自动处理dataframe的缺失值、计算数据列的均值和方差并基于均值和方差信息对数据列进行标准化缩放、计算所有数据列的均值和方差对所有数据列进行标准化缩放

    R语言vtreat包自动处理dataframe的缺失值.计算数据列的均值和方差并基于均值和方差信息对数据列进行标准化缩放.计算所有数据列的均值和方差并基于均值和方差信息对所有数据列进行标准化缩放 目录

最新文章

  1. vs2008 外部调用ActiveX控件接口方法
  2. 2016-11-15试题解题报告
  3. <马哲>生产方式是社会发展的决定力量2017-12-27
  4. springboot No Java compiler available for configuration options compilerClassName
  5. nodejs连接redis,redis服务器的地址格式应该怎么写
  6. 题目 1886: [蓝桥杯][2017年第八届真题]包子凑数(欧几里得+完全背包)
  7. javascript各种事件
  8. html5飞机发射教程,Javascript学习笔记(13_5) --js事件(飞机发射子弹)
  9. 一个通配符引起的错误
  10. java 加法程序_使用JAVAEE编写简单的加法程序
  11. 读书笔记程序员的自我修养 0
  12. 高德地图拾取经纬度 + 搜索 + 标记
  13. 马克思主义基本原理概论
  14. js实现中英文合并排序
  15. word 宏命令批量把当前文件夹下的doc另存为docx格式
  16. uni-app小程序答题功能开发(左右滑动,判断,填空,问答,答题卡,纠错,做题倒计时等)
  17. OpenWrt路由开启DDNS+端口转发进行外网访问
  18. Cocos 2dx - lua Layer注册点击事件
  19. Unity Shader 麻将平面阴影高光
  20. win10计算机睡眠 隔几分钟就唤醒,Win10电脑睡眠时经常被自动唤醒如何解决

热门文章

  1. Securing Spring Cloud Microservices With OAuth2
  2. CentOS6.x下GitLab安装
  3. Lower Power with CPF(三)
  4. 淘宝技术沙龙「系统稳定性与性能」的笔记与思考
  5. FreeBSD下安装postfixl邮件系统
  6. 微型计算机及接口技术笔记,微机原理与接口技术笔记(一)
  7. 工作流引擎的五大接口
  8. java电信计费项目论文_基于JAVA开发的电信IP计费系统设计毕业论文
  9. 基于tensorflow2.0实现猫狗大战(搭建网络迁移学习)
  10. Cut and Paste(模拟)