R语言 处理缺失值数据
关注微信公共号:小程在线
关注CSDN博客:程志伟的博客
主要用到VIM和mice包
install.packages(c("VIM","mice"))
1.处理缺失值的步骤
步骤:
(1)识别缺失数据;
(2)检查导致数据缺失的原因;
(3)删除包含缺失值的实例或用合理的数值代替(插补)缺失值
缺失值数据的分类:
(1)完全随机缺失:若某变量的缺失数据与其他任何观测或未观测变量都不相关,则数据为完全随机缺失(MCAR)。
(2)随机缺失:若某变量上的缺失数据与其他观测变量相关,与它自己的未观测值不相关,则数据为随机缺失(MAR)。
(3)非随机缺失:若缺失数据不属于MCAR或MAR,则数据为非随机缺失(NIMAR)。
2.识别缺失值
NA:代表缺失值;
NaN:代表不可能的值;
Inf:代表正无穷;
-Inf:代表负无穷。
is.na():识别缺失值;
is.nan():识别不可能值;
is.infinite():无穷值。
is.na()、is.nan()和is.infinte()函数的返回值示例
x | is.na(x) | is.nan(x) | is.infinite(x) |
x<-NA | TRUE | FALSE | FALSE |
x<-0/0 | TRUE | TRUE | FALSE |
x<-1/0 | FALSE | FALSE | TRUE |
complete.cases()可用来识别矩阵或数据框中没有缺失值的行,若每行都包含完整的实例,则返回TRUE的逻辑向量,若每行有一个或多个缺失值,则返回FALSE;
3.探索缺失值模式
(1)列表显示缺失值
mice包中的md.pattern()函数可以生成一个以矩阵或数据框形式展示缺失值模式的表格
library(mice)
data(sleep,package="VIM")
md.pattern(sleep)
(2)图形探究缺失数据
VIM包中提供大量能可视化数据集中缺失值模式的函数:aggr()、matrixplot()、scattMiss()
library("VIM")
aggr(sleep,prop=FALSE,numbers=TRUE)
library("VIM")
aggr(sleep,prop=TRUE,numbers=TRUE)#用比例代替了计数
matrixplot()函数可生成展示每个实例数据的图形
matrixplot(sleep)
浅色表示值小,深色表示值大;默认缺失值为红色。
marginplot()函数可生成一幅散点图,在图形边界展示两个变量的缺失值信息。
library("VIM")
marginplot(sleep[c("Gest","Dream")],pch=c(20),col=c("darkgray","red","blue"))
(3)用相关性探索缺失值
影子矩阵:用指示变量替代数据集中的数据(1表示缺失,0表示存在),这样生成的矩阵有时称作影子矩阵。
求这些指示变量间和它们与初始(可观测)变量间的相关性,有且于观察哪些变量常一起缺失,以及分析变量“缺失”与其他变量间的关系。
head(sleep)
str(sleep)
x<-as.data.frame(abs(is.na(sleep)))
head(sleep,n=5)
head(x,n=5)
y<-x[which(sd(x)>0)]
cor(y)
cor(sleep,y,use="pairwise.complete.obs")
4.理解缺失值数据的来由和影响
识别缺失数据的数目、分布和模式有两个目的:
(1)分析生成缺失数据的潜在机制;
(2)评价缺失数据对回答实质性问题的影响。
即:
(1)缺失数据的比例有多大?
(2)缺失数据是否集中在少数几个变量上,抑或广泛存在?
(3)缺失是随机产生的吗?
(4)缺失数据间的相关性或与可观测数据间的相关性,是否可以表明产生缺失值的机制呢?
若缺失数据集中在几个相对不太重要的变量上,则可以删除这些变量,然后再进行正常的数据分析;
若有一小部分数据随机分布在整个数据集中(MCAR),则可以分析数据完整的实例,这样仍可得到可靠有效的结果;
若以假定数据是MCAR或MAR,则可以应用多重插补法来获得有铲的结论。
若数据是NMAR,则需要借助专门的方法,收集新数据,或加入一个相对更容易、更有收益的行业。
5.理性处理不完整数据
6.完整实例分析(行删除)
函数complete.cases()、na.omit()可用来存储没有缺失值的数据框或矩阵形式的实例(行):
newdata<-mydata[complete.cases(mydata),]
newdata<-na.omit(mydata)
options(digits=1)
cor(na.omit(sleep))
cor(sleep,use="complete.obs")
fit<-lm(Dream~Span+Gest,data=na.omit(sleep))
summary(fit)
7.多重插补
多重插补(MI)是一种基于重复模拟的处理缺失值的方法。
MI从一个包含缺失值的数据集中生成一组完整的数据集。每个模拟数据集中,缺失数据将使用蒙特卡洛方法来填补。
此时,标准的统计方法便可应用到每个模拟的数据集上,通过组合输出结果给出估计的结果,以及引入缺失值时的置信敬意。
可用到的包Amelia、mice和mi包
mice()函数首先从一个包含缺失数据的数据框开始,然后返回一个包含多个完整数据集的对象。每个完整数据集都是通过对原始数据框中的缺失数据进行插而生成的。
with()函数可依次对每个完整数据集应用统计模型
pool()函数将这些单独的分析结果整合为一组结果。
最终模型的标准误和p值都将准确地反映出由于缺失值和多重插补而产生的不确定性。
基于mice包的分析通常符合以下分析过程:
library(mice)
imp<-mice(mydata,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个统计分析平均结果的列表对象。
</pre><pre name="code" class="plain">library(mice)
data(sleep,package="VIM")
imp<-mice(sleep,seed=1234)
fit<-with(imp,lm(Dream~Span+Gest))
pooled<-pool(fit)
summary(pooled)
imp
imp$imp$Dream
利用complete()函数可观察m个插补数据集中的任意一个,格式为:complete(imp,action=#)
eg:
dataset3<-complete(imp,action=3)
dataset3
8.处理缺失值的其他方法
处理缺失数据的专业方法
软件包 | 描述 |
Hmisc | 包含多种函数,支持简单插补、多重插补和典型变量插补 |
mvnmle | 对多元正态颁数据中缺失值的最大似然估计 |
cat | 对数线性模型中多元类别型变量的多重插补 |
arrayImpute\arraryMissPattern、SeqKnn | 处理微阵列缺失值数据的实用函数 |
longitudinalData | 相关的函数列表,比如对时间序列缺失值进行插补的一系列函数 |
kmi | 处理生存分析缺失值的Kaplan-Meier多重插补 |
mix | 一般位置模型中混合类别型和连续型数据的多重插补 |
pan | 多元面板数据或聚类的多重插补 |
(1)成对删除
cor(sleep,use="pairwise.complete.obs")
(2)简单(非随机)插补
9.R中制作出版级品质的输出
常用方法:Sweave和odfWeave。
Sweave包可将R代码及输出嵌入到LaTeX文档中,从而得到 PDF、PostScript和DVI格式的高质量排版报告。
odfWeave包可将R代码及输出嵌入到ODF(Open Documents Format)的文档中
R语言 处理缺失值数据相关推荐
- 如何利用R语言处理 缺失值 数据
主要用到VIM和mice包 [plain] view plain copy install.packages(c("VIM","mice")) 1.处理缺失 ...
- R语言把dataframe数据转化为tibble格式、查看每个数据列的缺失值个数、使用数据列的均值对数据列的缺失值进行填充
R语言把dataframe数据转化为tibble格式.查看每个数据列的缺失值个数.使用数据列的均值对数据列的缺失值进行填充 目录
- R语言-数据清洗-缺失值处理
缺失值处理包括两个步骤,即缺失数据的识别和缺失值处理.在R语言总缺失值以NA表示,可以使用函数is.na()判断缺失值是否存在,函数complete.cases()可识别样本数据是否完整从而判断缺失情 ...
- R语言处理缺失数据的5个常用包
R语言处理缺失数据的5个常用包 1.常用缺失数据处理包 2. MICE 包 2.1基本介绍 2.2 实例展示 3.Amelia包 3.1基本介绍 3.2实例展示 4.missForest包 4.1基本 ...
- R语言入门第二集 实验一:R 语言数据结构、数据导入与数据处理
R语言入门第二集 实验一:R 语言数据结构.数据导入与数据处理 一.资源 R语言基本数据结构练习和数据的导入和处理对象常用函数练习--东北大学大数据班R语言实训第一次作业" R(4)求解数据 ...
- R语言处理表格数据(一)
目录 写在前面 1. Excel有上百列数据,把每列数据首尾相接合并成一个向量(一列) 2. 合并多个数据表(.csv) 3. 实现2个Excel表相同数据的关联,并提取相同数据到新表 4. 获取Ex ...
- R语言进行缺失值填充(Filling in missing values):使用R原生方法、data.table、dplyr等方案
R语言进行缺失值填充(Filling in missing values):使用R原生方法.data.table.dplyr等方案 目录 R语言进行缺失值填充&#x
- R语言进行dataframe数据内连接(Inner join):使用R原生方法、data.table、dplyr等方案
R语言进行dataframe数据内连接(Inner join):使用R原生方法.data.table.dplyr等方案 目录 R语言进行dataframe数据内连接(Inner join):使用R原生 ...
- R语言可视化dataframe数据、并自定义设置坐标轴各个标签使用不同的色彩
R语言可视化dataframe数据.并自定义设置坐标轴各个标签使用不同的色彩 目录 R语言可视化dataframe数据.并自定义设置坐标轴各个标签使用不同的色彩
最新文章
- 自回归与非自回归模型如何兼得?预训练模型BANG或许可解
- MySQL主从复制异步原理以及搭建
- Symbian c++ MCameraObserver类的方法解释
- 【☀️不定期更新了⛅】感谢知识输出的正反馈
- 消费提示:警惕近期淘宝上大量超低价白菜包邮产品
- 一步步学习EF Core(3.EF Core2.0路线图)
- layui分页limit不显示_【图片】新手 分页显示不了呀【layui吧】_百度贴吧
- 刷脸考勤,重新定位校园管理
- centos odbc mysql_Centos下安装并配置ODBC连接MySQL 【转】
- oracle修改undo清理时间,修改Oracle的Undo文件的方法
- Warning: lio_listio returned EAGAIN Performance degradation may be seen
- Spring AOP配置文件
- HTML页面加载异常,按F12调试后居然又好了的解决办法!
- 使用ionic2开发一个登录功能
- 多旋翼无人机动力系统发展历程
- ctc decoder
- HDU 3533 Escape
- 用360查看本地dns
- rtsp流媒体播放器----ffmpeg相关代码走读(一)
- [codeforces1139C]Edgy Trees
热门文章
- JAVA集合详解(附完整代码)
- 一.树和二叉树的应用
- 朋友突然月入12k,原来是偷偷看了这个!
- 用学过的python写一个计算三角形面积和周长
- PyCharm激活时遇到This license K71U8DBPNE has been cancelled的解决办法
- 统信UOS从虚拟机(BIOS引导)迁移到本机物理机加UEFI改造
- vue-获取当前位置
- eclipse svn插件 如何查看所有历史记录及如何设置默认历史记录数
- iFLEX-Viper™是一款紧凑型多波长合束激光器,使用单模光纤耦合输出。最多将5钟波长(405, 4...
- 电路板(印刷电路板 线路板)上的字母的含义