Carvalho Ribeiro Blog
  • Info

Conteúdo

  • O que é histograma
  • Qual o objetivo
  • De onde vem a demanda
  • Como fazer
  • Pra onde vai quem é o cliente
  • Qual o resultado

Como analisar distribuição em dados - histograma curva normal

Exploração de dados
Author

Marcelo Carvalho dos Anjos

Published

August 21, 2022

Vídeo tema para este post em Como analisar distribuição em dados - histograma curva normal

O que é histograma

  • Gráfico que mostra como os dados coletados (amostra) estão distribuidos. Também mostra a média e como esses dados estão distante da média (desvio padrão e variância).

Histograma

Qual o objetivo

  • Obter uma resposta racional que auxilie na decisão (pre processamento, estudo do outlier, escolha do modelo mais adequado, identificação distorções na realidade).

De onde vem a demanda

De questões como:

  • Como está a distribuição de renda da população ?

  • Como está a distribuição de peso na minha plantação de tomates?

  • Como está a distribuição de altura das pessoas em determinada região?

  • Será que se eu separar em grupos eu consigo atender melhor as necessidades ?

Clique aqui pra abrir os detalhes

. Imagine que eu queira prever o peso dos cachorros com base nas características deles.

. Para explicar a distribuição dos pesos, tento dividir a população em grupos com base nessas características.

. Em um agrupamento bem sucedido, os grupos terão baixa variação dentro do grupo e boa variação entre os grupos.

. Na primeira tentativa, escolho jovem pelo curto, jovem pelo longo, velho pelo curto, jovem pelo longo.

. Na segunda tentantiva escolho cães de trabalho atletico, trabalho faro, domestico atletico, domestico faro.

. Na terceira tentativa escolho raças como pintcher, vira latas, pastor alemão e são bernardo.

Histograma base para Anova

Como fazer

Para reproduzir os códigos abaixo serão necessários os pacotes tidyverse , rcompanion e janitor, ggpubr, funmodeling,skimr

Gráfico usando rcompanion

# package -----------------------------------------------------------------
library(tidyverse)
library(rcompanion)
library(funModeling)
library(skimr)
library(ggpubr)
library(ggdist)
library(gghalves)

# plot --------------------------------------------------------------------

#rcompanion
rcompanion::plotNormalHistogram(iris$Sepal.Length)

Gráfico usando funModeling

#funmodeling
mtcars %>% funModeling::plot_num()

Gráfico usando skimr

#skimr
data(ames, package = "modeldata")

