Como que Stan, rstanarm e brms lidam com dados faltantes
Dados faltantes são um problema comum em qualquer análise de dados. Tanto Stan
, quanto suas interfaces brms
e rstanarm
usam observações completas nas suas inferências. Então, toda observação que contiver qualquer dado faltante será removida por completa. Isto quer dizer que qualquer linha do seu dataset que tiver dados faltantes nas colunas que são usadas como variáveis do modelo será removida. Temos duas abordagens básicas para lidar com dados faltantes1:
A remoção de dados faltantes se divide em duas principais abordagens usando a função na.omit()
do pacote base stats
:
df <- na.omit(df)
df <- t(na.omit(t(df)))
Dentre as diversas maneiras de imputar valores ao dados faltantes, as mais comuns são três:
Mas ainda há maneiras mais avançadas e que desempenham melhor em certas condições (não cobriremos essas técnicas nesse curso):
Há um pacote de R chamado DescTools
(Andri et mult. al., 2021): uma coleção de funções focadas especialmente na parte descritiva de análise de um dataset.
Para mostrar as abordagens, geramos um dataset de uma série temporal de uma semana com dados faltantes. O dataset df
contém duas colunas: dia
com o dia da semana; e valor
representando uma mensuração observada naquele dia. Aproveito para incluir dois dados faltantes na coluna valor
de maneira aleatória:
library(DescTools)
set.seed(123)
df <- tibble(
dia = c("seg", "ter", "qua", "qui", "sex", "sab", "dom"),
valor = runif(7))
indices_aleatorios <- sample(1:nrow(df), 2)
df[indices_aleatorios[1], 2] <- NA
df[indices_aleatorios[2], 2] <- NA
df
# A tibble: 7 x 2
dia valor
<chr> <dbl>
1 seg 0.288
2 ter 0.788
3 qua NA
4 qui 0.883
5 sex 0.940
6 sab NA
7 dom 0.528
Para imputar a média nos dados faltantes usamos a função Impute()
com o argumento FUN = mean()
:
Para imputar a mediana nos dados faltantes usamos a função Impute()
com o argumento FUN = median()
:
Para imputar a média nos dados faltantes usamos a função LOC()
(um acrônimo para Last Observation Carried Forward):
df$ultimo <- LOCF(df$valor)
Veja a comparação dos resultados.
df
# A tibble: 7 x 5
dia valor media mediana ultimo
<chr> <dbl> <dbl> <dbl> <dbl>
1 seg 0.288 0.288 0.288 0.288
2 ter 0.788 0.788 0.788 0.788
3 qua NA 0.685 0.788 0.788
4 qui 0.883 0.883 0.883 0.883
5 sex 0.940 0.940 0.940 0.940
6 sab NA 0.685 0.788 0.940
7 dom 0.528 0.528 0.528 0.528
R version 4.1.0 (2021-05-18)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Big Sur 10.16
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
other attached packages:
[1] DescTools_0.99.41 gapminder_0.3.0 ggExtra_0.9
[4] dplyr_1.0.6 rstan_2.21.2 StanHeaders_2.21.0-7
[7] MASS_7.3-54 ggforce_0.3.3 gganimate_1.0.7
[10] plotly_4.9.3 carData_3.0-4 DiagrammeR_1.0.6.1
[13] brms_2.15.0 rstanarm_2.21.1 Rcpp_1.0.6
[16] skimr_2.1.3 readr_1.4.0 readxl_1.3.1
[19] tibble_3.1.2 ggplot2_3.3.3 patchwork_1.1.1
[22] cowplot_1.1.1
loaded via a namespace (and not attached):
[1] backports_1.2.1 systemfonts_1.0.2 plyr_1.8.6
[4] igraph_1.2.6 lazyeval_0.2.2 repr_1.1.3
[7] splines_4.1.0 crosstalk_1.1.1 rstantools_2.1.1
[10] inline_0.3.19 digest_0.6.27 htmltools_0.5.1.1
[13] magick_2.7.2 rsconnect_0.8.18 fansi_0.5.0
[16] magrittr_2.0.1 RcppParallel_5.1.4 matrixStats_0.59.0
[19] xts_0.12.1 prettyunits_1.1.1 colorspace_2.0-1
[22] textshaping_0.3.4 xfun_0.23 callr_3.7.0
[25] crayon_1.4.1 jsonlite_1.7.2 Exact_2.1
[28] lme4_1.1-27 survival_3.2-11 zoo_1.8-9
[31] glue_1.4.2 polyclip_1.10-0 gtable_0.3.0
[34] V8_3.4.2 pkgbuild_1.2.0 abind_1.4-5
[37] scales_1.1.1 mvtnorm_1.1-1 DBI_1.1.1
[40] miniUI_0.1.1.1 isoband_0.2.4 progress_1.2.2
[43] viridisLite_0.4.0 xtable_1.8-4 tmvnsim_1.0-2
[46] proxy_0.4-25 stats4_4.1.0 DT_0.18
[49] httr_1.4.2 htmlwidgets_1.5.3 threejs_0.3.3
[52] RColorBrewer_1.1-2 ellipsis_0.3.2 pkgconfig_2.0.3
[55] loo_2.4.1 farver_2.1.0 sass_0.4.0
[58] here_1.0.1 utf8_1.2.1 tidyselect_1.1.1
[61] labeling_0.4.2 rlang_0.4.11 reshape2_1.4.4
[64] later_1.2.0 visNetwork_2.0.9 munsell_0.5.0
[67] cellranger_1.1.0 tools_4.1.0 cli_2.5.0
[70] generics_0.1.0 gifski_1.4.3-1 ggridges_0.5.3
[73] evaluate_0.14 stringr_1.4.0 fastmap_1.1.0
[76] yaml_2.2.1 ragg_1.1.2 processx_3.5.2
[79] knitr_1.33 purrr_0.3.4 rootSolve_1.8.2.1
[82] nlme_3.1-152 mime_0.10 projpred_2.0.2
[85] xml2_1.3.2 compiler_4.1.0 bayesplot_1.8.0
[88] shinythemes_1.2.0 rstudioapi_0.13 curl_4.3.1
[91] gamm4_0.2-6 png_0.1-7 e1071_1.7-7
[94] tweenr_1.0.2 bslib_0.2.5.1 stringi_1.6.2
[97] highr_0.9 ps_1.6.0 Brobdingnag_1.2-6
[100] lattice_0.20-44 Matrix_1.3-3 nloptr_1.2.2.2
[103] markdown_1.1 shinyjs_2.0.0 vctrs_0.3.8
[106] pillar_1.6.1 lifecycle_1.0.0 jquerylib_0.1.4
[109] bridgesampling_1.1-2 data.table_1.14.0 lmom_2.8
[112] httpuv_1.6.1 R6_2.5.0 bookdown_0.22
[115] promises_1.2.0.1 gridExtra_2.3 gld_2.6.2
[118] codetools_0.2-18 distill_1.2 boot_1.3-28
[121] colourpicker_1.1.0 gtools_3.8.2 assertthat_0.2.1
[124] rprojroot_2.0.2 withr_2.4.2 mnormt_2.0.2
[127] shinystan_2.5.0 expm_0.999-6 mgcv_1.8-35
[130] parallel_4.1.0 hms_1.1.0 grid_4.1.0
[133] class_7.3-19 tidyr_1.1.3 coda_0.19-4
[136] minqa_1.2.4 rmarkdown_2.8 downlit_0.2.1
[139] shiny_1.6.0 lubridate_1.7.10 base64enc_0.1-3
[142] dygraphs_1.1.1.6
há uma terceira que é modelar os dados faltantes, veja a vinheta do brms
para mais detalhes↩︎
If you see mistakes or want to suggest changes, please create an issue on the source repository.
Text and figures are licensed under Creative Commons Attribution CC BY-SA 4.0. Source code is available at https://github.com/storopoli/Estatistica-Bayesiana, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".
For attribution, please cite this work as
Storopoli (2021, Aug. 1). Estatística Bayesiana com R e Stan: Dados Faltantes. Retrieved from https://storopoli.github.io/Estatistica-Bayesiana/aux-Dados_Faltantes.html
BibTeX citation
@misc{storopoli2021dadosfaltantesR, author = {Storopoli, Jose}, title = {Estatística Bayesiana com R e Stan: Dados Faltantes}, url = {https://storopoli.github.io/Estatistica-Bayesiana/aux-Dados_Faltantes.html}, year = {2021} }