• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

如何利用R语言处理 缺失值 数据

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

主要用到VIM和mice包

[plain] view plain copy
  1. 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()函数可以生成一个以矩阵或数据框形式展示缺失值模式的表格

[plain] view plain copy
  1. library(mice)  
  2. data(sleep,package="VIM")  
  3. md.pattern(sleep)  

(2)图形探究缺失数据

VIM包中提供大量能可视化数据集中缺失值模式的函数:aggr()、matrixplot()、scattMiss()

[plain] view plain copy
  1. library("VIM")  
  2. aggr(sleep,prop=FALSE,numbers=TRUE)  

[plain] view plain copy
  1. library("VIM")  
  2. aggr(sleep,prop=TRUE,numbers=TRUE)#用比例代替了计数  

matrixplot()函数可生成展示每个实例数据的图形

[plain] view plain copy
  1. matrixplot(sleep)  

浅色表示值小,深色表示值大;默认缺失值为红色。

marginplot()函数可生成一幅散点图,在图形边界展示两个变量的缺失值信息。

[plain] view plain copy
  1. library("VIM")  
  2. marginplot(sleep[c("Gest","Dream")],pch=c(20),col=c("darkgray","red","blue"))  

(3)用相关性探索缺失值

影子矩阵:用指示变量替代数据集中的数据(1表示缺失,0表示存在),这样生成的矩阵有时称作影子矩阵。

求这些指示变量间和它们与初始(可观测)变量间的相关性,有且于观察哪些变量常一起缺失,以及分析变量“缺失”与其他变量间的关系。


[plain] view plain copy
  1. head(sleep)  
  2. str(sleep)  
  3. x<-as.data.frame(abs(is.na(sleep)))  
  4. head(sleep,n=5)  
  5. head(x,n=5)  
  6. y<-x[which(sd(x)>0)]  
  7. cor(y)  
  8. cor(sleep,y,use="pairwise.complete.obs")  

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

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

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

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

即:

(1)缺失数据的比例有多大?

(2)缺失数据是否集中在少数几个变量上,抑或广泛存在?

(3)缺失是随机产生的吗?

(4)缺失数据间的相关性或与可观测数据间的相关性,是否可以表明产生缺失值的机制呢?


若缺失数据集中在几个相对不太重要的变量上,则可以删除这些变量,然后再进行正常的数据分析;

若有一小部分数据随机分布在整个数据集中(MCAR),则可以分析数据完整的实例,这样仍可得到可靠有效的结果;

若以假定数据是MCAR或MAR,则可以应用多重插补法来获得有铲的结论。

若数据是NMAR,则需要借助专门的方法,收集新数据,或加入一个相对更容易、更有收益的行业。

5.理性处理不完整数据

6.完整实例分析(行删除)

函数complete.cases()、na.omit()可用来存储没有缺失值的数据框或矩阵形式的实例(行):

[plain] view plain copy
  1. newdata<-mydata[complete.cases(mydata),]  
  2. newdata<-na.omit(mydata)  

[plain] view plain copy
  1. options(digits=1)  
  2. cor(na.omit(sleep))  
  3. cor(sleep,use="complete.obs")  


[plain] view plain copy
  1. fit<-lm(Dream~Span+Gest,data=na.omit(sleep))  
  2. summary(fit)  

7.多重插补

多重插补(MI)是一种基于重复模拟的处理缺失值的方法。

MI从一个包含缺失值的数据集中生成一组完整的数据集。每个模拟数据集中,缺失数据将使用蒙特卡洛方法来填补。

此时,标准的统计方法便可应用到每个模拟的数据集上,通过组合输出结果给出估计的结果,以及引入缺失值时的置信敬意。

可用到的包Amelia、mice和mi包

mice()函数首先从一个包含缺失数据的数据框开始,然后返回一个包含多个完整数据集的对象。每个完整数据集都是通过对原始数据框中的缺失数据进行插而生成的。

with()函数可依次对每个完整数据集应用统计模型

pool()函数将这些单独的分析结果整合为一组结果。

最终模型的标准误和p值都将准确地反映出由于缺失值和多重插补而产生的不确定性。


基于mice包的分析通常符合以下分析过程:

[plain] view plain copy
  1. library(mice)  
  2. imp<-mice(mydata,m)  
  3. fit<-with(imp,analysis)  
  4. pooled<-pool(fit)  
  5. summary(pooled)  
[plain] view plain copy
  1. mydata是一个饮食缺失值的矩阵或数据框;  
[plain] view plain copy
  1. imp是一个包含m个插补数据集的列表对象,同时还含有完成插补过程的信息,默认的m=5  
[plain] view plain copy
  1. analysis是一个表达式对象,用来设定应用于m个插补的统计分析方法。方法包括做线回归模型的lm()函数、做广义线性模型的glm()函数、做广义可加模型的gam()、及做负二项模型的nbrm()函数。  
[plain] view plain copy
  1. fit是一个包含m个单独统计分析结果的列表对象;  
[plain] view plain copy
  1. pooled是一个包含这m个统计分析平均结果的列表对象。  
[plain] view plain copy
  1. </pre><pre name="code" class="plain">library(mice)  
  2. data(sleep,package="VIM")  
  3. imp<-mice(sleep,seed=1234)  

[plain] view plain copy
  1. fit<-with(imp,lm(Dream~Span+Gest))  
  2. pooled<-pool(fit)  
  3. summary(pooled)  

 

[plain] view plain copy
  1. imp  


[plain] view plain copy
  1. imp$imp$Dream  

利用complete()函数可观察m个插补数据集中的任意一个,格式为:complete(imp,action=#)

eg:

[plain] view plain 
该文章已有0人参与评论

请发表评论

全部评论

上一篇:
win10上对比matlab来研究R语言的笔记发布时间:2022-07-18
下一篇:
R语言中&quot;NA&quot;与&quot;NULL&quot;的区别发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap