3.4) Explorando a distribuição dos dados

Objetivo: introduzir as medidas básicas para análise exploratória de dados (IQR, mediana, primeiro e terceiro quartil) e a criação de resumos com histograma e as medidas de distribuição dos dados com o pacote {summarytools}

Como fazer: assista ao vídeo, procure reproduzir o script em anexo no seu computador.

Script apresentado no vídeo

# _        __
#(_)      / _|                 
# _ _ __ | |_ ___  ___  ___   ___  
#| | '_ \|  _/ _ \/ __|/ _ \ / __| 
#| | | | | || (_) \__ \ (_) | (__  
#|_|_| |_|_| \___/|___/\___/ \___| 
# ...................................................
# Informática Aplicada às Ciências Sociais
# Centro de Letras e Ciências Humanas - CCH
# Universidade Estadual de Londrina - UEL
# Autores: - Prof. Ronaldo Baltar
#          - Prof.ª Cláudia Siqueira Baltar
# Curso: Explorando Indicadores Sociais com R 
# Atividade: 3
# Versão: 2023

# --------
# Objetivo 
# --------
# Primeiros passos com a análise exploratória de dados
# 
# -----------------------------
# Passos anteriores necessários
# -----------------------------
# Ter importado para tabelas tibble as planilhas em Excel com os indicadores municipais baseados nos Censos Demográficos e em Registros Administrativos.
# As descrições do dicionário de variáveis devem ter sido incluídas nas tabelas.

# ----------------------
# Configurações iniciais
# -----------------------
library(tidyverse)
library(labelled)
library(summarytools)

# -----------------
# Importar os dados
# -----------------
# Carrega a área de trabalho, criada no exercício anterior
# com as tabelas c_dic_tbl e r_dic_tbl
# Esse procedimento deve ser feito apenas se as respectivas
# tabelas não estiverem na área de trabalho global da sessão do R
# Confira se o caminho do diretório corresponde ao que você criou no seu computador. Mude o caminho e o nome do arquivo .RData se necessário.
load("dados/indicadores_censo_registro.RData")


# ---------------------------------
# Conhecendo a distribuição do dados
# com {summarytools} descr, ctable 
# e dfSummary
# ----------------------------------
st_options(lang = "pt") #opção de língua para summarytools

# Sumário padrão do R
summary(c_dic_tbl)

# Sumário com descrição numérica de uma variável com descr()
descr(c_dic_tbl$IDHM)
descr(c_dic_tbl$IDHM, transpose = TRUE)

# Sumário com a descrição numérica das variáveis que começam com IDHM
c_dic_tbl |>
  select(starts_with("IDHM")) |>
  descr(transpose = TRUE)

# Sumário com histograma de todas as variáveis
view(dfSummary(c_dic_tbl))

# Sumário das variáveis que começam com IDHM, 
# agrupadas por ano na tabela c_dic_tbl 
c_dic_tbl |>
  group_by(ANO) |>
  select(starts_with("IDHM")) |>
  dfSummary() |>
  view()

# Sumário das variáveis que começam com IDDB
# agrupadas por ano na tabela r_dic_tbl  
r_dic_tbl |>
  group_by(ANO) |>
  select(starts_with("IDEB")) |>
  dfSummary() |>
  view()

# ----------------------------
# Criar variáveis categóricas
# ----------------------------

# Criar três novas variáveis categorizando IDHM, tamanho e perfil urbano ou rural dos municípios. O resultado será salvo em uma nova tabela c1_dic_tbl.

c_dic_tbl |>
    mutate(classe_pop = case_when(
    (POP < 5001) ~ "1) Até 5.000",
    (POP > 5000 & POP < 20001) ~ "2) 5.001 a 20.000",
    (POP > 20000 & POP < 100001) ~ "3) 20.001 a 100.000",
    (POP > 100000 & POP < 500001) ~ "4) 100.001 a 500.000",
    (POP > 500000) ~ "5) Mais de 500.000"
  )) |>
  mutate(classe_idhm = case_when(
    (IDHM < 0.5) ~ "1) Muito baixo",
    (IDHM >= 0.5 & IDHM < 0.6) ~ "2) Baixo",
    (IDHM >= 0.6 & IDHM < 0.7) ~ "3) Médio",
    (IDHM >= 0.7 & IDHM < 0.8) ~ "4) Alto",
    (IDHM >= 0.8) ~ "5) Muito Alto"
  )) |>
  mutate(taxa_urbanizacao = (pesourb / pesotot) * 100) |>
  mutate(urbano_rural = case_when(
    (taxa_urbanizacao >= 50) ~ "Urbano",
    (taxa_urbanizacao < 50) ~ "Rural")) |>
  select(ANO,
         UF,
         Codmun7,
         Município,
         IDHM,
         IDHM_E,
         IDHM_L,
         IDHM_R,
         classe_idhm,
         classe_pop,
         urbano_rural) |>
  filter(ANO == 2010) -> c1_dic_tbl

