5. Avaliando a completude dos dados

Nesta etapa, vamos conhecer o preenchimento dos campos no registro da Ficha de Notificação Individual (FIN) do Sinan Net. Ao final deste tópico você será capaz de analisar a presença de variáveis em branco ou nulas, utilizando as seguintes funções do R: is.na(), sum() e n().

Enquanto profissional de vigilância em saúde você deve estar acostumado a manipular formulários que têm campos de preenchimento em branco ou ignorados. Na epidemiologia o indicador de completude de uma variável é calculado a partir da proporção de campos preenchidos em relação ao total dos registros, em percentual.

Para visualizar de forma simples estes registros em uma coluna, vamos continuar utilizando a tabela criada a partir do banco de dados {NINDINET.dbf}, disponível no Ambiente Virtual do curso. Este banco foi armazenado no objeto {base} e agora vamos avaliar a completude da variável epidemiológica Raça/cor (CS_RACA).

Para isso utilizaremos a função summarise(), pois estamos resumindo algumas características da variável. Não se preocupe com o script, explicaremos mais adiante o passo a passo realizado.

Acompanhe o código abaixo e replique-o em seu RStudio:

base |>
  
  # Utilizando a função `summarise()` para criar novas colunas de síntese
  summarise(
    
    # Criando uma coluna com a soma de todos os registros da variável raça/cor 
    # devidamente preenchidos
    total_completo = sum(!is.na(CS_RACA)),
    
    # Criando uma coluna com o total de registros na tabela
    total_registros = n(),
    
    # Criando uma coluna com a soma de registros com a variável raça/cor em branco
    total_missing_raca = sum(is.na(CS_RACA)),
    
    # Criando uma coluna de porcentagem de completude (preenchimento)
    taxa_completude = (total_completo / total_registros) * 100
  )
#>   total_completo total_registros total_missing_raca taxa_completude
#> 1          19326           27621               8295         69.9685

Observe em seu painel Console ou output, que foram retornadas quatro colunas:

  • Em total_completo é indicado o número total de registros para a variável CS_RACA que não estão em branco (isto é, são diferentes de NA).
  • Em total_registros é indicado o número total de registros, independentemente se estão preenchidos ou não.
  • Em total_missing_raca é indicado o número de registros em branco apenas para a variável CS_RACA.
  • Por fim, taxa_completude mostra a porcentagem de casos completos em relação ao total de casos registrados.

Vamos entender agora como conseguimos estes resultados, detalhando as funções:

A função is.na() indica em termos de verdadeiro/falso (TRUE/FALSE) quais registros estão em branco (isto é, são iguais a NA). Já a operação !is.na() calcula exatamente o oposto: quais registros estão preenchidos, isto é, diferentes de NA. Isto é indicado pelo operador (!) (ponto de exclamação), que inverte o resultado dos valores de verdadeiro e falso (TRUE e FALSE). Ao combinarmos estas funções com a função de soma (sum()), podemos calcular a soma do número de registros que se enquadram nos critérios avaliados.

Já a taxa de completude em porcentagem é calculada pela razão entre o total de registros preenchidos pelo total de registros, multiplicado por 100.


É possível realizar a análise de completude de variáveis utilizando outros pacotes no R. Um pacote muito utilizado é o skimr. Nele, há funções muito interessantes para verificação do preenchimento de variáveis, como:

  • n_complete, que verifica o total de células preenchidas de uma variável;
  • n_missing, que verifica o número de células em branco; e
  • complete_rate, que faz uma razão entre o total células preenchidas pelo total de registros.

No exemplo abaixo vamos verificar o preenchimento da variável Raça/cor (CS_RACA), utilizada anteriormente, combinando a função summarise() com as funções do pacote skimr. Para isso, rode o seguinte código:

base |>
  
  # Utilizando a função `summarise()` para criar novas 
  # colunas de síntese
  summarise(
    
    # Criando uma coluna de total de registros com a 
    # variável raça/cor devidamente preenchida
    total_completo = n_complete(CS_RACA),
    
    # Criando uma coluna de total de registros da 
    # variável raça/cor em branco
    total_na = n_missing(CS_RACA),
    
    # Criando uma coluna de taxa de completude
    taxa_completude = complete_rate(CS_RACA) * 100
  )
