设为首页 加入收藏

TOP

R实战 第十一篇:处理缺失值(二)
2019-08-15 00:09:53 】 浏览:183
Tags:实战 十一篇 处理 缺失
0.24546836 0.12740768 0.260772984 -0.19291879 -0.19291879 Danger 0.06528387 -0.06724755 0.208883617 -0.06666498 -0.20443928 Warning message: In cor(sleep, y, use = "pairwise.complete.obs") : 标准差为零

在这个相关系数矩阵中,行是可观测的变量,列为表示缺失的指示变量。注意,表中的相关系数都不大,表明数据是MCAR的可能性比较小,更可能是MAR。

三,缺失数据的处理

识别缺失数据的数目、分布和模式,有两个目的:分析生成缺失数据的潜在机制,评价缺失数据对回答实质性问题的影响。具体来讲,需要弄清楚以下几个问题:

  • 缺失数据的比例有多大?
  • 缺失数据是否集中在少数几个变量上,抑或广泛存在?
  • 缺失是随机产生的吗?
  • 缺失数据间的相关性或与可观测数据之间的相关性,是否可以表明产生缺失值的机制。

回答这些问题将有助于采用合适的方法来处理缺失数据。

  • 如果缺失数据集中在几个相对不重要的变量上,那么可以删除这些变量。
  • 如果有一小部分数据(如小于10%)随机分布在整个数据集中(MCAR),那么你可以删除存在缺失数据的行,而只分析数据完整的实例,这样扔可以得到可靠且有效的结果。
  • 如果可以假定数据是MCAR或MAR,那么可以应用多重插补法来获得有效的结论。

1,推理恢复

根据变量之间的关系来填补或恢复缺失值,通过推理,数据的恢复可能是准确的或近似的。 

2,行删除

把包含一个或多个缺失值的行删除,称作行删除法,或个案删除(case-wise deletion),大部分统计软件包默认采用的是行删除法。

newdata <- mydata[complete.cases(mydata),]
newdata <- na.omit(mydata)

当数据是MCAR(完整的观测只是全数据集的一个随机样本)时,采用行删除之后,也会得到可靠和有效的结论。

3,简单插补

简单插补,也叫均值插补,是用均值,中位数或众数来替换变量中缺失的值。将初始数据集中的属性分为数值属性和非数值属性来分别进行处理。 

  • 如果空值是数值型的,就根据该属性在其他所有对象的取值的平均值来填充该缺失的属性值; 
  • 如果空值是非数值型的,就根据统计学中的众数原理,用该属性在其他所有对象的取值次数最多的值(即出现频率最高的值)来补齐该缺失的属性值。

简单插补对于非MCAR的数据会产生有偏向的结果,适用于缺失数据的数量较小的数据集。均值插补是在低缺失率下首选的插补方法,缺点是不能反映缺失值的变异性;

四,插补法(MI)

插补法可以在一定程度上减少偏差,常用的插补法是回归插补、多重插补和热卡插补。

  • 回归插补,要求变量间存在强的相关性;
  • 多重插补(MCMC法),是在高缺失率下的首选插补方法,优点是考虑了缺失值的不确定性;

1,回归插补

基于完整的数据集,建立回归方程。对于包含空值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。当变量不是线性相关时会导致有偏差的估计。

2,多重插补

多重插补(MI)是一种基于重复模拟的处理缺失值的方法,它从一个包含缺失值的数据集中生成一组数据完整的数据集(即不包含缺失值的数据集,通常是3-10个)。每个完整数据集都是通过对原始数据中的缺失数据进行插补而生成的。在每个完整的数据集上引用标准的统计方法,最后,把这些单独的分析结果整合为一组结果。

多重插补法大致分为三步:

  • 为每个空值产生一套可能的插补值,这些值反映了无响应模型的不确定性;每个值都被用来插补数据集中的缺失值,产生若干个完整数据集合。
  • 每个插补数据集合都用针对完整数据集的统计方法进行统计分析。
  • 对来自各个插补数据集的结果进行整合,产生最终的统计推断,这一推断考虑到了由于数据插补而产生的不确定性。该方法将空缺值视为随机样本,这样计算出来的统计推断可能受到空缺值的不确定性的影响。

R中可以利用Amelia、mice和mi包来执行这些操作。下图可以帮助理解mice包的操作过程。

函数mice()首先从一个包含缺失数据的数据框开始,然后返回一个包含多个(默认为5个)完整数据集的对象。每个完整数据集都是通过对原始数据框中的缺失数据进行插补而生成的。由于插补有随机的成分,因此每个完整数据集都略有不同。然后,with()函数可依次对每个完整的数据集应用统计模型(如线性模型或广义线性模型),最后,pool()函数把这些单独的分析结果整合为一组结果。最终模型的标准差和p值都准确地反映出由于缺失值和多重插补而产生的不确定性。

library(mice)
imp <- mice(data seed=m)
fit <- with( imp, lm())
po<- pool(fit)
summary(po)

mice()函数如何插补缺失值?

缺失值的插补法通过Gibbs抽样完成,每个包含缺失值的变量都默认可通过数据集中的其他变量预测的来,于是这些预测方程便可用于预测数据的有效值。该方程不断迭代直到所有的缺失值都收敛为止。

默认情况下,预测的均值用于替换连续性变量中的缺失数据,而Logistic或多元Logisitcs回归分别用于替换二值目标变量(两水平因子)或多值变量(多水平因子)。

mice包中的mice函数:

mice(data, m = 5, method = NULL, defaultMethod = c("pmm", "logreg", "polyreg", "polr"), seed = NA, ...)

重要参数注释:

  • m:多重插补的次数,默认值是5
  • method:用于每列插补的算法
  • defaultMethod:默认的插补算法
  • seed:随机数种子

3,热卡填充(Hot deck imputation,或就近补齐)

对于一个包含空值的对象,热卡填充法在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。不同的问题可能会选用不同的标准来对相似进行判定。该方法概念上很简单,且利用了数据间的关系来进行空值估计。这个方法的缺点在于难以定义相似标准,主观因素较多。

 

 

参考文档:

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇在 R 中估计 GARCH 参数存在的问.. 下一篇如何将R中的data frame对象的数据..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目