博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
R语言实战(十)处理缺失数据的高级方法
阅读量:6711 次
发布时间:2019-06-25

本文共 2099 字,大约阅读时间需要 6 分钟。

本文对应《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

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

 

转载于:https://www.cnblogs.com/gyjerry/p/6481172.html

你可能感兴趣的文章
项目案例分享四:DC升级后Sysvol停止复制,日志报13508
查看>>
职场思想分享001 | 有多种选择才叫有能力
查看>>
ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)
查看>>
3D圣诞树源码[强力推荐]
查看>>
25 个超棒的 WordPress 主题(2012)
查看>>
Concurrent use of embedded Ruby in Java (using JRuby)
查看>>
基础才是重中之重~.net中的显式事务与隐式事务
查看>>
转载 - 通过设置P3P头来实现跨域访问COOKIE
查看>>
使用泛型创建只读集合
查看>>
SQL Server 中如何判断表是否存在
查看>>
delphi日期格式显示及文件打开方式小结
查看>>
最近看的一些东东
查看>>
POJ 3281 Dining(最大流)
查看>>
SQL Server Management Studio 过期无法使用解决办法
查看>>
Eclipse配置详解(包括智能提示设置、智能提示插件修改,修改空格自动上屏、JDK配置、各种快捷键列表……)...
查看>>
【数据结构】数组和广义表
查看>>
css3中transform的用法
查看>>
为什么Domain controller上的time synchronization非常重要?
查看>>
[转]CDN(内容分发网络)技术原理
查看>>
js中,(function(){})()的用法解析
查看>>