histograma

Histograma no R Agrupando 1 e 0?

Recentemente, recebi um e-mail pedindo uma ajuda para montar um histograma no R. O problema que a pessoa enfrentava era o seguinte: ao usar a função hist(), o R estava agrupando as quantidades que estavam na barra 1 e 0. Ou seja, se a pessoa tivesse 5 ocorrências do valor 0 e outras 3 com valor 1, o gráfico apresentaria só uma barra, registrando 8 ocorrências. Veja o exemplo abaixo: (mais…)

Anúncios

Histograma no R

Fazer um histograma no R é bem simples, basta utilizar o comando hist() com a variável que você quer investigar a distribuição. No entanto, um gráfico detalhado pode necessitar de mais detalhes, seja uma mudança na cor ou a apresentação das medidas de tendência central. Este post apresentará os detalhes que são possíveis de acrescentar no seu histograma utilizando o R.

Leia mais…

Gráficos no R com qqplot() (Histograma, Gráficos de Dispersão e Boxplot)

A função qqplot() do R – pertencente ao pacote ggplot2 –  é uma das melhores para se fazer gráficos. Este post, sem muitas enrolações, é basicamente uma continuidade do Gráficos em R. Aqui vamos utilizar os dados da base Wage do pacote ISLR do R.

Para começar, apenas carregue os pacotes e visualize a base:


library(ggplot2);

library(ISLR);

View(Wage);

Como você pode ver, se trata de dados referentes a salário, escolaridade, saúde, etc.
Abaixo, você terá os códigos para gerar diferentes gráficos e comentários explicativos:
## Tracando grafico simples com qplot
## por default, temos um histograma bem simples
qplot(wage, data=Wage);

qplot1

Você deve ter notado a mensagem: “`stat_bin()` using `bins = 30`. Pick better value with `binwidth`“. Isto quer dizer que por default, seu histograma é dividido em 30 barras diferentes, mas você pode escolher o melhor número de barras. Vamos testar com 15:
qplot(wage, data=Wage, bins=15);
qplot2
## Agora, vamos visualizar cada barra separando pelo estado civil
qplot(wage, colour=maritl, data=Wage);

qplot3

## Separar apenas com a cor do contorno nao ficou legal
## vamos trocar tambem a cor de preenchimento utilizando fill
qplot(wage, colour=maritl, fill=maritl, data=Wage);
qplot4
## Podemos inclusive preencher os blocos com cores diferentes
## Por exemplo, para cada estado civil, queremos ver quantos sao
## saudaveis e quantos nao sao
qplot(wage, colour=maritl, fill=health, data=Wage);
qplot5
## Podemos visualizar graficos de densidade
qplot(wage, colour=maritl, data=Wage, geom="density");
qplot6
## Podemos tentar entender como duas variaveis interagem
## Exemplo: plotar salario vs idade
qplot(wage, age, data=Wage);
qplot7
## Ou ate tentar ver alguma relacao nao linear
qplot(wage, age*age, data=Wage);
qplot8
## Um pouco mais complexo, podemos verificar o comportamento de idade por salario
## para cada raca, dividindo ainda por pessoas que possuem ou nao plano de saude
## essa segunda divisao (raca por plano de saude) eh feita utilizando facets
qplot(age, wage, data=Wage, facets=race~health_ins,
xlab="Idade", ylab="Salario");
qplot9
## Por fim, podemos fazer um boxplot, mas divindo uma variavel por
## cada uma das diferentes classes de uma outra (categorica)
## vamos observar o boxplot de salario para cada classe de trabalhador
## main indica o titulo do grafico, ylab o titulo do eixo y
qplot(jobclass, wage, data=Wage, geom=c("boxplot"),
fill=jobclass, main="Salario por classe de trabalho",
xlab="", ylab="Salario")

qplot10

Agora você já está pronto para fazer diversos gráficos diferentes no R!

Visualizando seus dados: Histograma

Um histograma nada mais é do que uma forma de representar seus dados utilizando um gráfico de barras onde o eixo y representa a frequência e o eixo x os intervalos (chamados também de classes) dos seus dados. Simples assim. E já para dar uma ideia antes mesmo das definições mais formais, veja esse exemplo de um conjunto de dados e um histograma executado automaticamente pelo excel (veja o passo a passo no Canal da Educação):

hist1

Só de bater o olho, acho que a maioria já consegue entender o que o histograma apresenta. Ele nos dá uma ideia de como nossos dados estão distribuídos, mas para isso ele separa nossos dados em classes, ou, como o excel chamou, em blocos. Veja o que o excel fez, ele separou nossos dados em 5 intervalos:

Menor ou igual a 1, maior que 1 e menor ou igual a 25, maior que 25 e menor ou igual a 49, maior que 49 e menor ou igual a 73 e um último intervalo como sendo os números acima de 73. Para cada intervalo, ele contou o número de elementos dos nossos dados que fazem parte do intervalo em questão e a partir daí fez o gráfico de barras.

Quantos números do nosso conjunto de dados são menores ou iguais a 1? Apenas 1. Quantos são maiores que 1 e menor ou igual a 25? Apenas 6.

Eu não sou fã desse histograma do excel por achar pouco intuitivo os pontos 1, 25, 49, 73 e “Mais” estarem localizados no meio da barra mas não serem o ponto médio do intervalo. É bom se atentar a isso. Mas, deixando a crítica de lado e voltando ao assunto…

Nesse gráfico, o excel nos devolveu o resultado em termos da frequência absoluta, que nada mais é que o número de vezes em que determinado dado aparece. O histograma também pode ser construído com base na frequência relativa, que é o número de vezes em que determinado dado aparece dividido pelo número de elementos da nossa amostra ou população. Em outras palavras, é a representação percentual. Veja esse exemplo com os mesmos dados, mas utilizando a frequência relativa:

hist2

E NO SAS? COMO FAZEMOS UM HISTOGRAMA

A forma mais rápida que eu conheço é pelo proc univariate, é bem simples. Basta acrescentar histogram logo após você selecionar as variáveis que deseja visualizar o histograma. No exemplo abaixo, vamos inserir através do Datalines a data e o índice Ibovespa (índice na abertura, alta, baixa, etc.) e em seguida utilizamos o proc univariate para gerar o histograma:

data dados;
    input notas; 
    datalines;
    3.6
    3.6
    5
    6.4
    6.6
    6.6
    6.8
    7.5
    8
    8.7
    9
    9.5
    ;
proc print;
run;

proc univariate data = dados;
    var notas;
    histogram;
run;

hist3

Veja que o SAS criou seus intervalos também.

E se eu quiser alterar a forma como as classes estão divididas?

Bom, nesse caso podemos usar tanto o endpoints como o midpoints e escolher o intervalo inferior de todas as classes, o superior, e qual tamanho de cada classe. Veja esse exemplo com midpoints e tente brincar depois com endpoints:

proc univariate data = dados;
     var notas;
     histogram / midpoints=(3 to 10 by 2) ;
  run;

hist4