第18章 处理缺失数据的高级方法

# 目的:识别缺失数据;检查导致数据缺失的原因;删除包含的缺失值的实例或用合理的数值代替(插补)缺失值
#主要包: mice包
#主要数据集:VIM包中的sleep数据集

18.1 处理缺失值流程

1.识别缺失值

2.检查导致出局缺失的原因

3.删除包含缺失值的实例或用合理的值代替缺失值

18.2 识别缺失值

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

#complete.cases()函数可以用来是被矩阵或者数据框中有无缺失值的行
library(VIM)
data(sleep,package="VIM")
complete.cases(sleep)

#注意complete.cases()函数将Na和NaN识别为缺失值,无穷值被当做有效值
sleep1 <- sleep[complete.cases(sleep),]  #列出没有缺失值的行
sleep2 <- sleep[!complete.cases(sleep),] #列出有缺失值的行
str(sleep1) #42行完整数据
str(sleep2) #20行含有缺失值的数据

sum(is.na(sleep$Dream))   #Dream中含有缺失值的个数
mean(is.na(sleep$Dream)) #Dream中含有缺失值的比例
mean(!complete.cases(sleep))  #含有缺失值的行所占比例

18.3 探索缺失值模式

18.3.1 列表显示缺失值

library(mice)
data(sleep,package="VIM")
mice::md.pattern(sleep)

    

18.3.2 图形探究缺失数据

#方法1

library(VIM)
aggr(sleep,prop=FALSE,number=TRUE)

#方法2

matrixplot(sleep)

#方法3
marginplot(sleep[c("Gest","Dream")],pch = c(20),
           col = c("darkgrey","red","blue"))

18.3.3 用相关性探索缺失值

可用指示变量替代数据集中的数据(1表示缺失,0表示存在),这样生成的矩阵有时称作影子矩阵。求这些指示变量间和它们与初始(可观测)变量间的相关性,有助于观察哪些变量常一起缺失,以及分析变量“缺失”与其他变量间的关系。

head(sleep)
x <- as.data.frame(abs(is.na(sleep)))
x
#若sleep的元素缺失,则数据框x对应的元素为1,否则为0

y <- x[which(apply(x, 2, sum)>0)]

# apply中2表示对列进行运算 此处是找出列之和大于0的

cor(y)

# cor(y) 对存在缺失值的项进行相关性分析 可以看到NonD常常与Dream一起缺失 r=0.907

cor(sleep,y,use = "pairwise.complete.obs")

#进行含缺失值变量与其它可观测变量之间的关系分析;
#在相关系数矩阵中行表示可观测变量,列表示指代变量。表中相关系数并不特别大,表明数据是完全随机确实的可能性较小,更可能是随机缺失;
#当缺乏强有力的外部证据时,我们通常假设数据是完全随机缺失或随机缺失;

# 可以忽略矩阵中的警告信息和NA值 这是因为我们选择了pairwise.complete.obs认为因素导致的

 注意:回顾!!!

