ANÁLISE EXPLORATÓRIA DE DADOS Aula lig-03 Objetivos Trabalhar com dados quantitativos contínuos: especificar intervalos de classe; construir histogramas; construir ramo-e-folhas. Exemplo 1: Tipo sangüíneo, peso (em Kg) e altura (em cm). A base de dados que será trabalhada hoje contém a informaçao 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: dados1.txt Fonte: dados fictícios. A AB AB AB AB 62 83 62 64 75 . . . O O AB AB AB B B B B B . . . 164 163 176 177 166 . . . 70 72 94 75 80 78 71 76 82 78 182 170 189 175 154 172 171 166 143 169 Exemplo (continuação) Os dados deste exemplo podem ser obtidos como: dados=read.table(“http://www.im.ufrj.br/~flavia/aed06/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 QUALITATIVAS: GRÁFICO DE SETORES pie(table(dados[,1]),main=” Distribuição de freqüências do tipo sangüíneo", col= c("blue",”blue4",”green",”green4")) VARIÁVEIS QUALITATIVAS: GRÁFICO DE BARRAS barplot(table(dados$tsangue),col="red",main= "Distribuição de freqüências de tipo sangüíneo") VARIÁVEIS QUALITATIVAS: GRÁFICO DE BARRAS barplot(table(dados$tsangue),col="red",main= "Distribuição de freqüências de tipo sangüíneo”,ylim=c(0,40)) VARIÁVEIS QUANTITATIVAS (1) 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 (2) 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 (3) 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 (4) 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 (5) 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 (1) hist package:base R Documentation Histogramas Descrição: a função genérica `hist' constrói um histograma de valores dados. Se o argumento `plot=TRUE', a saída é um histograma. Como usar: hist(x, ...) hist.default(x, breaks = "Sturges", freq = NULL, probability = !freq, include.lowest = TRUE, right = TRUE, density = NULL, angle = 45, col = NULL, border = NULL,main = paste("Histogram of" , xname), xlim = range(breaks), ylim = NULL, xlab = xname, ylab, axes = TRUE, plot = TRUE, labels = FALSE, nclass = NULL, ...) A seguir veremos como usar a função hist e seus principais argumentos. Uso da função hist (2) 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 Argumentos: 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). right (opcional): lógica; se `right=T‘(default), as classes são fechadas à direita e abertas à esquerda. Se ‘ right=F´, as classes são fechadas à esquerda e abertas à direita. Argumentos da função hist 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. Observação: O Defaul da versão atual do R é usar freq=T, quando as classes têm amplitudes iguais e freq=F, quando as classes têm amplitudes desiguais. Exemplo: argumentos breaks e freq hist(dados$peso,breaks=c(50,60,70,80,90,100),right=F,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,right=F,main= “Histograma dos pesos”,xlab=“kg”,ylab =“dens.freq.rel”, density=6,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) [1] 0.001999996 0.020000000 0.053000000 0.023000000 0.002000000 $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 [1] 0.001999996 0.020000000 0.053000000 0.023000000 0.002000000 $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 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, será útil construir um 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 96-57=39 Para 9 intervalos podemos calcular 39/9 que é 4.333..., e arredondando para 4,5 temos as amplitudes das classes. Observe que ficaremos com uma amplitude total igual à 9x4,5=40,5, que equivale quase 2 a mais. Podemos então repartir o excesso igualmente para cima e para baixo, começando com 56 e terminando em 97: hist(dados$peso,breaks=c(56,60.5,65,69.5,74,78.5,83,87.5,92,96.5), right=F,col=“palegreen”,main=“Histograma dos pesos”,xlab=“kg”, ylab=“dens.freq.rel.”,freq=F,ylim=c(0,0.06)) 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(56,60.5,65,69.5,74,78.5,83,87.5,96.5) Continuação Sugestão: breaks=8 Lembre que 8 é apenas uma sugestão para o número de classes. 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. 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)) 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)) Janelas de gráfico simultâneas: Para abrir uma NOVA janela de gráfico, usa-se o comando: win.graph() Para fechar uma janela de gráfico, usa-se o comando: dev.off() Principais comandos da aula 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 ramoe-folhas) 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.