ames %>% skimr::skim()
Data summary
Name Piped data
Number of rows 2930
Number of columns 74
_______________________
Column type frequency:
factor 40
numeric 34
________________________
Group variables None

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
MS_SubClass 0 1 FALSE 16 One: 1079, Two: 575, One: 287, One: 192
MS_Zoning 0 1 FALSE 7 Res: 2273, Res: 462, Flo: 139, Res: 27
Street 0 1 FALSE 2 Pav: 2918, Grv: 12
Alley 0 1 FALSE 3 No_: 2732, Gra: 120, Pav: 78
Lot_Shape 0 1 FALSE 4 Reg: 1859, Sli: 979, Mod: 76, Irr: 16
Land_Contour 0 1 FALSE 4 Lvl: 2633, HLS: 120, Bnk: 117, Low: 60
Utilities 0 1 FALSE 3 All: 2927, NoS: 2, NoS: 1
Lot_Config 0 1 FALSE 5 Ins: 2140, Cor: 511, Cul: 180, FR2: 85
Land_Slope 0 1 FALSE 3 Gtl: 2789, Mod: 125, Sev: 16
Neighborhood 0 1 FALSE 28 Nor: 443, Col: 267, Old: 239, Edw: 194
Condition_1 0 1 FALSE 9 Nor: 2522, Fee: 164, Art: 92, RRA: 50
Condition_2 0 1 FALSE 8 Nor: 2900, Fee: 13, Art: 5, Pos: 4
Bldg_Type 0 1 FALSE 5 One: 2425, Twn: 233, Dup: 109, Twn: 101
House_Style 0 1 FALSE 8 One: 1481, Two: 873, One: 314, SLv: 128
Overall_Cond 0 1 FALSE 9 Ave: 1654, Abo: 533, Goo: 390, Ver: 144
Roof_Style 0 1 FALSE 6 Gab: 2321, Hip: 551, Gam: 22, Fla: 20
Roof_Matl 0 1 FALSE 8 Com: 2887, Tar: 23, WdS: 9, WdS: 7
Exterior_1st 0 1 FALSE 16 Vin: 1026, Met: 450, HdB: 442, Wd : 420
Exterior_2nd 0 1 FALSE 17 Vin: 1015, Met: 447, HdB: 406, Wd : 397
Mas_Vnr_Type 0 1 FALSE 5 Non: 1775, Brk: 880, Sto: 249, Brk: 25
Exter_Cond 0 1 FALSE 5 Typ: 2549, Goo: 299, Fai: 67, Exc: 12
Foundation 0 1 FALSE 6 PCo: 1310, CBl: 1244, Brk: 311, Sla: 49
Bsmt_Cond 0 1 FALSE 6 Typ: 2616, Goo: 122, Fai: 104, No_: 80
Bsmt_Exposure 0 1 FALSE 5 No: 1906, Av: 418, Gd: 284, Mn: 239
BsmtFin_Type_1 0 1 FALSE 7 GLQ: 859, Unf: 851, ALQ: 429, Rec: 288
BsmtFin_Type_2 0 1 FALSE 7 Unf: 2499, Rec: 106, LwQ: 89, No_: 81
Heating 0 1 FALSE 6 Gas: 2885, Gas: 27, Gra: 9, Wal: 6
Heating_QC 0 1 FALSE 5 Exc: 1495, Typ: 864, Goo: 476, Fai: 92
Central_Air 0 1 FALSE 2 Y: 2734, N: 196
Electrical 0 1 FALSE 6 SBr: 2682, Fus: 188, Fus: 50, Fus: 8
Functional 0 1 FALSE 8 Typ: 2728, Min: 70, Min: 65, Mod: 35
Garage_Type 0 1 FALSE 7 Att: 1731, Det: 782, Bui: 186, No_: 157
Garage_Finish 0 1 FALSE 4 Unf: 1231, RFn: 812, Fin: 728, No_: 159
Garage_Cond 0 1 FALSE 6 Typ: 2665, No_: 159, Fai: 74, Goo: 15
Paved_Drive 0 1 FALSE 3 Pav: 2652, Dir: 216, Par: 62
Pool_QC 0 1 FALSE 5 No_: 2917, Exc: 4, Goo: 4, Typ: 3
Fence 0 1 FALSE 5 No_: 2358, Min: 330, Goo: 118, Goo: 112
Misc_Feature 0 1 FALSE 6 Non: 2824, She: 95, Gar: 5, Oth: 4
Sale_Type 0 1 FALSE 10 WD : 2536, New: 239, COD: 87, Con: 26
Sale_Condition 0 1 FALSE 6 Nor: 2413, Par: 245, Abn: 190, Fam: 46

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Lot_Frontage 0 1 57.65 33.50 0.00 43.00 63.00 78.00 313.00 ▇▇▁▁▁
Lot_Area 0 1 10147.92 7880.02 1300.00 7440.25 9436.50 11555.25 215245.00 ▇▁▁▁▁
Year_Built 0 1 1971.36 30.25 1872.00 1954.00 1973.00 2001.00 2010.00 ▁▂▃▆▇
Year_Remod_Add 0 1 1984.27 20.86 1950.00 1965.00 1993.00 2004.00 2010.00 ▅▂▂▃▇
Mas_Vnr_Area 0 1 101.10 178.63 0.00 0.00 0.00 162.75 1600.00 ▇▁▁▁▁
BsmtFin_SF_1 0 1 4.18 2.23 0.00 3.00 3.00 7.00 7.00 ▃▂▇▁▇
BsmtFin_SF_2 0 1 49.71 169.14 0.00 0.00 0.00 0.00 1526.00 ▇▁▁▁▁
Bsmt_Unf_SF 0 1 559.07 439.54 0.00 219.00 465.50 801.75 2336.00 ▇▅▂▁▁
Total_Bsmt_SF 0 1 1051.26 440.97 0.00 793.00 990.00 1301.50 6110.00 ▇▃▁▁▁
First_Flr_SF 0 1 1159.56 391.89 334.00 876.25 1084.00 1384.00 5095.00 ▇▃▁▁▁
Second_Flr_SF 0 1 335.46 428.40 0.00 0.00 0.00 703.75 2065.00 ▇▃▂▁▁
Gr_Liv_Area 0 1 1499.69 505.51 334.00 1126.00 1442.00 1742.75 5642.00 ▇▇▁▁▁
Bsmt_Full_Bath 0 1 0.43 0.52 0.00 0.00 0.00 1.00 3.00 ▇▆▁▁▁
Bsmt_Half_Bath 0 1 0.06 0.25 0.00 0.00 0.00 0.00 2.00 ▇▁▁▁▁
Full_Bath 0 1 1.57 0.55 0.00 1.00 2.00 2.00 4.00 ▁▇▇▁▁
Half_Bath 0 1 0.38 0.50 0.00 0.00 0.00 1.00 2.00 ▇▁▅▁▁
Bedroom_AbvGr 0 1 2.85 0.83 0.00 2.00 3.00 3.00 8.00 ▁▇▂▁▁
Kitchen_AbvGr 0 1 1.04 0.21 0.00 1.00 1.00 1.00 3.00 ▁▇▁▁▁
TotRms_AbvGrd 0 1 6.44 1.57 2.00 5.00 6.00 7.00 15.00 ▁▇▂▁▁
Fireplaces 0 1 0.60 0.65 0.00 0.00 1.00 1.00 4.00 ▇▇▁▁▁
Garage_Cars 0 1 1.77 0.76 0.00 1.00 2.00 2.00 5.00 ▅▇▂▁▁
Garage_Area 0 1 472.66 215.19 0.00 320.00 480.00 576.00 1488.00 ▃▇▃▁▁
Wood_Deck_SF 0 1 93.75 126.36 0.00 0.00 0.00 168.00 1424.00 ▇▁▁▁▁
Open_Porch_SF 0 1 47.53 67.48 0.00 0.00 27.00 70.00 742.00 ▇▁▁▁▁
Enclosed_Porch 0 1 23.01 64.14 0.00 0.00 0.00 0.00 1012.00 ▇▁▁▁▁
Three_season_porch 0 1 2.59 25.14 0.00 0.00 0.00 0.00 508.00 ▇▁▁▁▁
Screen_Porch 0 1 16.00 56.09 0.00 0.00 0.00 0.00 576.00 ▇▁▁▁▁
Pool_Area 0 1 2.24 35.60 0.00 0.00 0.00 0.00 800.00 ▇▁▁▁▁
Misc_Val 0 1 50.64 566.34 0.00 0.00 0.00 0.00 17000.00 ▇▁▁▁▁
Mo_Sold 0 1 6.22 2.71 1.00 4.00 6.00 8.00 12.00 ▅▆▇▃▃
Year_Sold 0 1 2007.79 1.32 2006.00 2007.00 2008.00 2009.00 2010.00 ▇▇▇▇▃
Sale_Price 0 1 180796.06 79886.69 12789.00 129500.00 160000.00 213500.00 755000.00 ▇▇▁▁▁
Longitude 0 1 -93.64 0.03 -93.69 -93.66 -93.64 -93.62 -93.58 ▅▅▇▆▁
Latitude 0 1 42.03 0.02 41.99 42.02 42.03 42.05 42.06 ▂▂▇▇▇

Gráfico usando ggpubr

#ggpubr
data(pistonrings, package = "qcc")

pistonrings %>% 
  ggpubr::gghistogram(x = "diameter", 
                      fill = "trial",
                      add = "mean",
                      rug = TRUE)

Gráfico usando base raincloud

#raincloud
ames <- ames %>% janitor::clean_names()

ames %>% 
  mutate(sale_price = log10(sale_price)) %>% 
  ggplot(aes(x = heating_qc,
             y = sale_price))+
  ggdist::stat_halfeye()

Pra onde vai quem é o cliente

  • Vai para a etapa de pre processamento ou ajuste de coleta de dados.

Qual o resultado

  • Aperfeiçoar a avalição preliminar dos dados através da análise de distribuição.

  • Facilitar o reconhecimento de determinados padrões que poderão influenciar nas decisões.

  • Melhorar o entendimento sobre a natureza dos dados.