相关系数计算基本形式:cor(x,use="“,method=“ ”)

x :  矩阵或数据框

use : 指定缺失数据的处理方式。可选的方式为all.obs(假设不存在缺失数据——遇到缺失数据时将报错)、everything(默认,遇到缺失数据时,相关系数的计算结果将被设为missing)、complete.obs(行删除)以及 pairwise.complete.obs(成对删除,pairwise deletion)

method : 指定相关系数的类型。可选类型为pearson、spearman或kendll住y

18.4 理解缺失数据的来由和影响

识别缺失数据的数目、分布和模式有两个目的:

(1)分析生成缺失数据的潜在机制;

(2)评价缺失数据对回答实质性问题的影响。

具体来讲,我们想弄清楚以下几个问题。
缺失数据的比例多大?
缺失数据是否集中在少数几个变量上,抑或广泛存在?
缺失是随机产生的吗?
缺失数据间的相关性或与可观测数据间的相关性,是否可以表明产生缺失值的机制呢?

回答这些问题将有助于判断哪种统计方法最适合用来分析你的数据。

假使已经知道了缺失数据的来源和影响,那么让我们看看如何转换标准的统计方法来适应缺失数据的分析。我们将重点学习三种非常流行的方法:恢复数据的推理方法、涉及删除缺失值的传统方法、涉及模拟的现代方法

18.5 理性处理不完整数据

推理方法会根据变量间的数学或者逻辑关系来填补或恢复缺失值。

推理研究法常常需要创造性和想法,同时还需要许多数据处理技巧,而且数据的恢复可能是准确的或者近似的。

18.6 完整实例分析(行删除)

只有每个变量都包含了有效数据值的观测才会保留下来做进一步的分析。

实际上,这样会导致包含一个或多个缺失值的任意一行都会被删除,因此常称作行删除法(listwise)、个案删除(case-wise)或剔除。

newdata <- mydata[complete.cases(mydata),]
newdata <- na.omit(mydata)
两行代码表示的意思都是:mydata中所有包含缺失数据的行都被删除,然后结果才存储到newdata中。

#假设我们对睡眠研究中变量间的关系感兴趣,计算相关系数前,可以使用行删除法
#删除包含缺失值的所有行
options <- (digits=1)
cor(na.omit(sleep))

fit <- lm(Dream~Span+Gest,data = na.omit(sleep))
summary(fit) #整个分析基于有完整数据的42个实例

fit1 <- lm(Dream~Span+Gest,data = sleep)
summary(fit1) #整个分析基于有Dream+Span+Gest数据的44个实例;若仅损失其它数据但是Dream+Span+Gest仍然含有,则不会被删除

18.7 多重插补法

多重插补(MI)是一种基于重复模拟的处理缺失值的方法。在面对复杂的缺失值问题时,MI是最常选用的方法,它将从一个包含缺失值的数据集中生成一组完整的数据集(通常是3到10个)。每个模拟数据集中,缺失数据将用蒙特卡洛方法来填补。此时,标准的统计方法便可应用到每个模拟的数据集上,通过组合输出结果给出估计的结果,以及引入缺失值时的置信区间。R中可利用Amelia、mice和mi包来执行这些操作。本节中,我们将重点学习mice包(利用链式方程的多元插补)提供的方法。

基于mice包的分析通常符合以下分析过程:
library(mice)
imp <- mice(data, m)
fit <- with(imp, analysis)
pooled <- pool(fit)
summary(pooled)
 mydata是一个包含缺失值的矩阵或数据框。
 imp是一个包含m个插补数据集的列表对象,同时还含有完成插补过程的信息。默认m为5。
 analysis是一个表达式对象,用来设定应用于m个插补数据集的统计分析方法。方法包括做线性回归模型的lm()函数、做广义线性模型的glm()函数、做广义可加模型的gam(),以及做负二项模型的nbrm()函数。表达式在函数的括号中,~的左边是响应变量,右边是预测变量(用+符号分隔开)。
 fit是一个包含m个单独统计分析结果的列表对象。
 pooled是一个包含这m个统计分析平均结果的列表对象。

library(mice)
data("sleep",package="VIM")
imp <- mice(sleep,seed = 1234)
fit <- with(imp,lm(Dream~Span+Gest))
pooled <- pool(fit)
summary(pooled)

#此时的结果与18.6#整个分析基于有完整数据的42个实例结果完全不一样 span不显著但是gest显著

 

#获得更多插补信息
imp


#观测实际的插补值
imp$imp$Dream

#展示多重插补过程中创建的某个完整数据集
datase3 <- complete(imp,action=3)
datase3

#利用 complete() 函数可以观察m个插补数据集中的任意一个。格式为:complete(imp, action=*),其中 * 指定m个完整数据集中的一个来展示。

18.8 其它处理缺失值的方法

15.8.1 成对删除

处理含缺失值的数据集时,成对删除常作为行删除的备选方法使用。对于成对删除,观测只是当它含缺失数据的变量涉及某个特定分析时才会被删除。

15.8.2 简单(非随机)插补

所谓简单插补,即用某个值(如均值、中位数或众数)来替换变量中的缺失值。若使用均值替换,Dream变量中的缺失值可用1.97来替换,NonD中的缺失值可用8.67来替换(两个值分别是Dream和NonD的均值)。注意这些替换是非随机的,这意味着不会引入随机误差(与多重插补不同)。
简单插补的一个优点是,解决“缺失值问题”时不会减少分析过程中可用的样本量。虽然简单插补用法很简单,但是对于非MCAR的数据会产生有偏的结果。若缺失数据的数目非常大,那么简单插补很可能会低估标准差、曲解变量间的相关性,并会生成不正确的统计检验的p值。与成对删除一样,我建议在解决缺失数据的问题时尽量避免使用该方法。

R语言实战-第十八章 R处理缺失数据的高级方法相关推荐

  1. R语言实战笔记--第八章 OLS回归分析

    R语言实战笔记–第八章 OLS回归分析 标签(空格分隔): R语言 回归分析 首先,是之前的文章,数理统计里面的简单回归分析,这里简单回顾一下: 简单回归分析的原理:最小二乘法,即使回归函数与实际值之 ...

  2. R语言实战-第十七章 R in action-chapter17

    本章目的:基于一组预测变量预测一个分类结果 (如:根据关键词.图像.来源等判断一份邮件是否是病毒邮件) 本章用到的package: #rpart rpart.plot party 实现决策树模型及其可 ...

  3. 《数据科学:R语言实现》——3.12 估计缺失数据

    本节书摘来自华章出版社<数据科学:R语言实现>一 书中的第3章,第3.12节,作者:R for Data Science Cookbook 丘祐玮(David Chiu),更多章节内容可以 ...

  4. R语言实战-第十六章 聚类分析

    第16章 聚类分析 本章需要的包 library(flexclust) library(rattle) library(cluster) library(NbClust) library(fMulti ...

  5. 《R语言实战》第八章之回归分析图形

    回归分析图形 回归分析分为简单回归与复杂回归 1 : 简单线性回归即:模型中只包含一个因变量和一个自变量,有时候也会包含多项式, 这个图形描述了身高与体重的线性关系,这也是一个多项式图形 2:当我们的 ...

  6. 李倩星r语言实战_《基于R的统计分析与数据挖掘》教学大纲

    <基于 R 的统计分析与数据挖掘>课程教学大纲 课程代码: 090542009 课程英文名称: R Language and Data Mining 课程总学时: 32 讲课: 32 实验 ...

  7. R语言实战-读书笔记(第1 章 R语言介绍)

    *R语言实战所有学习笔记,如涉及侵权,请联系撤稿.* **标题号与书中标题号对应** R语言实战 第1章 R语言介绍     1.2 R的获取与安装         R可以在CRAN(Comprehe ...

  8. R 语言实战-Part 4 笔记

    R 语言实战(第二版) ## part 4 高级方法 -------------第13章 广义线性模型------------------ #前面分析了线性模型中的回归和方差分析,前提都是假设因变量服 ...

  9. R语言实战 第2版 中文目录

    封面 1 数字版权声明 2 作译者介绍 3 扉页 4 版权页 5 版权声明页 6 对第1版的赞誉 7 致谢 8 前言 10 关于本书 12 关于封面图片 17 目录 18 第一部分 入门 24 第1章 ...

最新文章

  1. linux sublime 输入中文,Linux中Sublime Text无法输入中文怎么办
  2. 13. 找出数组中重复的数字【难度: 简单 / 知识点: 模拟】
  3. java数组的实现_Java数组HashCode实现
  4. DataWorks 功能实践速览
  5. 可能拥有海洋的天然卫星 科学家近日发现有食盐成分
  6. 银河麒麟-麒麟软件操作系统 kylin 搭建yum源 ubuntu搭建yum源 yum软件仓库搭建ftp源、python源、硬盘源
  7. ListListmodel如何更快捷的取里面的model?
  8. linux 远程修改时间,linux 获取远程系统时间的例子
  9. 深入理解Kafka cruise control
  10. STM8L USART串口使用
  11. 2021.07.10 存个直播间链接
  12. 微信开放平台认证后怎么实现扫码登录功能
  13. Android 自定义搜索框(带搜索图标、清除图标、语音图标)
  14. 学习MIT 6.824 部分笔记
  15. android实现歌词的自动滚动
  16. 为什么不建议使用免费的IP代理?
  17. 采用to_excel保存文件不覆盖原有的sheet
  18. 仿抖音--将图片转化成对应的字符图片
  19. 计算机网络和因特网笔记
  20. YII2 扩展 读取excel模板写入数据并导出

热门文章

  1. 一:阿里云服务器使用及后台环境搭建
  2. 微信开发坑哭了自己Code、OpenID、WXConfig、TOKEN、TICKET处处是坑
  3. 数据解析NFT Q1市场表现:NFT生态正向Polygon聚拢,蓝筹项目“保值“难
  4. 找不到AppData怎么办?
  5. jmeter获取token并保存到CSV文件
  6. 对象的属性及属性值遍历
  7. 佳音电话宝 【标准版】
  8. ZHEYI自动采集壁纸系统网站源码 360壁纸官方数据接口采集
  9. ccf 20210402
  10. 常说的代理和VPN究竟是什么