关于R实现缺失值的可视化

因为准备考研,所以把R语言的学习耽误了许久。现在准备一边等考研成绩,一边再把R重新学过。

缺失值的可视化

缺失值大体上可以分为两类,一类是NA,即NULL;还有一种是异常点,比如在记录患者胰岛素含量的变量下出现数字0等明显异常的数值。

识别缺失值

缺失值的类别

1.Missing Completely at Random(MCAR)

指的是数据的缺失是完全随机的,并不依赖于任何不完全变量或完全变量,不影响样本的无偏性。就像是抛硬币一样,在理想情况下结果是完全随机的,所以在数据量足够的情况下,对于此类含缺失值的数据可以直接删除。

2.Missing at Random(MAR)

可以理解为某一类的人员会出现缺失值,比如在体测中血压值高于某个阈值的学生将不记录长跑成绩,这也便导致了缺失值的概率并不为恒值,即缺失值的出现并非随机,而是和某个变量值相关。

3.Missing Not at Random(MNAR)

指的是数据的缺失与不完全变量自身的取值有关,比如在人口普查时人们不愿意提供真实的工资收入数据,从而导致的偏差值,缺失值。

缺失值的识别

在R中,可以利用is.na()进行缺失值的逻辑值判断,R将会针对每一个变量值给出TRUE和FALSE的回答。如果只需要简单了解总的缺失值个数,也可以用sum(is.na(data))来做到。当然后面会使用其他函数来制作缺失表。

缺失值的可视化

下面的例子将会使用到VIM包和mice包,与其含有的airquality数据集

> #清空数据
> rm(list = ls())
> #运行对应的R包
> library(VIM)
> library(mice)
> #导入数据
> data("airquality")
> #对数据进行简答查看
> summary(airquality)
     Ozone           Solar.R           Wind             Temp      
 Min.   :  1.00   Min.   :  7.0   Min.   : 1.700   Min.   :56.00  
 1st Qu.: 18.00   1st Qu.:115.8   1st Qu.: 7.400   1st Qu.:72.00  
 Median : 31.50   Median :205.0   Median : 9.700   Median :79.00  
 Mean   : 42.13   Mean   :185.9   Mean   : 9.958   Mean   :77.88  
 3rd Qu.: 63.25   3rd Qu.:258.8   3rd Qu.:11.500   3rd Qu.:85.00  
 Max.   :168.00   Max.   :334.0   Max.   :20.700   Max.   :97.00  
 NA's   :37       NA's   :7                                       
     Month            Day      
 Min.   :5.000   Min.   : 1.0  
 1st Qu.:6.000   1st Qu.: 8.0  
 Median :7.000   Median :16.0  
 Mean   :6.993   Mean   :15.8  
 3rd Qu.:8.000   3rd Qu.:23.0  
 Max.   :9.000   Max.   :31.0  
                               
> head(airquality,6)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6
> sum(is.na(airquality))
[1] 44

可以看出数据集内部含有44个缺失值

创建缺失表

> md.pattern(airquality)
    Wind Temp Month Day Solar.R Ozone   
111    1    1     1   1       1     1  0
35     1    1     1   1       1     0  1
5      1    1     1   1       0     1  1
2      1    1     1   1       0     0  2
       0    0     0   0       7    37 44

表内第一列代表完整数据的个数,即有111个完整数据,44个缺失值。
其中1表示无缺失,0代表有缺失值。
看第二行表示仅缺失Ozone的数据有35个,同样地,仅缺失Solar.R的数据有5个,同时缺失Ozone和Solar.R的数据有两个。同时该代码能展现出缺失图。
纵看则表示,缺失Solar.R的有7个数据,缺失Ozone的则有37个数据。
在这里插入图片描述

缺失图的绘制

#先绘制纵轴为数量的
aggr(airquality,prop = F,number = T)

prop = F,number = T

#再绘制纵轴为比例的
aggr(airquality,prop = T,number = F)

在这里插入图片描述其中,matrixplot()函数可以针对每一个数据进行缺失值的可视化。
颜色表达了变量值的大小,浅色值小,深色值大,而红色代表着缺失值。

> matrixplot(airquality)

在这里插入图片描述同时,利用marginplot()也可以创建带有箱线图的缺失图

> marginplot(airquality[c("Ozone","Solar.R")],
+            pch = c(16),
+            col = c("green","red","blue"))

在这里插入图片描述左侧的37个红点代表缺失Ozone的数据,下方的五个红点代表缺失Solar.R的数据,左下的蓝点则表示同时缺失二者的数据。从散点图也可以看出二者的关系,属于非线性关系。而绿色和红色分别表示了无缺失值和有缺失值的Solar,R和Ozone箱线图。

利用相关性,判断缺失值类型

最后可以将指示变量设置为0-1变量替代数据集的变量值,以得到影子矩阵,再通过影子矩阵求得指示变量和初始变量之间的相关性,有利于我们分析判断变量的缺失与其他变量之间的关系。

> #利用相关性探索缺失值
> #构建影子矩阵
> #将指示变量设置为0-1变量替代数据集的变量值
> #1表示缺失,0表示不缺失
> x <- as.data.frame(abs(is.na(airquality)))
> y <- x[which(apply(x, 2, sum)>0)]
> cor(y)
             Ozone    Solar.R
Ozone   1.00000000 0.02244102
Solar.R 0.02244102 1.00000000

通过矩阵可以看出二者缺失的情况相关性很弱,只有0.022,即二者缺失的相关关系很弱,可以认为二者的数据缺失之间没有关系。
接着进行缺失值与其他变量之间的相关关系分析。

> cor(airquality,y,use = 'pairwise.complete.obs')
               Ozone      Solar.R
Ozone             NA  0.004333819
Solar.R  0.022416130           NA
Wind     0.048128600 -0.059707639
Temp     0.002188971 -0.113316379
Month   -0.256852370 -0.109762193
Day      0.053995425 -0.165076368

可以看出除了Month以外的变量都与Ozone的缺失关系很小,而鉴于Month与其数据缺失的相关度也只有0.26左右,可以认为其为MAR或是MCAR。
而和Solar.R缺失相关度最高的是Day变量,但其也只有0.17左右,则可以认为其是MCAR。

  • 0
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值