当前位置:网站首页 > R语言数据分析 > 正文

r语言检测缺失值方法_r语言缺失值的处理方法

我们之前处理的基本都是完整的数据集(即没有缺失值),但在真实的世界中,缺失数据的想象是极其普遍的。

我们常用的统计方法都假定处理的是完整矩阵、向量和数据框。但多数情况下,在处理收集了真实数据的问题之前,我们不得不消除缺失数据:(1)删除含有缺失数据的实例;(2)用合理的替代值替换缺失值。不管哪种方法,最后的结果都是没有缺失值的数据集。

在R语言中,VIM和mice包是处理缺失数据的常用的两个很强大的包。我们将使用VIM包提供的哺乳动物睡眠数据sleep,这份数据研究了62种哺乳动物的睡眠、生态学变量和体质变量间的关系。睡眠数据是因变量,生态学变量和体质变量是自变量。

睡眠变量包含做梦时长(Dream)、不做梦时长(NonD)以及它们的和(Sleep)。体质变量包含体重(BodyWgt,单位为千克)、脑重(BrainWgt,单位为克)、寿命(Span,单位为年)、妊娠期(Gest,单位为天)。生态学变量包含被捕食的程度(Pred)、睡眠时暴露的程度(Exp)和面临的总危险度(Danger)。生态学变量从1(低)到5(高)的5分制进行测量。

处理缺失值通常包含以下几个步骤:

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

缺失数据通常可分为完全随机缺失、随机缺失、非随机缺失三类。以sleep数据集为例,我们依次来阐述这三种类型。

  1. 完全随机缺失。若某变量的缺失数据与其他任何观测或未观测变量都不相关,则数据为完全随机缺失(MCAR)。 若12个动物的做梦时长值缺失不是由于系统原因,那么可认为数据是MCAR。注意,如果每个有缺失值的变量都是MCAR,那么可以将数据完整的实例看做是对更大数据集的一个简单随机抽样。
  2. 随机缺失。若某变量的缺失数据与其他任何观测变量相关,与它自己的未观测值都不相关,则数据为随机缺失(MAR)。例如,体重较小的动物更可能有做梦时长的缺失值(可能因为较小的动物较难观察),“缺失”与动物的做梦时长无关,那么该数据就可以认为是MAR。此时,一旦你控制了体重变量,做梦时长数据的缺失与出现将是随机的。
  3. 非随机缺失。若缺失数据不属于MCAR或MAR,则数据为非随机缺失(NMAR)。例如,做梦时长越短的动物也更可能有做梦数据的缺失(可能由于难以测量时长较短的事件),那么数据可认为是NMAR。

大部分处理缺失数据的方法都就假定数据时MCAR或MAR。此时,我们可以忽略缺失数据的生成机制,并且(在替换或删除缺失数据后)可以直接对感兴趣的关系进行建模。当数据时NMAR时,想对它进行恰当地分析比较困难,我们既要对感兴趣的关系进行建模,还要对缺失值的省层级制进行建模,常见的方法有模型选择法和模式混合法。

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

R语言使用NA代表缺失值,NaN代表不可能的值。另外,符号Inf和-Inf分别代表正无穷和负无穷。函数is.na()、is.nan()和is.infinite()可分别用来识别缺失值、不可能值和无穷值。每个返回结果都是TRUE或FALSE。

这些函数返回的对象与其自身参数的个数相同。若每个元素的类型检验通过,则由TRUE替换,否则用FALSE。例如:

> y <- c(1,2,3,NA)

> is.na(y)

[1] FALSE FALSE FALSE TRUE

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

># 加载数据集

> data(sleep,package="VIM")

>#列出没有缺失值的行

> sleep[complete.cases(sleep),]

>#列出有一个或多个缺失值的行

> sleep[!complete.cases(sleep),]

输出结果显示42个示例为完整数据,20个实例含一个或多个缺失值。

由于逻辑值TRUE和FALSE分别等价于数值1和0,可用sum()和mean()函数来获取关于缺失数据的有用信息。例如:

> sum(is.na(sleep$Dream))

[1] 12

> mean(is.na(sleep$Dream))

[1] 0.

> mean(!complete.cases(sleep))

[1] 0.

结果表明变量Dream有12个缺失值,19%的实例在此变量上有缺失值。另外,数据集中32%的实例包含一个或多个缺失值。

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

到此这篇r语言检测缺失值方法_r语言缺失值的处理方法的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • r语言对数据统计分析案例_r语言多元线性回归分析2024-11-04 17:25:08
  • r语言怎么找缺失值对应的行_r语言数据分析论文2024-11-04 17:25:08
  • r语言描述统计函数_r语言数据分析报告2024-11-04 17:25:08
  • r语言描述统计分析_常见统计量2024-11-04 17:25:08
  • typescriptreact_typescript有必要学吗2024-11-04 17:25:08
  • r语言描述统计函数_统计量定义2024-11-04 17:25:08
  • r语言中缺失值na的数据类型_r语言处理数据2024-11-04 17:25:08
  • r语言数据分析的基本流程_r语言相关性分析2024-11-04 17:25:08
  • r语言描述统计函数_统计量的数字特征2024-11-04 17:25:08
  • r语言怎么找缺失值对应的行_r语言将缺失值替换为02024-11-04 17:25:08
  • 全屏图片