#>   total_completo total_na taxa_completude
#> 1          19326     8295         69.9685

Veja que foi possível conhecer os valores nulos ou em brancos com poucas linhas de comando. Agora você já pode realizar seus relatórios de completitude dos bancos de dados sem dificuldades utilizando o software R.


5.1 Renomeando valores

Algumas variáveis nos sistemas de informações possuem uma categoria chamada “Ignorado”. Essa categoria se refere a dados que, por alguma eventualidade, não foram coletados no ato do preenchimento da notificação e por serem de preenchimento obrigatório são completados desta forma. Comumente, nos sistemas de informações, essa categoria é definida com o código 9 ou 99. Vejamos na Figura 3 um recorte da Ficha de Notificação Individual (FIN).


Figura 3: Início da Ficha de Notificação Individual (FIN).


Observe que em todos os campos de preenchimento em múltipla escolha é possível selecionar “Ignorado”. Uma ação para garantir a consistência da análise de seus dados é realizar o agrupamento dos valores que estão nulos ou em branco (missing, em inglês) com os itens ignorados. Para esta etapa, realizamos a codificação de todos os valores com o código 9.

Para esta etapa, utilizaremos a função replace_na() do pacote tidyr para realizar a substituição dos valores em branco ou nulos por 9, combinada com a função mutate().

Nesta tarefa, vamos permanecer manipulando a variável Raça/cor (CS_RACA) do objeto {base}, criada a partir do banco de dados {NINDINET.dbf}. Vejamos primeiro a contagem das categorias utilizando o seguinte comando em seu console:

base |>
  
  # Contabilizando o número de registros conforme as categorias de preenchimento
  # da variável "CS_RACA"
  count(CS_RACA)
#>   CS_RACA    n
#> 1       1 5298
#> 2       2 1792
#> 3       3   88
#> 4       4 3799
#> 5       5   40
#> 6       9 8309
#> 7      NA 8295

Perceba que há 8.309 registros com a variável Raça/cor preenchidos como Ignorado (código 9) e 8.295 com <NA> nulo ou em branco. Agora vamos agrupar o Ignorado (indicado pelo valor 9) com NA utilizando a função replace_na(). O primeiro argumento desta função é a coluna ao qual queremos aplicar a transformação, e o segundo argumento (replace) indica qual valor queremos que substitua o valor NA. Em nosso exemplo, queremos que seja substituído pelo valor 9.

Desta forma, execute os comandos do script abaixo em seu RStudio:

base |>
  
  # Transformando os valores em branco em 9 na coluna "CS_RACA"
  mutate(CS_RACA = replace_na(CS_RACA, replace = 9)) |>
  
  # Contabilizando o número de registros conforme as categorias de preenchimento
  # da variável "CS_RACA"
  count(CS_RACA)
#>   CS_RACA     n
#> 1       1  5298
#> 2       2  1792
#> 3       3    88
#> 4       4  3799
#> 5       5    40
#> 6       9 16604

Encontramos 16.604 registros contabilizados como 9, ou seja, Ignorado e NA. Esse valor é igual aos 8.309 registros somados aos 8.295. Tente fazer a mesma operação com outras variáveis do banco de dados e renomeie com valores nulos!


É também possível que você necessite transformar os valores codificados como Ignorado em NA. Para isso, você deverá utilizar a função na_if() do pacote dplyr. O primeiro argumento desta função também deve indicar a coluna que queremos aplicar a transformação, enquanto o segundo indica qual valor queremos que seja convertido em NA.

Execute o código e veja abaixo como ficaria no exemplo anterior com a variável Raça/cor:

base |>
  
  # Transformando os valores codificados como 9 em NA, 
  # na coluna "CS_RACA"
  mutate(CS_RACA = na_if(CS_RACA, "9")) |>
  
  # Contabilizando o número de registros conforme as 
  # categorias de preenchimento da variável "CS_RACA"
  count(CS_RACA)
#>   CS_RACA     n
#> 1       1  5298
#> 2       2  1792
#> 3       3    88
#> 4       4  3799
#> 5       5    40
#> 6      NA 16604

Agora você tem 16.604 registros classificados como <NA>. Foi fácil, não é mesmo?!