Boxplot Gráfico Visualização

1. Objetivos pedagógicos dessas atividades

2. Inspiração + dados

Usaremos o banco de dados do IBGE com os Municipios do Rio de Janeiro.

3. Conhecendo o Box-plot

# Base curly brackets adapted from https://stackoverflow.com/a/9310002/5213091 and https://gist.github.com/SwampThingPaul/43770cc8678f3b0bb1b11a74f85d9a40
CurlyBraces <- function(x, y, min.val,max.val, pos = 1, direction = 1 ,b=c(0,.2,.28,.7,.8),a=c(1,2,3,48,50)) {
  # a set flexion point for spline
  # b set depth for spline flexion point
  curve = spline(a, b, n = 50, method = "natural")$y / 2 
  curve = c(curve,rev(curve))
  a_sequence = rep(x,100)
  b_sequence = seq(min.val,max.val,length=100)  
  # direction
  if(direction==1)
    a_sequence = a_sequence+curve
  if(direction==2)
    a_sequence = a_sequence-curve
  # pos
  if(pos==1)
    lines(a_sequence,b_sequence) # vertical
  if(pos==2)
    lines(b_sequence,a_sequence) # horizontal
}
set.seed(1)
fake.dat<-rnorm(1000)
x<-boxplot(fake.dat,col="skyblue",pch=21,bg="black",axes=F,boxwex=0.3,xlim=c(0.5,2))
lines(c(1.07,1.3),rep(x$stats[1,],2),lty=2,col="grey75")
text(1.3,x$stats[1,],"Q1 - 1.5 x IQR",xpd=NA,pos=4,cex=0.75)
lines(c(1.07,1.3),rep(x$stats[2,],2),lty=2,col="grey75")
text(1.3,x$stats[2,],"Quantil 25 (Q1)",xpd=NA,pos=4,cex=0.75)
text(1.3,x$stats[3,],"Mediana",xpd=NA,pos=4,cex=0.75)
lines(c(1.07,1.3),rep(x$stats[3,],2),lty=2,col="grey75")
text(1.3,x$stats[4,],"Quantil 75 (Q3)",xpd=NA,pos=4,cex=0.75)
lines(c(1.07,1.3),rep(x$stats[4,],2),lty=2,col="grey75")
text(1.3,x$stats[5,],"Q3 + 1.5 x IQR",xpd=NA,pos=4,cex=0.75)
lines(c(1.07,1.3),rep(x$stats[5,],2),lty=2,col="grey75")
text(0.65,x$stats[2,]+diff(x$stats[c(2,4),])/2,srt=90,"Amplitude interquartil \n (Interquantile Range - IQR)" ,adj=0.5,xpd=NA,cex=0.75)
CurlyBraces(0.9,x$stats[2,]+diff(x$stats[c(2,4),])/2,x$stats[2,],x$stats[4,],b=c(0,0.2,0.28,0.7,0.8)/7,direction=2)
CurlyBraces(1.1,mean(x$out[x$out>0]),min(x$out[x$out>0]),max(x$out[x$out>0]),
            b=c(0,0.2,0.28,0.7,0.8)/7,direction=1)
text(1.3,mean(x$out[x$out>0]),"Valores extremos",xpd=NA,cex=0.75,pos=4)
text(1.3,mean(x$out[x$out<0]),"Valores extremos",xpd=NA,cex=0.75,pos=4)

3. Pacotes necessários

Nessas atividades, vamos usar quatro pacotes do R: ggplot2 e ggpubr para visualização de dados. readr para carregar a base de dados para o

library(ggplot2)
library(ggpubr)
library(readr)

library(RColorBrewer)

4. Carregar os dados

Esses são os dados oficiais coletados do site do IBGE. Eles já estão prontos para análise estatística.

Use este pedaço de código para ler o banco de dados disponível em https://github.com/DATAUNIRIO/Base_de_dados

library(readr)
Municipios <- read_delim("https://raw.githubusercontent.com/DATAUNIRIO/Base_de_dados/master/Municipios.csv", ";", escape_double = FALSE, trim_ws = TRUE,locale=locale(encoding = "latin1"))

O banco de dados se chama Municipios.csv e está armazenado no repositório de bases de dados do curso de estatística. Você pode usar esse código se quiser ler o arquivo local.

library(readr)
Municipios <- read_delim("SEU DIRETÓRIO ATÉ O ARQUIVO/Municipios.csv", ";", escape_double = FALSE, trim_ws = TRUE,locale=locale(encoding = "latin1"))
colunas<-c("Munic","Regiao","Esperancadevida","Renda_per_capita_nula","Populacao","ISS","IDH")
Municipios<-Municipios[,colunas]



5. Variáveis

6. Dicionário de dados

7. Conheça os seus dados

Tente responder a todas essas perguntas.

  1. Qual município paga mais ISS?
  2. Qual município tem a maior Renda per capita?
  3. Qual município tem a maior Esperança de Vida ao Nascer?

8. Análises descritivas dos dados

  1. Qual região paga mais ISS?
  2. Qual região tem a maior Renda per capita?
  3. Qual região tem a maior Esperança de Vida ao Nascer?
  4. Qual região tem a maior desigualdade/variabilidade do IDH? e do ISS?
  5. Quais as regiões são assimetricas nas variáveis Esperança de Vida ao Nascer e Renda per capita?

9. Se você quiser mais:


1. Qual município paga mais ISS per capita?
2. Qual região paga mais ISS per capita?

10. Um último desafio: fazer uma nova visualização de dados :

Vamos tentar criar uma nova visualização de dados. Em primeiro lugar, vamos criar um box-plot com a média e a mediana simultaneamente. A média será representada por um ponto vermelho enquanto a mediana continuará a ser representada com a linha tradicional

Municipios$IDH<-gsub("\\,",".",Municipios$IDH)
Municipios$IDH<-as.numeric(Municipios$IDH)
ggplot(Municipios, aes(x=Regiao, y=IDH, fill=Regiao)) +
    geom_boxplot(alpha=0.7) +
    stat_summary(fun.y=mean, geom="point", shape=20, size=14, color="red", fill="red") +
    theme(legend.position="none") +
    scale_fill_brewer(palette="Set1")

  1. O que nos diz a média no mesmo valor da mediana? (dica: pense nos conceitos vistos em sala de aula: posição, dispersão, simetria/assimetria e outliers). Temos esse caso (média=mediana) no gráfico?
  2. O que podemos dizer quando a média está acima da mediana? E abaixo? Esse caso acontecem no gráfico?

Agora vamos criar uma outra visualização de dados. O violin plot é um box-plot tradicional com uma represdentação da estimativa da função de densidade de probabilidade nas duas laterais. Ou seja, podemos ver a distribuição dos dados nos dois lados da distribuição.

COR<-brewer.pal(8,"Set1")
COR[6]<-"#b0a310"

ggviolin(Municipios, "Regiao", "IDH", color = "Regiao",
 palette = COR, add = "boxplot")+
  coord_flip() 

  1. Você poderia construir uma outra visualização de dados (além dessas duas)? Qual outro gráfico você sugere?
  2. Você consegue interpretar esses dois gráficos? o que eles estão dizendo?
  3. Se você fosse fazer um Pitch (apresentação de 03 a 05 minutos) com recomendações sobre o seu município a partir dos dados. Qual ideia você passaria ao prefeito? Quero um posicionamento!

Referências