本文对应《R语言实战》第15章:处理缺失数据的高级方法

本文仅在书的基础上进行简单阐述,更加详细的缺失数据问题研究将会单独写一篇文章。

处理缺失值的一般步骤:

  1. 识别缺失数据;
  2. 检查导致数据缺失的原因;
  3. 删除包含缺失值的实例或用合理的数值代替(插补)缺失值。

缺失数据的分类:

完全随机缺失(MCAR):某变量的缺失数据与其他任何观测或未观测的变量都不相关;

随机缺失(MAR):某变量上的缺失数据与其他观测变量相关,与它自己的未观测值不相关;

非随机缺失(NMAR):不属于MCAR或MAR的变量。

一般情况下为MCAR或MAR,NMAR处理太过复杂,暂时不考虑。

识别缺失值:

#某变量缺失值数量
sum(is.na(sleep$Dream))
#某变量上缺失值的比例
mean(is.na(sleep$Dream))
#含有缺失值的实例的比例
mean(!complete.cases(sleep)) #生成一个以矩阵或数据框形式展示缺失值模式的表格
library(mice)
md.pattern(sleep)

  

md.pattern()结果解释:

矩阵中,0表示有缺失值,1表示没有缺失值。第一行表述了无缺失值的模式,第二行以后表述了除标记变量外无缺失值的模式。。第一列表示各缺失值模式的实例个数,最后一列表示各模式中有缺失值的变量的个数。最后一行给出了每个变量中缺失值的数目。

图形探究缺失数据(package: VIM)

三个函数:

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

matrixplot()函数可生成展示每个实例数据的图形;

marginplot()函数可生成一幅散点图,在图形边界展示两个变量的缺失值信息。

用相关性探索缺失值:

影子矩阵:用指示变量替代数据集中的数据(1表示缺失,2表示存在)

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

x <- as.data.frame(abs(is.na(sleep)))
y <- x[which(sd(x) > 0)]
cor(y)

  

相关系数大,表明两个变量间常常一起缺失。

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

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

用统计方法进行缺失数据的分析:恢复数据的推理方法、涉及删除缺失值的传统方法、涉及模拟的现代方法。

所有工作的目的都是相同的:在没有完整信息的情况下,尽可能精确地回答收集数据所要解决的实质性问题。

理性处理不完整数据:

采用推理的方法,根据变量间的数学或逻辑关系来填补或恢复缺失值。

常见处理方法:

行删除:将包含一个或多个缺失值的任意一行删除;

#以下两行代码的功能等价
newdata <- mydata[complete.cases(mydata), ]
newdata <- na.omit(mydata)

  

多重插补(MI):是一种基于重复模拟的处理缺失值的方法,每个模拟数据集中,缺失数据将用蒙特卡洛方法来填补。R中可利用Amelia, mice 和mi包实现。

mice包:利用链式方程的多元插补。具体过程:首先从一个包含缺失数据的数据框开始,返回一个包含多个(默认5个)完整数据集的对象;然后,with()函数可依次对每个完整数据集应用统计模型;最后,pool()函数将这些单独的分析结果整合为一组结果。最终模型的标准误和p值都将准确地反映出由于缺失值和多重插补而产生的不确定性。

mice如何插补缺失值:通过Gibbs抽样完成。每个缺失值由数据集中其他预测变量预测得来,该过程不断迭代,直到所有预测值收敛。

通常过程:

library(mice)
imp <- mice(mydata, m)
fit <- with(imp, analysis)
pooled <- pool(fit)
summary(pooled)
#mydata是待插补的数据框,m默认5,imp里含有m个插补数据集
#analysis是一个表达式对象,设定应用于m个插补数据集的统计分析方法
#fit包含了m个单独统计分析结果
#pooled包含m个统计分析平均结果

  

处理缺失值的其他方法:

Hmisc

包含多种函数,支持简单插补、多重插补和典型变量插补

mvnmle

对多元正态分布数据中缺失值的最大似然估计

cat

对数线性模型中多元类别型变量的多重插补

arrayImpute/arrayMissPattern/SeqKnn

处理微阵列缺失数据的实用函数

longitudinalData

相关的函数列表,比如对时间序列缺失值进行插补的一系列函数

kmi

处理生存分析缺失值的Kaplan-Meier多重插补

mix

一般位置模型中混合类别型和连续型数据的多重插补

pan

多元面板数据或聚类数据的多重插补

