在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本文对应《R语言实战》第15章:处理缺失数据的高级方法
本文仅在书的基础上进行简单阐述,更加详细的缺失数据问题研究将会单独写一篇文章。
处理缺失值的一般步骤:
缺失数据的分类: 完全随机缺失(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)
矩阵中,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)
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个统计分析平均结果
|
请发表评论