4. Cálculo de medidas-resumo (média, mediana e quartis)

Além dos valores máximos ou mínimos, podemos calcular outras estatísticas de interesse epidemiológico para seguir com a análise dos dados do Estado de Rosas. Neste tópico, iremos conhecer medidas como médias, medianas e quartis, de forma semelhante ao que vimos anteriormente.

O cálculo destas medidas é uma adaptação das funções utilizadas. Listamos abaixo as funções específicas de cálculo de medidas-resumo para que você possa guardá-las para replicá-las na sua rotina de análise de dados no serviço de vigilância em saúde:

  • mean(): média
  • median(): mediana
  • quantile(x, probs): quantis. É possível especificar o intervalo de quantil pelo argumento probs, e indicar um valor entre 0 e 1.

Na sessão anterior calculamos as idades e os valores máximos e mínimos dos casos de dengue e hepatites de origem desconhecida do Estado de Rosas. Que tal calcular as distribuições de idades de nossos pacientes? Vamos lá!

  1. Criaremos uma tabela {dados_descrição} a partir da tabela {dados} para esta etapa. Lembre-se que criar tabelas para análises específicas é uma boa prática para não perder informações durante as análises no R, tornando sua análise reproduzível, inclusive.

  2. Calcularemos a média, a mediana e o primeiro quartil (25%) destas idades.

Observe os comandos e os retornos abaixo:

# criando uma nova tabela (dataframe) chamada {`dados_descricao`}
dados_descricao <- dados |>
  
  # filtrando os agravos de dengue (código "A90") e hepatite viral
  # (código "B19") com a função filter()
  filter(ID_AGRAVO %in% c("A90", "B19")) |>
  
  # utilizando a função mutate() para modificar a coluna ID_AGRAVO, removendo as
  # categorias (levels) em branco após o filtro usando a função droplevels()
  mutate(ID_AGRAVO = droplevels(ID_AGRAVO)) |>
  
  # criando uma nova coluna chamada IDADE_ANOS com a função mutate() e, nela,
  # calculando a idade em anos. Primeiro, fazendo a diferença em dias entre
  # data de primeiros  sintomas e data de notificação e transformando em
  # número inteiro com a função as.integer(), seguido da divisão por 365.25,
  # e, no final, arredondamento para o menor número inteiro com uso da função 
  # floor()
  mutate(IDADE_ANOS = floor(as.integer(DT_SIN_PRI - DT_NASC) / 365.25)) |>
  
  # agrupando com a função group_by() os agravos (coluna ID_AGRAVO)
  group_by(ID_AGRAVO) |>
  
  # calculando novos dados a partir das colunas agrupadas com o uso da função
  # summarise()
  summarise(
    
    # calculando a média de idade com a função mean() na coluna IDADE_ANOS
    media_idade = mean(IDADE_ANOS, na.rm = TRUE),
    
    # calculando a mediana de idade com a função median() na coluna IDADE_ANOS
    mediana_idade = median(IDADE_ANOS, na.rm = TRUE),
    
    # calculando o quantil 25 da distribuição de idade com a função quantile()
    # na coluna IDADE_ANOS e o argumento prob = 0.25
    quantil_25_idade = quantile(IDADE_ANOS, prob = 0.25, na.rm = TRUE)
  )

Agora, vamos visualizar a tabela criada digitando o nome da tabela e clicando no botão “Run”.

# visualizando a tabela {`dados_descricao`}
dados_descricao
#> # A tibble: 2 × 4
#>   ID_AGRAVO media_idade mediana_idade quantil_25_idade
#>   <fct>           <dbl>         <dbl>            <dbl>
#> 1 A90              26.9            24               12
#> 2 B19              42.9            45               31

Observe que calculamos a média, mediana e quartil de 25% das idades em anos escrevendo um script. O resultado foi que as idades são menores para os casos notificados de dengue se comparados aos casos de hepatite. Além disso, percebemos que, pelo quartil, nos casos notificados de dengue, 25% dos registros são iguais ou menores que 12 anos, e nos casos notificados de hepatite, 25% dos registros são iguais ou menores que 31 anos.


E agora!? Como seria calcular a moda?

Moda é uma medida de posição usada no resumo de dados para identificar o valor mais frequente em um conjunto. Não há função nativa no R específica para o cálculo da moda. Há pacotes que abrangem esta função como, por exemplo, a função Mode() do pacote DescTools. O algoritmo de identificação do valor mais frequente funciona tanto para valores numéricos, quanto para valores textuais.

Acompanhe o exemplo abaixo em que identificaremos a idade e o sexo mais frequente entre os agravos Dengue (CID A90), Hepatites Virais (CID B19) e Tuberculose (CID A169). Veja os comandos a serem executados e suas respostas. Lembre-se que já carregamos o pacote DescTools no início desse módulo.

dados |>
  
  # filtrando os agravos de dengue (código "A90"), 
  # hepatite viral 
  # (código "B19") e Tuberculose (código "A169")
  filter(ID_AGRAVO %in% c("A90", "B19", "A169")) |>
  
  # utilizando a função mutate() para modificar a 
  # coluna ID_AGRAVO, removendo as
  # categorias (levels) em branco após o filtro usando 
  # a função droplevels()
  mutate(ID_AGRAVO = droplevels(ID_AGRAVO)) |>
  
  # criando uma nova coluna chamada IDADE_ANOS com a 
  # função mutate() e, nela,
  # calculando a idade em anos. Primeiro, fazendo a 
  # diferença em dias entre
  # data de primeiros  sintomas e data de notificação 
  # e transformando em
  # número inteiro com a função as.integer(), seguido 
  # da divisão por 365.25,
  # e, no final, arredondamento para o menor número 
  # inteiro com uso da função floor()
  mutate(IDADE_ANOS = floor(as.integer
  (DT_SIN_PRI - DT_NASC) / 365.25)) |>
  
  # agrupando com a função group_by() os agravos 
  # (coluna ID_AGRAVO)
  group_by(ID_AGRAVO) |>
  
  # calculando novos dados a partir das colunas 
  # agrupadas com o uso da função 
  # summarise()
  summarise(
    
    # calculando a moda da idade com a função Mode() 
	# na coluna IDADE_ANOS
    moda_idade = Mode(IDADE_ANOS, na.rm = TRUE),
    
    # calculando a moda da categoria sexo com a função 
	# Mode() na coluna CS_SEXO
    moda_sexo = Mode(CS_SEXO, na.rm = TRUE)
  )
#> # A tibble: 3 × 3
#>   ID_AGRAVO moda_idade moda_sexo
#>   <fct>          <dbl> <fct>    
#> 1 A169              30 M        
#> 2 A90               12 F        
#> 3 B19               58 M

Observe que o resultado foi que, nos casos de tuberculose sexo masculino e idade de 30 anos foram os mais frequentes. Nos casos notificados de dengue, sexo feminino e idade de 12 anos foram os mais frequentes e, para os casos notificados de hepatite, os mais frequentes foram sexo masculino e idade de 58 anos.


Com esta etapa de análise exploratória de dados na vigilância em saúde, já é possível compreender a distribuição geral dos seus dados do Sinan Net. Experimente praticar esta etapa para outros agravos notificados!