R语言-缺失值处理5

本文详细介绍了R语言中处理缺失值的步骤和方法,包括识别缺失数据、探索缺失值模式、理解缺失值的来由和影响,以及处理缺失值的完整实例分析。文章提到了多种R包和函数,如mice、VIM、amelia等,用于识别、探索和处理缺失值,并强调了正确处理缺失数据的重要性,特别是区分不同类型的缺失数据和选择合适的处理策略。
摘要由CSDN通过智能技术生成

R语言:缺失值处理

前言

  刚接触缺失数据研究的读者可能会被各式各样的方法和言论弄得眼花缭乱。该领域经典的读本是Little和Rubin的Statistical Analysis with Missing Data, Second Edition(2002)一书。其他比较优秀的专著还有Allison的Missing Data(2001)、Schafer和Graham的"Missing Data: Our View of the State of the Art"(2002),以及Schlomer、Bauman和Card的"Best Practices for Missing Data Management in Counseling Psychology"(2010)。

  一个完整的处理方法通常包含以下几个步骤:

  (1) 识别缺失数据;

  (2) 检查导致数据缺失的原因;

  (3) 删除包含缺失值的实例或用合理的数值代替(插补)缺失值。

  但遗憾的是,仅有识别缺失数据是最清晰明确的步骤。知道数据为何缺失依赖于你对数据生成过程的理解,而决定如何处理缺失值则需要判断哪种方法的结果最为可靠和精确。

  统计学家通常将缺失数据分为三类。它们都用概率术语进行描述,但思想都非常直观。我们将用sleep研究中对做梦时长的测量(有12个动物有缺失值)来依次阐述三种类型。

  (1) 完全随机缺失 若某变量的缺失数据与其他任何观测或未观测变量都不相关,则数据为完全随机缺失(MCAR)。若12个动物的做梦时长值缺失不是由于系统原因,那么可认为数据是MCAR。注意,如果每个有缺失值的变量都是MCAR,那么可以将数据完整的实例看做是对更大数据集的一个简单随机抽样。

  (2) 随机缺失 若某变量上的缺失数据与其他观测变量相关,与它自己的未观测值不相关,则数据为随机缺失(MAR)。例如,体重较小的动物更可能有做梦时长的缺失值(可能因为较小的动物较难观察),“缺失”与动物的做梦时长无关,那么该数据就可以认为是MAR。此时,一旦你控制了体重变量,做梦时长数据的缺失与出现将是随机的。

  (3) 非随机缺失 若缺失数据不属于MCAR或MAR,则数据为非随机缺失(NMAR)。例如,做梦时长越短的动物也更可能有做梦数据的缺失(可能由于难以测量时长较短的事件),那么数据可认为是NMAR。大部分处理缺失数据的方法都假定数据是MCAR或MAR。此时,你可以忽略缺失数据的生成机制,并且(在替换或删除缺失数据后)可以直接对感兴趣的关系进行建模。当数据是NMAR时,想对它进行恰当地分析比较困难,你既要对感兴趣的关系进行建模,还要对缺失值的生成机制进行建模。

  处理缺失数据的方法有很多,但不能保证都生成一样的结果。下图列出了一系列可用来处理不完整数据的方法,以及相应的R包。

%E8%AF%86%E5%88%AB%E7%BC%BA%E5%A4%B1%E5%80%BC.bmp

目录

 1. 识别缺失数据

 2. 探索缺失值模式

 3. 理解缺失值数据的来由和影响

 4. 处理缺失值完整实例分析

 5. 处理缺失值的其他方法

主要程序包

    install.packages(c("VIM","mice"))
    library(VIM)
    library(mice)

1. 识别缺失数据

  首先,我们回顾一下前节的内容并地一步拓展。R使用NA(不可得)代表缺失值,NaN(不是一个数)代表不可能的值。另外,符号Inf和-Inf分别代表正无穷和负无穷。函数is.na()、is.nan()和is.infinite()可分别用来识别缺失值、不可能值和无穷值。每个返回结果都是TRUE或FALSE。表15-1给出了一些示例。

%E7%BC%BA%E5%A4%B1%E5%87%BD%E6%95%B0%E8%BF%94%E5%9B%9E%E5%80%BC%E7%A4%BA%E4%BE%8B.bmp

  这些函数返回的对象与其自身参数的个数相同。若每个元素的类型检验通过,则由TRUE替换,否则用FALSE替换。例如,令y <- c(1, 2, 3, NA),则is.na(y)返回向量c(FALSE, FALSE, FALSE,TRUE)。

  函数complete.cases()可用来识别矩阵或数据框中没有缺失值的行。若每行都包含完整的实例,则返回TRUE的逻辑向量;若每行有一个或多个缺失值,则返回FALSE。

  对于识别缺失值,有两点需要牢记。第一点,complete.cases()函数仅将NA和NaN识别为缺失值,无穷值(Inf和-Inf)被当做有效值。第二点,必须使用与本章中类似的缺失值函数来识别R数据对象中的缺失值。像myvar == NA这样的逻辑比较无法实现。

    NA:代表缺失值;
    NaN:代表不可能的值;
    Inf:代表正无穷;
    -Inf:代表负无穷。
    is.na():识别缺失值;
    is.nan():识别不可能值;
    is.infinite():无穷值。
    is.na()、is.nan()和is.infinte()函数的返回值示例

2. 探索缺失值模式

  在决定如何处理缺失数据前,了解哪些变量有缺失值、数目有多少、是什么组合形式等信息非常有用。本节中,我们将介绍探索缺失值模式的图表及相关方法。最后,如果知道了数据为何缺失,这将为后续深入研究提供许多启示。

 2.1 列表显示缺失值

  你已经学习了一些识别缺失值的基本方法。比如使用complete.cases()函数列出完整的实例,或者相反,列出含一个或多个缺失值的实例。但随着数据集的增大,该方法就逐渐丧失了吸引力。此时你可以转向其他R函数。

  mice包中的md.pattern()函数可生成一个以矩阵或数据框形式展

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值