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()
install.packages("naniar")
# install.packages("remotes")
remotes::install_github("njtierney/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_shadow
或nabular
将阴影绑定到数据:
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).
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