专栏首页生信小驿站R语言naniar包(新名词:阴影矩阵;Shadow matrices)

R语言naniar包(新名词:阴影矩阵;Shadow matrices)

naniar提供了有条理,整洁的方式来汇总,可视化和处理丢失的数据,它的特性是:

  • 阴影矩阵(用于缺失数据)
    • bind_shadow() and nabular()
  • 统计缺失数据
    • n_miss() and n_complete()
    • pct_miss()and pct_complete()
  • 总结缺失数据
    • miss_var_summary() and miss_var_table()
    • miss_case_summary(), miss_case_table()
  • 缺失数据的可视化:
    • geom_miss_point()
    • gg_miss_var()
    • gg_miss_case()
    • gg_miss_fct()

安装

  • CRAN:
install.packages("naniar")
  • github
# install.packages("remotes")
remotes::install_github("njtierney/naniar")

首先尝试一下naniar

library(ggplot2)

ggplot(data = airquality,
       aes(x = Ozone,
           y = Solar.R)) +
  geom_point()
#> Warning: Removed 42 rows containing missing values (geom_point).

因为ggplot2不能处理缺失值,所以我们得到了一个warning message ,我们可以使用geom_miss_point() 去展示缺失数据。

library(naniar)
ggplot(data = airquality,
       aes(x = Ozone,
           y = Solar.R)) +
  geom_miss_point()

geom_miss_point() 已将缺失值移到比最小值低10%的位置。 缺失值是一种不同的颜色,因此缺失变得十分关注。 由于它是ggplot2几何图形,因此支持诸如构面和其他ggplot功能等功能。

p1 <-
ggplot(data = airquality,
       aes(x = Ozone,
           y = Solar.R)) + 
  geom_miss_point() + 
  facet_wrap(~Month, ncol = 2) + 
  theme(legend.position = "bottom")

p1

naniar提供了一种用于处理缺失数据的数据结构,即阴影矩阵。阴影矩阵与数据的维数相同,由数据值缺失的二进制指示符组成,其中缺失表示为“ NA”,而未缺失表示为“!NA”,变量名保持相同, 在变量中添加后缀“ _NA”。

head(airquality)
#>   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

as_shadow(airquality)
#> # A tibble: 153 x 6
#>    Ozone_NA Solar.R_NA Wind_NA Temp_NA Month_NA Day_NA
#>    <fct>    <fct>      <fct>   <fct>   <fct>    <fct> 
#>  1 !NA      !NA        !NA     !NA     !NA      !NA   
#>  2 !NA      !NA        !NA     !NA     !NA      !NA   
#>  3 !NA      !NA        !NA     !NA     !NA      !NA   
#>  4 !NA      !NA        !NA     !NA     !NA      !NA   
#>  5 NA       NA         !NA     !NA     !NA      !NA   
#>  6 !NA      NA         !NA     !NA     !NA      !NA   
#>  7 !NA      !NA        !NA     !NA     !NA      !NA   
#>  8 !NA      !NA        !NA     !NA     !NA      !NA   
#>  9 !NA      !NA        !NA     !NA     !NA      !NA   
#> 10 NA       !NA        !NA     !NA     !NA      !NA   
#> # … with 143 more rows

将阴影矩阵绑定到有助于您更好地跟踪缺失值的数据。 这种格式称为“ nabular”,是“ NA”和“ tabular”的组合。 您可以使用bind_shadownabular将阴影绑定到数据:

bind_shadow(airquality)
#> # A tibble: 153 x 12
#>    Ozone Solar.R  Wind  Temp Month   Day Ozone_NA Solar.R_NA Wind_NA Temp_NA
#>    <int>   <int> <dbl> <int> <int> <int> <fct>    <fct>      <fct>   <fct>  
#>  1    41     190   7.4    67     5     1 !NA      !NA        !NA     !NA    
#>  2    36     118   8      72     5     2 !NA      !NA        !NA     !NA    
#>  3    12     149  12.6    74     5     3 !NA      !NA        !NA     !NA    
#>  4    18     313  11.5    62     5     4 !NA      !NA        !NA     !NA    
#>  5    NA      NA  14.3    56     5     5 NA       NA         !NA     !NA    
#>  6    28      NA  14.9    66     5     6 !NA      NA         !NA     !NA    
#>  7    23     299   8.6    65     5     7 !NA      !NA        !NA     !NA    
#>  8    19      99  13.8    59     5     8 !NA      !NA        !NA     !NA    
#>  9     8      19  20.1    61     5     9 !NA      !NA        !NA     !NA    
#> 10    NA     194   8.6    69     5    10 NA       !NA        !NA     !NA    
#> # … with 143 more rows, and 2 more variables: Month_NA <fct>, Day_NA <fct>
nabular(airquality)
#> # A tibble: 153 x 12
#>    Ozone Solar.R  Wind  Temp Month   Day Ozone_NA Solar.R_NA Wind_NA Temp_NA
#>    <int>   <int> <dbl> <int> <int> <int> <fct>    <fct>      <fct>   <fct>  
#>  1    41     190   7.4    67     5     1 !NA      !NA        !NA     !NA    
#>  2    36     118   8      72     5     2 !NA      !NA        !NA     !NA    
#>  3    12     149  12.6    74     5     3 !NA      !NA        !NA     !NA    
#>  4    18     313  11.5    62     5     4 !NA      !NA        !NA     !NA    
#>  5    NA      NA  14.3    56     5     5 NA       NA         !NA     !NA    
#>  6    28      NA  14.9    66     5     6 !NA      NA         !NA     !NA    
#>  7    23     299   8.6    65     5     7 !NA      !NA        !NA     !NA    
#>  8    19      99  13.8    59     5     8 !NA      !NA        !NA     !NA    
#>  9     8      19  20.1    61     5     9 !NA      !NA        !NA     !NA    
#> 10    NA     194   8.6    69     5    10 NA       !NA        !NA     !NA    
#> # … with 143 more rows, and 2 more variables: Month_NA <fct>, Day_NA <fct>

