6  Dados faltantes

Dados faltantes quase sempre estão presentes nos dados que analisamos diariamente. Uma parte primordial da análise de dados é saber avaliar e explorar esses dados nos estágio iniciais. O material a seguir tenta discutir dois aspectos importantes sobre dados faltantes: como começar a olhar para esses dados e como explorar os mecanismos que os geraram.

6.1 Como nós começamos a avaliar dados faltantes?

Quando importamos dados, usualmente, fazemos uma avaliação simples e rápida da base, usando funçoes como summary ou str. Estas funções servem, principalmente se o volume de dados disponível é pequeno. Quando lidamos com um volume maior, precisamos de funções que nos permitam avaliar melhor a presença de dados faltantes.

Atividade: Importe o arquivo base_domicilios.csv e armazene-o em um objeto chamado domicilio. Importe a variável matricula como um character.

A base de dados possui variáveis referentes a domicílios de todo o Brasil, contendo variáveis tais como:

  • código da matrícula do domicílio - todo numérico (matricula);

  • grande região do domicílio (GR);

  • número de moradores do domicílio (numero_moradores);

  • qual o sexo do chefe de família (chefe_famila).

# Visualizando o objeto
domicilio
# A tibble: 150,000 × 4
   matricula GR      numero_moradores chefe_famila
   <chr>     <chr>              <dbl> <chr>       
 1 366929    Sudeste                2 H           
 2 926090    Sudeste                3 H           
 3 278888    Sudeste                3 H           
 4 745838    Sudeste                9 H           
 5 517918    Sudeste                2 H           
 6 403363    Sudeste                4 H           
 7 716466    Sudeste                2 H           
 8 162367    Sudeste                3 H           
 9 664136    Sudeste                5 H           
10 314922    Sudeste                2 H           
# ℹ 149,990 more rows

6.1.1 A função viss_miss

Um dos primeiros gráficos que usaremos para avaliar a presença de dados faltantes é a função viss_miss.

# carregando pacote
library(naniar)

# uma análise inicial dos dados faltantes
vis_miss(domicilio)

O gráfico acima nos fornece uma visualização específica da quantidade de dados faltantes, mostrando em preto a localização dos valores faltantes e também fornecendo informações sobre a porcentagem geral de valores faltantes em geral (apresentado na legenda) e em cada variável.

6.1.2 A função gg_miss_var

Uma outra forma de avaliar os dados faltantes, visualmente é por meio da função gg_miss_var.

# uma outra visualização para dados faltantes
gg_miss_var(domicilio)

É possível avaliar os percentuais por variáveis, usando esta visualização, basta modificarmos o argumento show_pct para TRUE.

# carregando pacotes
library(ggplot2) # esse pacote foi carregado para paermitir usar a função labs

# uma outra visualização para dados faltantes
gg_miss_var(domicilio,
            show_pct = TRUE) +
  labs(x = "Variáveis",
       y = "% Dados faltantes")

Nós também podemos avaliar os dados faltantes de acordo com as categorias de alguma variável.

# uma outra visualização para dados faltantes
gg_miss_var(domicilio,
            show_pct = TRUE,
            facet = GR) +
  labs(x = "Variáveis",
       y = "% Dados faltantes")

6.2 Explorando padrões de dados faltantes

Existem gráfico que nos permitem avaliar padrões de omissão de dados, isto é, possíveis combinações de omissões e interseções de omissões entre as variáveis.

6.2.1 A função gg_miss_upset

# avaliando interseções de dados faltantes entre variáveis
gg_miss_upset(domicilio)

O gráfico nos diz que as variáveis número de moradores e chefe de família possuem dados faltantes. Ainda nos diz que a variável chefe de família é a que mais possui casos de dados faltantes. Além disso, nos diz que 8.671 domicílios possuem dados faltantes para as duas variáveis.

6.3 Resumos numéricos para dados faltantes

A seguir, apresentamos duas formas de contabiliozar os dados faltantes.

#Identificando o número de unidades experimentais sem informação por variável
miss_var_summary(domicilio)
# A tibble: 4 × 3
  variable         n_miss pct_miss
  <chr>             <int>    <dbl>
1 chefe_famila     118807    79.2 
2 numero_moradores  10946     7.30
3 matricula             0     0   
4 GR                    0     0   
#Identificando o número de variáveis faltantes para cada linha
miss_case_summary(domicilio)
# A tibble: 150,000 × 3
    case n_miss pct_miss
   <int>  <int>    <dbl>
 1 31200      2       50
 2 31203      2       50
 3 31232      2       50
 4 31237      2       50
 5 31249      2       50
 6 31253      2       50
 7 31258      2       50
 8 31271      2       50
 9 31274      2       50
10 31298      2       50
# ℹ 149,990 more rows

É possível combinar as funções do pacote naniar com as funções do dplyr.

#Ativandfo pacote
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
#Resumindo dados faltante das variáveis por GR
domicilio |> 
  group_by(GR) |> 
  miss_var_summary()
# A tibble: 15 × 4
# Groups:   GR [5]
   GR           variable         n_miss pct_miss
   <chr>        <chr>             <int>    <dbl>
 1 Sudeste      chefe_famila      31807    50.5 
 2 Sudeste      numero_moradores   4552     7.23
 3 Sudeste      matricula             0     0   
 4 Nordeste     chefe_famila      40500   100   
 5 Nordeste     numero_moradores   2938     7.25
 6 Nordeste     matricula             0     0   
 7 Sul          chefe_famila      21000   100   
 8 Sul          numero_moradores   1482     7.06
 9 Sul          matricula             0     0   
10 Norte        chefe_famila      13500   100   
11 Norte        numero_moradores   1076     7.97
12 Norte        matricula             0     0   
13 Centro-Oeste chefe_famila      12000   100   
14 Centro-Oeste numero_moradores    898     7.48
15 Centro-Oeste matricula             0     0