在 R 中处理缺失数据
Nicholas Tierney
Statistician
什么是缺失值
缺失值是本应被记录却未记录的数值。
如何汇总缺失值
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
vis_miss(airquality)

gg_miss_var(airquality, facet=Month)

查找替代性缺失值
miss_scan_count(data = pacman,
search = list("N/A"))
替换替代性缺失值
replace_with_na(pacman,
replace = list(
year = c("N/A"),
score = c("N/A")))
隐式缺失值
frogger_tidy <- frogger %>%
complete(time, name)
缺失数据依赖性
影子矩阵,nabular 数据
nabular(airquality)
# A tibble: 153 x 12
Ozone Solar.R Wind Temp
<int> <int> <dbl> <int>
1 41 190 7.4 67
2 36 118 8 72
3 12 149 12.6 74
# ... with 150 more rows, and 3
# more variables: Month <int>, Day <int>,
# Ozone_NA <fct>, Solar.R_NA <fct>,
# Wind_NA <fct>, Temp_NA <fct>,
# Month_NA <fct>, Day_NA <fct>
探索缺失情况,将汇总与数据值关联
oceanbuoys %>%
bind_shadow() %>%
group_by(humidity_NA) %>%
summarize(
wind_ew_mean = mean(wind_ew))
# A tibble: 2 x 2
humidity_NA wind_ew_mean
<fct> <dbl>
1 !NA -3.78
2 NA -3.30
缺失时数值如何变化。
nabular(oceanbuoys) %>%
ggplot(aes(x = wind_ew,
color = air_temp_c_NA)) +
geom_density()

可视化两个变量的缺失。
ggplot(oceanbuoys,
aes(x = wind_ew,
y = air_temp_c)) +
geom_miss_point()

良好与糟糕的插补
naniar::impute_mean_all()
simputation::impute_lm()

比较插补值与原始值
ggplot(ocean_imp_track,
aes(x = air_temp_c,
fill = air_temp_c_NA)) +
geom_histogram()

使用不同的插补模型

插补模型如何影响后续推断
# A tibble: 12 x 6
imp_model term estimate
<chr> <chr> <dbl>
1 cc (Int… -7.35e+2
2 cc air_… 8.64e-1
3 cc humi… 3.41e-2
4 cc year 3.69e-1
5 imp_lm_w… (Int… -1.71e+3
6 imp_lm_w… air_… 3.78e-1
# ... 6 more rows
# ... with 3 more variables:
# std.error <dbl>,
# statistic <dbl>,
# p.value <dbl>
在 R 中处理缺失数据