naniar & UpSetR

Com o pacote naniar, os passos acima são muito mais rápidos e fáceis de representar. O pacote também cria um ggplot, permitindo as mesmas personalizações aprendidas anteriormente. Primeiro, usamos funções para exibir tabelas com a ajuda do naniar. A primeira é a função miss_var_summary(), que nos fornece a frequência absoluta e relativa de valores ausentes nas variáveis.

pss %>%
  miss_var_summary()
## # A tibble: 14 × 3
##    variable n_miss pct_miss
##    <chr>     <int>    <num>
##  1 edu         352     7.04
##  2 agea        157     3.14
##  3 stfdem       95     1.9 
##  4 trstprl      35     0.7 
##  5 trstprt      17     0.34
##  6 trstlgl      12     0.24
##  7 trstplt      11     0.22
##  8 lrscale       7     0.14
##  9 stfeco        6     0.12
## 10 idno          0     0   
## 11 district      0     0   
## 12 gndr          0     0   
## 13 wkhtot        0     0   
## 14 income        0     0

Também podemos agrupar isso:

pss %>% 
  group_by(district) %>% 
  miss_var_summary()
## # A tibble: 65 × 4
## # Groups:   district [5]
##    district   variable n_miss pct_miss
##    <fct>      <chr>     <int>    <num>
##  1 Distrikt 1 edu          30      3  
##  2 Distrikt 1 stfdem       16      1.6
##  3 Distrikt 1 trstprl       8      0.8
##  4 Distrikt 1 trstprt       4      0.4
##  5 Distrikt 1 lrscale       2      0.2
##  6 Distrikt 1 trstlgl       1      0.1
##  7 Distrikt 1 idno          0      0  
##  8 Distrikt 1 gndr          0      0  
##  9 Distrikt 1 agea          0      0  
## 10 Distrikt 1 wkhtot        0      0  
## # ℹ 55 more rows

Podemos visualizar a distribuição de valores ausentes no conjunto de dados. A função gg_miss_var_cumsum() nos fornece a soma cumulativa de valores ausentes por variável. Isso nos permite ver como os valores ausentes estão distribuídos nas variáveis.

gg_miss_var_cumsum(pss)

A função vis_miss() visualiza os missings de um conjunto de dados completo (a menos que seja especificado). {/examples}

vis_miss(pss)

Outra alternativa interessante é a função gg_miss_upset() do pacote naniar. Aqui, as frequências das combinações de missings entre as variáveis também são exibidas. No entanto, isso pode ficar confuso em conjuntos de dados muito grandes. Para subconjuntos, no entanto, pode ser esclarecedor (por exemplo, se você quiser verificar se as pessoas responderam apenas partes de uma bateria de itens ou não responderam a bateria inteira).

gg_miss_upset(pss)

No gráfico, é possível ver que as quatro variáveis trstprt, trtprl, stfdem e agea têm missings. No total, as seguintes combinações são observadas:

  • 311 casos com NA em edu,
  • 148 casos com NA em agea,
  • 82 casos com NA em stfdem,
  • 30 casos com NA em trstprl,
  • 13 casos com NA em trstprt,
  • 9 casos com NA em stfdem e edu,
  • 5 casos com NA em agea e edu,
  • 4 casos com NA em trstprl e edu,
  • 3 casos com NA em stfdem e agea,
  • 3 casos com NA em trstprt e edu,
  • 1 caso com NA em trstprl e stfdem,
  • 1 caso com NA em trstprt e agea.

Em geral, o número máximo de combinações é calculado da seguinte forma: \(2^{Número de Variáveis} - 1\). Neste caso, seriam 31 combinações possíveis, mas apenas 12 são exibidas. Por quê?

Além disso, os missings de duas variáveis também podem ser facilmente representados em um ggplot usando a função geom_miss_point():

ggplot(
  pss,
  aes(
    x = district,
    y = agea
  )
) +
  geom_miss_point() 

Dessa forma, é possível identificar facilmente se os missings se concentram em uma determinada combinação.

Como alternativa, também é possível utilizar as funções gg_miss_var() e gg_miss_fct().

Com a função gg_miss_var(), o número de missings é exibido. Com o argumento facet, isso também pode ser desagregado por diferentes categorias. Assim, é possível verificar se um grupo apresenta significativamente mais missings do que outro grupo.

gg_miss_var(
  pss,
  facet = district
)

Com a função gg_miss_fct(), os missings podem ser visualmente apresentados de forma muito atraente.

gg_miss_fct(
  x = pss, 
  fct = district
)

Também é possível exibir isso por categorias em outra variável para ver se existem diferenças significativas entre os grupos:

gg_miss_fct(
  x = pss, 
  fct = district
) + 
  labs(title = "NA in PSS nach Distrikt")

Isso é tudo sobre valores ausentes!