R语言实战(十)处理缺失数据的高级方法的更多相关文章

  1. R in action读书笔记(20)第十五章 处理缺失数据的高级方法

    处理缺失数据的高级方法 15.1 处理缺失值的步骤 一个完整的处理方法通常包含以下几个步骤: (1) 识别缺失数据: (2) 检查导致数据缺失的原因: (3) 删除包含缺失值的实例或用合理的数值代替( ...

  2. 吴裕雄--天生自然 R语言开发学习:处理缺失数据的高级方法(续一)

    #-----------------------------------# # R in Action (2nd ed): Chapter 18 # # Advanced methods for mi ...

  3. R语言实战

    教材目录 第一部分 入门 第一章 R语言介绍 第二章 创建数据集 第三章 图形初阶 第四章 基本数据管理 第五章 高级数据管理 第二部分 基本方法 第六章 基本图形 第七章 基本统计方法 第三部分 中 ...

  4. R 语言实战-Part 4 笔记

    R 语言实战(第二版) part 4 高级方法 -------------第13章 广义线性模型------------------ #前面分析了线性模型中的回归和方差分析,前提都是假设因变量服从正态 ...

  5. R入门<三>-R语言实战第4章基本数据管理摘要

    入门书籍:R语言实战 进度:1-4章 摘要: 1)实用的包 forecast:用于做时间序列预测的,有auto.arima函数 RODBC:可以用来读取excel文件.但据说R对csv格式适应更加良好 ...

  6. R语言实战(三)基本图形与基本统计分析

    本文对应<R语言实战>第6章:基本图形:第7章:基本统计分析 =============================================================== ...

  7. R语言实战(二)数据管理

    本文对应<R语言实战>第4章:基本数据管理:第5章:高级数据管理 创建新变量 #建议采用transform()函数 mydata <- transform(mydata, sumx ...

  8. R语言实战(一)介绍、数据集与图形初阶

    本文对应<R语言实战>前3章,因为里面大部分内容已经比较熟悉,所以在这里只是起一个索引的作用. 第1章       R语言介绍 获取帮助函数 help(), ? 查看函数帮助 exampl ...

  9. R语言实战(四)回归

    本文对应<R语言实战>第8章:回归 回归是一个广义的概念,通指那些用一个或多个预测变量(也称自变量或解释变量)来预测响应变量(也称因变量.效标变量或结果变量)的方法.通常,回归分析可以用来 ...

随机推荐

  1. Java并发编程原理与实战三十:CountDownLatch与CyclicBarrier 区别

    相信每个想深入了解多线程开发的Java开发者都会遇到CountDownLatch和CyclicBarrier,大家也在网上看到各种介绍原理,代码的,以及他们区别(应付面试)的,但是很少能讲清楚:他们到 ...

  2. spring框架学习(六)AOP事务及spring管理事务方式之Template模板

    概念 1.事务 1)事务特性:ACID 原子性 :强调事务的不可分割. 一致性 :事务的执行的前后数据的完整性保持一致. 隔离性 :一个事务执行的过程中,不应该受到其他事务的干扰. 持久性 :事务一旦 ...

  3. 【译】第六篇 SQL Server代理深入作业步骤工作流

    本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术 ...

  4. Grunt、gulp、webpack、不要听着高大上你就上,试试Codekit?

    下载地址:https://incident57.com/codekit/ 官方网站了解更多 要编译Less.Sass.Stylus, CoffeeScript, Typescript, Jade, H ...

  5. spfa+floyed+最长路+差分约束系统(F - XYZZY POJ - 1932)(题目起这么长感觉有点慌--)

    题目链接:https://cn.vjudge.net/contest/276233#problem/F 题目大意:给你n个房子能到达的地方,然后每进入一个房子,会消耗一定的生命值(有可能是负),问你一 ...

  6. 一个罕见的MSSQL注入漏洞案例

    一个罕见的MSSQL注入漏洞案例 这里作者准备分享一个在去年Google赏金计划中发现的相当罕见漏洞,也是作者在整个渗透测试生涯中唯一一次遇到的. 目标网站使用了微软 SQL Server 数据库并且 ...

  7. MySQL防范SQL注入风险

    MySQL防范SQL注入风险 0.导读 在MySQL里,如何识别并且避免发生SQL注入风险 1.关于SQL注入 互联网很危险,信息及数据安全很重要,SQL注入是最常见的入侵手段之一,其技术门槛低.成本 ...

  8. 最短路径之迪杰斯特拉(Dijkstra)算法

    对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点为源点,最后一个顶点为终点.最短路径的算法主要有迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd ...

  9. 遍历 USB devcie,读取设备描述符 device descriptor【转】

    转自:http://blog.csdn.net/flyyyri/article/details/5480347 理论:    对于USB接口的设备,现在越来越多了.本篇我们就通过获取一个USB扫描仪设 ...

  10. Linux时间子系统之七:定时器的应用--msleep(),hrtimer_nanosleep()【转】

    转自:http://blog.csdn.net/droidphone/article/details/8104433 我们已经在前面几章介绍了低分辨率定时器和高精度定时器的实现原理,内核为了方便其它子 ...