可视化

airquality %>%
  bind_shadow() %>%
  ggplot(aes(x = Temp,
             fill = Ozone_NA)) + 
  geom_density(alpha = 0.5)
airquality %>%
  bind_shadow() %>%
  simputation::impute_lm(Ozone ~ Temp + Solar.R) %>%
  ggplot(aes(x = Solar.R,
             y = Ozone,
             colour = Ozone_NA)) + 
  geom_point()
#> Warning: Removed 7 rows containing missing values (geom_point).

执行upset图

gg_miss_upset(airquality)

变量可视化

借助tidyverse的工具,naniar在遵循易于阅读的一致原则的同时做到了这一点,naniar还为每个变量提供了方便的可视化效果。

gg_miss_var(airquality)

给定变量在重复跨度中的缺失数

gg_miss_span(pedestrian,
             var = hourly_counts,
             span_every = 1500)

统计缺失和完整观测值

naniar还提供了方便的助手来计算缺失和完整观测值的数量,比例和百分比:

n_miss(airquality)
#> [1] 44
n_complete(airquality)
#> [1] 874
prop_miss(airquality)
#> [1] 0.04793028
prop_complete(airquality)
#> [1] 0.9520697
pct_miss(airquality)
#> [1] 4.793028
pct_complete(airquality)
#> [1] 95.20697

缺失数据的数值摘要

可以使用miss_var_summary()miss_case_summary()查看每种情况下的缺失数量和百分比以及变量,它们都返回按缺失值数量排序的输出。

miss_var_summary(airquality)
#> # A tibble: 6 x 3
#>   variable n_miss pct_miss
#>   <chr>     <int>    <dbl>
#> 1 Ozone        37    24.2 
#> 2 Solar.R       7     4.58
#> 3 Wind          0     0   
#> 4 Temp          0     0   
#> 5 Month         0     0   
#> 6 Day           0     0
miss_case_summary(airquality)
#> # A tibble: 153 x 3
#>     case n_miss pct_miss
#>    <int>  <int>    <dbl>
#>  1     5      2     33.3
#>  2    27      2     33.3
#>  3     6      1     16.7
#>  4    10      1     16.7
#>  5    11      1     16.7
#>  6    25      1     16.7
#>  7    26      1     16.7
#>  8    32      1     16.7
#>  9    33      1     16.7
#> 10    34      1     16.7
#> # … with 143 more rows

group_by()计算出每个变量在各个级别中缺失的数量。

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
airquality %>%
  group_by(Month) %>%
  miss_var_summary()
#> # A tibble: 25 x 4
#> # Groups:   Month [5]
#>    Month variable n_miss pct_miss
#>    <int> <chr>     <int>    <dbl>
#>  1     5 Ozone         5     16.1
#>  2     5 Solar.R       4     12.9
#>  3     5 Wind          0      0  
#>  4     5 Temp          0      0  
#>  5     5 Day           0      0  
#>  6     6 Ozone        21     70  
#>  7     6 Solar.R       0      0  
#>  8     6 Wind          0      0  
#>  9     6 Temp          0      0  
#> 10     6 Day           0      0  
#> # … with 15 more rows

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据处理第一节:选取列的基本到高级方法选取列列名

    博客原文:https://suzan.rbind.io/2018/01/dplyr-tutorial-1/ 作者:Suzan Baert

    用户1359560
  • R语言第二章数据处理⑥dplyr包(1)列选取目录选取列

    =========================================

    用户1359560
  • NA、Inf、NaN、NULL等值处理

    这几个都是R语言里面的特殊值,都是R的保留字(reserved words)。它们的意义分别为:

    用户1359560
  • GBS hapmap 格式 转化为Plink格式方法

    进行重测序或者GBS时,hapmap 是比较常见的格式,生信中经常使用这种格式。但是在GWAS和GS中,数据筛选,质控,构建矩阵都是使用的plink的格式。本文...

    邓飞
  • R语言中回归模型预测的不同类型置信区间应用比较分析

    我们正在这里做出一个预测。正如在R课堂上(以及在预测模型的过程中)所回顾的,当我们要为预测提供一个置信区间时,建议您为预测器确定置信区间(这将取决于预测误差)参...

    拓端
  • 数据处理第一节:选取列的基本到高级方法选取列列名

    博客原文:https://suzan.rbind.io/2018/01/dplyr-tutorial-1/ 作者:Suzan Baert

    用户1359560
  • TidyFriday 每天 5 分钟,轻轻松松上手 R 语言(五)

    今天我们依旧利用 msleep 数据集来探讨 dplyr 的列筛选,并在最后补充几个行筛选的例子。

    王诗翔呀
  • R语言第二章数据处理⑥dplyr包(1)列选取目录选取列

    =========================================

    用户1359560
  • 学徒讨论-在数据框里面使用每列的平均值替换NA

    他认为替换不干净,应该是循环有问题。希望我们帮忙检查,我通常是懒得看其他人写的代码,所以让群里的小伙伴们有空的都尝试写一下。

    生信技能树
  • RNA-seq(10):KEGG通路可视化:gage和pathview

    开始用gage包进行富集分析,gage()函数需要fold change 和Entrez gene IDs

    Y大宽

扫码关注云+社区

领取腾讯云代金券