# Na tabela com os dados de registro, selecionar as variáveis
# relativas ao IDEB
r_dic_tbl |>
  select(ANO, NOME, IBGE7, IDEB_AI, IDEB_AF) |>
  filter(ANO == 2013) -> r1_dic_tbl

# r1_dic_tbl <- r_dic_tbl |>
#   select(ANO, NOME, IBGE7, IDEB_AI, IDEB_AF) |>
#   filter(ANO == 2013)

# juntar tabelas pela chave do código do município de sete dígitos do IBGE
c1_dic_tbl |>
  full_join(r1_dic_tbl, by = c("Codmun7"="IBGE7")) |>
  na.omit() -> c1r1_dic_tbl   # elimina os casos omissos


# Confere a nova tabela criada
glimpse(c1r1_dic_tbl)


# Exclui da seleção as variáveis que não são indicadores
# para criar um sumário da tabela unificada c1r1_dic_tbl
c1r1_dic_tbl |>
  select(-ANO.x,
         -ANO.y, 
         -UF, 
         -NOME,
         -Codmun7,
         -Município) |>
  dfSummary() |>
  view()

# Tabela cruzada com ctable()
# Sitaxe com o R padrão
ctable(x = c1_dic_tbl$urbano_rural,
       y = c1_dic_tbl$classe_idhm)

# Sintaxe com o R padrão, usando a função with()  
with(c1_dic_tbl,
     stby(
       data = list(x = urbano_rural, y = classe_idhm),
       FUN  = ctable
     ))

# Criando uma tabela com os parâmetros dos valores extremos
c_dic_tbl %>%
  group_by(ANO) %>%
  reframe(media_idhm   = mean(IDHM),
          mediana_idhm = median(IDHM),
          iqr_idhm     = IQR(IDHM),
          desvp_idhm   = sd(IDHM),
          q1_idhm      = quantile(IDHM, 0.25),
          q3_idhm      = quantile(IDHM, 0.75),
          maximo_idhm  = max(IDHM),
          limite_inferior_idhm = 
            q1_idhm - (1.5 * iqr_idhm),
          limite_superior_idhm = 
            q3_idhm + (1.5 * iqr_idhm)
          ) -> limites_idhm_por_ano


 
# Lista dos valores extremos
  c_dic_tbl %>%
    filter(ANO == 2010) %>%
    mutate(iqr_idhm = IQR(IDHM),
           q1_idhm  = quantile(IDHM, 0.25),
           q3_idhm  = quantile(IDHM, 0.75),
           limite_inferior_idhm = q1_idhm - (1.1 * iqr_idhm),
           limite_superior_idhm = q3_idhm + (1.1 * iqr_idhm)
           ) %>%
    filter(IDHM < limite_inferior_idhm | 
           IDHM > limite_superior_idhm) %>%
    select(Município, UF, IDHM)

# Ranking
  c_dic_tbl %>%
    filter(ANO == 2010) %>%
    mutate(decil_idhm = ntile(desc(IDHM), 10)) %>%
    filter(decil_idhm == 1) %>%
    select(Município, UF, IDHM,decil_idhm)
  
  
Sugestão para que não conhece as medidas indicadas no vídeo em Khan Academy

Khan Academy: Como resumir dados quantitativos

No material da Khan Academy, o intervalo interquartil (IQR - Interquartile Range) é traduzido como faixa interquartil FIQ.

Os gráficos Boxplot, que veremos na próxima unidade desse curso, são chamados de Gráficos de Caixa no material da Khan Academy.

Last updated