ANÁLISE EXPLORATÓRIA DE DADOS R – Histograma e Ramo-e-Folhas
Objetivos: trabalhar com dados quantitativos contínuos; especificar intervalos de classe; construir histogramas; construir mais de um gráfico na mesma janela.
Exemplo 1: Tipo sangüíneo, peso (em Kg) e altura (em cm). A base de dados que será trabalhada hoje contém a informação de 100 indivíduos sobre tipo sangüíneo, peso (kg) e altura (cm). Forma dos dados na planilha com 100 linhas e três colunas. arquivo: m:\\aed\\dados1.txt Fonte: dados fictícios.
Exemplo (continuação) Os dados deste exemplo podem ser obtidos como: dados<-read.table(“m:\\aed\\dados1.txt”) Observe que aqui, não usamos o argumento header=T, pois os nomes das variáveis não estão no arquivo de dados. Mas, se preferirmos, podemos definir os nomes das variáveis em dados. names(dados)<-c(“tsangue”,”peso”,”altura”)
Acesso aos valores Assim, você pode se referir às colunas desta base tanto usando dados[,n], em que n é o número da coluna desejada, como dados$nomedavariável. Por exemplo, para ver o conteúdo da coluna 1, podemos tanto usar dados[,1] como dados$tsangue.
VARIÁVEIS QUANTITATIVAS Veremos agora como construir a distribuição de freqüências de uma variável quantitativa. Para isso, usaremos os dados do exemplo referentes ao peso e à altura dos indivíduos.
VARIÁVEIS QUANTITATIVAS Se você pedir table(dados[,2]) ou table(dados[,3]) o efeito da saída será quase que reproduzir os valores observados de forma ordenada. table(dados[,2]) 57.1 59 61.4 61.9 62.1 62.4 62.8 63.3 63.9 64.2 64.8 66.1 66.3 66.7 67.6 67.8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 68 68.1 68.9 69.4 69.9 70.1 70.2 70.4 70.9 71.2 71.3 71.5 71.7 71.9 72.1 72.2 1 2 1 1 1 2 2 1 3 1 1 2 1 2 1 1 72.6 73.2 73.4 73.7 74.1 74.6 74.9 75.2 75.3 76 76.3 76.5 76.9 77 77.5 77.6 2 2 1 2 1 4 1 1 1 2 1 1 2 1 1 1 77.8 77.9 78.2 78.4 78.5 78.6 79.1 79.5 79.8 80 80.5 80.6 80.7 80.8 80.9 81.1 2 1 1 1 1 1 2 1 1 1 1 1 3 1 1 1 81.2 81.3 81.7 82.2 82.4 82.7 82.8 83.2 84.3 85 86 86.1 86.7 94.4 95.8 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1
VARIÁVEIS QUANTITATIVAS Portanto, o comando table não é, em geral, útil para dados contínuos. Ele talvez poderá ser útil se estivermos trabalhando com uma variável discreta cuja quantidade de respostas possíveis é pequena.
VARIÁVEIS QUANTITATIVAS Vimos que no caso de dados contínuos, há a necessidade de se definir primeiro intervalos de classe para depois construir a tabela de freqüências e, então, usá-la para construir o histograma. O R possui uma função que pode gerar esta distribuição de forma automática.
VARIÁVEIS QUANTITATIVAS Esta função também tem a flexibilidade de nos permitir fixar os intervalos ou sugerir o número de intervalos. Esta mesma função também gera o histograma dos dados e seu nome no R é hist.
Uso da função hist Para começar peça a função hist apenas com o argumento obrigatório que é um vetor contendo os valores para os quais queremos construir o histograma, isto é, peça hist(dados$peso).
Argumentos da função hist x (obrigatório): vetor de valores para os quais deseja-se construir o histograma. breaks (opcional): um entre * vetor fornecendo os limites dos intervalos de classe, * número fornecendo o número de intervalos (é apenas uma sugestão). freq (opcional): lógica; se `freq=T', o histograma é uma representação da distribuição na escala das freqüências absolutas, se `freq=F', é uma representação na escala da densidade de freqüência relativa, que é definida como a razão entre freqüência relativa e a amplitude da classe.
Exemplo: argumentos breaks e freq hist(dados$peso,breaks=c(50,60,70,80,90,100),freq=F)
Exemplo (continuação) Para melhorar o gráfico podemos definir o título e os rótulos para os eixos ox e oy. hist(dados$peso,breaks=c(50,60,70,80,90,100),freq=F,main= “Histograma dos pesos”,xlab=“kg”,ylab=“dens.freq.rel”, col=“blue”)
Mudando a escala dos eixos Comandos xlim e ylim. Para visualizar o eixo 0x de 40 até 110kg, inclua o argumento xlim=c(40,110). Para visualizar o eixo 0y de 0 até 0.06, quando freq=F, inclua o argumento ylim=c(0,0.06).
Exemplo (continuação) hist(dados$peso,breaks= c(50,60,70,80,90,100), freq=F,main="Histograma dos pesos",xlab="Kg", ylab="dens.freq.rel", col="gray",xlim=c(40,110), ylim=c(0,0.06))
Exemplo (continuação) A função hist gera um objeto do R. Assim, podemos criar uma variável que recebe o objeto gerado por hist. Por exemplo, faça hist1<-hist(dados$peso,breaks=c(50,60,70,80,90,100),freq=F,main=“...”) Depois, liste o conteúdo de hist1.
Exemplo (continuação) hist1 com freq=F $breaks (LIMITES DOS INTERVALOS DE CLASSE) [1] 50 60 70 80 90 100 $counts (FREQÜÊNCIAS ABSOLUTAS DOS INTERVALOS DE CLASSE) [1] 2 20 53 23 2 $intensities [1] 0.001999996 0.020000000 0.053000000 0.023000000 0.002000000 $density (densidade de freqüência relativa=freq.rel/amp.do intervalo) $mids (PONTOS MÉDIOS DOS INTERVALOS DE CLASSE) [1] 55 65 75 85 95 $xname (NOME DO EIXO 0x) [1] "dados$peso" $equidist (VARIÁVEL LÓGICA INFORMANDO SE AS AMPLITUDES DOS INTERVALOS DE CLASSE SÃO IGUAIS (TRUE) OU DESIGUAIS (FALSE)). [1] TRUE attr(,"class") [1] "histogram"
Exemplo (continuação) Repita agora os mesmos passos com hist2<-hist(dados$peso,breaks=c(50,60,70,80,90,100),freq=T,main=“...”)
Exemplo (continuação) > hist2 $breaks [1] 50 60 70 80 90 100 $counts [1] 2 20 53 23 2 $intensities [1] 0.001999996 0.020000000 0.053000000 0.023000000 0.002000000 $density $mids [1] 55 65 75 85 95 $xname [1] "dados$peso" $equidist [1] TRUE attr(,"class") [1] "histogram"
O que mudou? freq=F freq=T
Observações Se os intervalos de classe tiverem amplitudes desiguais, será obrigatório usar o argumento freq=F. Caso contrário, o R retornará com uma mensagem de erro. Warning message: the AREAS in the plot are wrong -- rather use `freq=FALSE'! in: plot.histogram(r, freq = freq, col = col, border = border, angle = angle,
Argumentos xlim e ylim Estes dois argumentos são muito úteis quando queremos comparar diversos histogramas. Para uma comparação, é necessário trabalhar com escalas iguais.
Ramo e folhas de peso Para estudarmos outras possibilidades de intervalos para o histograma de pesos, é interessante aqui pedir uma ramo-e-folhas dos pesos: stem(dados$peso). The decimal point is 1 digit(s) to the right of the | 5 | 79 6 | 12223344 6 | 56678888899 7 | 00000011111222222233333444 7 | 5555555666777788888889999 8 | 000111111111122223334 8 | 56667 9 | 4 9 | 6
Construindo 9 intervalos de classe A amplitude amostral é aproximadamente 97-56=41 Para 9 intervalos, podemos calcular 41/9 que é 4.555556, e arredondando para 5 temos as amplitudes das classes. Observe que ficaremos com uma amplitude total igual à 45, 4 a mais da verificada. Podemos então repartir o excesso igualmente para cima e para baixo, começando com 54 e terminando em 99: hist(dados$peso,breaks=c(54,59,64,69,74,79,84,89,94,99), col=“palegreen”,main=“Histograma dos pesos”,xlab=“kg”, ylab=“dens.freq.rel.”,freq=F)
de freqüências, não deve haver classes intermediárias vazias! Numa distribuição de freqüências, não deve haver classes intermediárias vazias! Portanto, essa distribuição deve ser refeita. Possibilidades: sugerir 8 intervalos ou juntar as duas classes finais, passando a ter classes de amplitudes desiguais.
Construa o histograma usando 8 intervalos de classe. Sugestão: breaks=c(53.5,59.5,65.5,71.5,77.5,83.5,89.5,95.5,101.5)
Continuação Sugestão: breaks=8 Lembre que 8 é apenas uma sugestão para o número de classes.
Outros argumentos da função hist right: valor lógico; se ’right=T’, os intervalos serão fechados à direita e abertos à esquerda. Se ’right=F’, os intervalos serão abertos à direita e fechados à esquerda. density: densidade das linhas que preenchem os retângulos. O default é 'NULL‘, implicando que nenhuma linha é desenhada. Valores não-positivos de ‘density' também inibem o desenho das linhas.
Argumento density Inserindo o argumento density=4, obtemos
Outros argumentos Sugerimos que os demais argumentos da função hist sejam explorados por vocês.
Exemplo 2 (alturas) Construa agora um histograma das alturas (cm), especificando os limites dos intervalos, considerando 9 intervalos. Passo 1: Magnitude dos dados para avaliar amplitude. Sugestão: Ramo-e-folhas. stem(dados$altura)
Ramo-e-folhas das alturas 14 | 1399 15 | 024555666799 16 | 0111222222334444445555666666666778888899999 17 | 0000111111222233345556667777 18 | 001222223349 19 | 4 Amplitude amostral aproximada: 195-140=55 cm Amplitude dos intervalos: 55/9=6.1111...cm Arredondamos para 7 7*9=63 (8 a mais)
Intervalos de classe hist(dados[,3],breaks=c(137, 144,151,158,165,172,179, 186,193,200),ylab=“dens. freq. Rel.”,main=“ Histograma das alturas”,xlab=“cm”,density=4)
ATIVIDADE 1) Construa agora o histograma das alturas com 7 intervalos de classe. 2) Calcule a média das alturas nesta amostra e localize-a no histograma obtido no item 2.
Histograma com 7 classes Amplitude amostral aproximada: 195-140=55 cm Amplitude dos intervalos: 55/7->7.85cm Arredondamos para 8. breaks=c(139.5,147.5,155.5,163.5,171.5,179.5,187.5,195.5)
Comando par(mfrow=c(l,n)) É possível construir vários histogramas numa única janela de gráfico. Por exemplo, se quisermos apresentar o histograma das alturas e o histograma dos pesos numa mesma janela, antes de pedir os histogramas, devemos informar que a janela conterá dois gráficos. Podemos configurar a janela com dois gráficos numa única linha ou dois gráficos numa única coluna.
Comando par(mfrow=c(l,n)) par(mfrow=c(1,2)) # uma linha duas colunas ou par(mfrow=c(2,1)) # duas linhas uma coluna. Depois é só pedir os respectivos histogramas.
hist(dados$peso, main="Histograma dos pesos",xlab="Kg",freq=F, par(mfrow=c(1,2)) hist(dados$peso, main="Histograma dos pesos",xlab="Kg",freq=F, ylab="densidade de freq. rel.",ylim=c(0,0.07),xlim=c(50,110)) hist(dados$altura, main="Histograma das alturas",xlab="cm",freq=F, ylab="densidade de freq. rel.",ylim=c(0,0.06),xlim=c(130,200))
hist(dados$peso, main="Histograma dos pesos",xlab="Kg",freq=F, par(mfrow=c(2,1)) hist(dados$peso, main="Histograma dos pesos",xlab="Kg",freq=F, ylab="densidade de freq. rel.",ylim=c(0,0.07),xlim=c(50,110)) hist(dados$altura, main="Histograma das alturas",xlab="cm",freq=F, ylab="densidade de freq. rel.",ylim=c(0,0.06),xlim=c(130,200))
Principais comandos da aula par(mfrow=c(r,s)) (especifica que deverão entrar na janela rs figuras em r linhas e s colunas) Argumentos importantes da função hist: main=“Título do Gráfico”,sub=“sub-título para o gráfico”, ylim=c(min,max) escala do eixo y, ylab=“rótulo para o eixo”, (xlim e xlab), etc. read.table (para ler bases de dados multivariadas) names (para definir nomes das variáveis que compõem o objeto) hist (constrói um histograma) stem (constrói um ramo-e-folhas)