Análise Exploratória de Dados - 2005 R - LIG-04 Objetivos da aula Trabalhar com transformações de escala; detalhar argumentos da função stem (ramoe-folhas); construir um diagrama de pontos; trabalhar com a representação de uma série temporal (variável quantitativa observada ao longo do tempo); construir mais de um gráfico na mesma janela; trabalhar com as medidas: média, mediana e moda. Data(islands) Os dados a seguir fazem parte do elenco de exemplos do R. Descrição: áreas em milhares de milhas quadradas das maiores massas de terra do mundo (maiores que 10000 milhas quadradas). data(islands) Formato: vetor rotulado de comprimento 48. Para mais detalhes vamos usar o help. help(islands) islands package:base R Documentation Areas of the World's Major Landmasses (áreas das maiores massas de terra do mundo) Descrição: contém as áreas em milhares de milhas quadradas das massas de terra, que excedem à 10000 milhas quadradas. Uso: data(islands) Formato: está num vetor rotulado de comprimento 48. Os rótulos referem-se ao local. Fonte: The World Almanac and Book of Facts, 1975, page 406. Problema: Esses dados foram usados para resolver o seguinte problema: Deve a Austrália ser considerada como uma ilha ou como um continente? Islands Africa Antarctica Asia Australia 11506 5500 16988 2968 Axel Heiberg Baffin Banks Borneo 16 184 23 280 Britain Celebes Celon Cuba 84 73 25 43 Devon Ellesmere Europe Greenland 21 82 3745 840 Hainan Hispaniola Hokkaido Honshu 13 30 30 89 Iceland Ireland Java Kyushu 40 33 49 14 Luzon Madagascar Melville Mindanao 42 227 16 36 etc. RAMO-E-FOLHAS DE ISLANDS stem(islands) The decimal point is 3 digit(s) to the right of the | 0 | 00000000000000000000000000000111111222338 2 | 07 Observe que por conta das disparidades 4|5 de valores, o ramo-e-folhas concentra 6|8 cerca de 85% dos valores no primeiro ramo. 8|4 10 | 5 Uma alternativa aqui é trabalhar em outra 12 | escala. 14 | 16 | 0 Mudança de escala dos dados stem(log(islands)) (Logaritmo natural dos dados) 2 | 566666778889 3 | 01234444556778889 4 | 134445 5 | 22467 6|7 7| 8 | 0268 9 | 147 Função stem stem package:base R Documentação Stem-and-Leaf Plots (Ramo-e-folhas) Descrição: 'stem' produz um ramo-e-folhas dos valores no vetor 'x'. O parâmetro 'scale' pode ser usado para expandir a escala do gráfico. 'scale=2' implicará num ramo-efolhas duas vezes mais comprido que o default (scale=1). Usage: stem(x, scale = 1, width = 80, atom = 1e-08) Argumentos da função stem x: um vetor numérico. scale: controla o comprimento do gráfico. width: largura desejada do gráfico. atom: uma tolerância (para o comprimento do ramo). Ramo-e-folhas stem(log(islands),scale=2) 2| 2 | 566666778889 3 | 01234444 3 | 556778889 4 | 13444 4|5 5 | 224 5 | 67 6| 6|7 7| 7| 8 | 02 8 | 68 9 | 14 9|7 Ramo-e-folhas stem(log(islands),scale=1/2) 2 | 56666677888901234444556778889 4 | 13444522467 6|7 8 | 0268147 Ramo-e-folhas: outras escalas para os dados Construa o ramo-e-folhas dos dados em islands nas escalas: 1) Raiz quadrada de x 2) 1/raiz quadrada de x 3) 1/x 4) 1/x^2 1) Raiz quadrada: sqrt() stem(sqrt(islands)) 0 | 3444444444445555555566666777789999944577 2|9 4|4 6 | 14 8 | 27 10 | 7 12 | 0 2) Inverso da raiz quadrada stem(1/sqrt(islands)) 0 | 11111223 0 | 66777 1 | 1111234 1 | 555567788899 2 | 00123 2 | 55566778889 3) Inverso 0 | 0000000134455 stem(1/(islands)) 1 | 122247 2 | 0333458 3 | 0133448 4 | 038 5|3 6 | 33377 7 | 11777 8|3 4) Inverso do quadrado stem(1/(islands^2)) 0 | 000000000000011112345556689 1 | 01122569 2 | 38 3 | 999 4 | 44 5 | 11999 6|9 Diagrama de pontos dotchart package:base Documentation R Cleveland Dot Plots Descrição: desenha um gráfico de pontos Como usar: dotchart(x, labels = NULL, groups = NULL, gdata = NULL, cex = par("cex"), pch = 21, gpch = 21, bg = par("bg"), color = par("fg"), gcolor = par("fg"), lcolor = "gray", xlim = range(x[is.finite(x)]), main = NULL, xlab = NULL, ylab = NULL, ...) Diagrama de pontos: Exemplos Começaremos pedindo dotchart(islands), onde islands é um vetor. Diagrama de pontos: Exemplos Diagrama de pontos: argumentos x: pode ser tanto um vetor como uma matriz de valores numéricos ('NA's são permitidos). Se 'x' é uma matriz o gráfico resultante consiste de diagramas de pontos justapostos para cada linha. (Este último caso não será tratado hoje.) labels: um vetor de rótulos para cada ponto. Para vetores o default é usar ‘names(x)' e para matrizes os rótulos das linhas 'dimnames(x)[[1]]'. Diagrama de pontos: argumentos (2) cex: define o tamanho do caracter a ser usado. Atribuir à 'cex' um valor menor do que um pode ser uma forma útil de evitar a sobreposição de rótulos. pch: caracter ou símbolo a ser usado no diagrama. dotchart(islands,cex=0.6,pch=“*”) Diagrama de pontos: argumentos (3) bg: cor de fundo dos caracteres; para configurar a cor de fundo de todo diagrama. color: cores para serem usadas para os pontos e rótulos. lcolor: cores das linhas horizontais. xlim: amplitude do eixo horizontal. main: título global. xlab, ylab: rótulos para os eixos. dotchart(islands,cex=0.6,pch="2",color="blue",lcolor="red ",main="Maiores massas de terra do mundo") dotchart(log(islands),cex=0.6,pch="2",color="blue",lcol or="red",main="Maiores massas de terra do mundo”,xlab=“log(área em milhas quadradas)”) Exemplo 2: Notas em Estatística O diagrama de pontos é útil para avaliarmos se há ou parece haver alguma estrutura no processo de observação dos dados. Por exemplo, observou-se as notas em Estatística numa turma de 100 alunos. Os dados estão no arquivo http://www.im.ufrj.br/~flavia/aed06/dados3bm.txt estat<-scan(”http://www.im.ufrj.br/~flavia/aed06/dados3bm.txt") dotchart(estat,main="Notas em Estatística",xlab="notas") Exemplo 2: Notas em Estatística (cont.) É possível verificar, a partir do diagrama de pontos, que as notas distribuem-se ao acaso de 1 a 10, não ocorrendo nenhum padrão aparente no registro das notas. Exemplo 3: Temperaturas médias mensais em Cananéia e Ubatuba (SP) de 1976 a 1985 Temperaturas médias mensais, em graus centígrados, de janeiro de 1976 a dezembro de 1985. http://www.im.ufrj.br/~flavia/aed06/dados5bm.txt Usamos o termo SÉRIE TEMPORAL para nos referirmos a esse tipo de dado. Isso ocorre quando os dados da Variável quantitativa em estudo são coletados ao longo do tempo. Exemplo 3: Temperaturas médias mensais em Cananéia e Ubatuba (SP) de 1976 a 1985 Temperaturas médias mensais, em graus centígrados, de janeiro de 1976 a dezembro de 1985. http://www.im.ufrj.br/~flavia/aed06/dados5bm.txt Vamos visualizar as temperaturas médias em Ubatuba nos anos de 1976 e 1977, que se referem às 24 primeiras observações. dados<-read.table(”http://www.im.ufrj.br/~flavia/aed06/dados5bm.txt”, header=T) dotchart(dados$Ubatuba[1:24],main=”Temperaturas médias mensais em Ubatuba nos anos de 1976 e 1977”,xlab=”ºC") Exemplo 3: Temperaturas médias mensais em Cananéia e Ubatuba (SP) de 1976 a 1985 (cont.) É possível observar aqui um certo padrão de comportamento das temperaturas médias que são mais altas no início dos anos, caem até o meio do ano, e depois voltam a subir. Chamamos esse comportamento de sazonal. Exemplo 3: Temperaturas médias mensais em Cananéia e Ubatuba (SP) de 1976 a 1985 (cont.) A série de temperaturas tem ao todo 120 observações para cada cidade. Um dotchart para essa quantidade de dados não é conveniente. Observe que a dependência sazonal fica mascarada neste gráfico. Exemplo 3: Temperaturas médias mensais em Cananéia e Ubatuba (SP) de 1976 a 1985 (cont.) Podemos representar simultaneamente as duas séries num único gráfico. No R há a função ts (time series) usada para criar objetos que são séries temporais. Nesse exemplo temos duas séries mensais começando em janeiro de 1976 e terminando em dezembro de 1985. Podemos então definir a série temporal temp na forma: temp<-ts(dados[,2:3],start=c(1976,1),end=c(1985,12),frequency=12) Exemplo 3: Temperaturas médias mensais em Cananéia e Ubatuba (SP) de 1976 a 1985 (cont.) temp<-ts(dados[,2:3],start=c(1976,1),end=c(1985,12),frequency=12) Objeto que contém os valores da série, podendo ser um vetor ou uma matriz quando for o caso de mais de uma série. Nesse exemplo temos duas séries Informa o tempo de início da série ano=1976,mês=1 Informa o fim da série: ano=1985,mês=12 Informa a freqüência de observação na série (12 -mensal, 4-quadrimestral, 6- semestral, etc.) Exemplo 3: Temperaturas médias mensais em Cananéia e Ubatuba (SP) de 1976 a 1985 (cont.) Com o objeto criado, basta usar a função do R: plot. plot(temp,main="Temperaturas médias mensais",xlab="tempo") Exemplo 3: Temperaturas médias mensais em Cananéia e Ubatuba (SP) de 1976 a 1985 (cont.) Confecção de mais de um gráfico numa única janela Veremos como colocar vários gráficos numa única janela de gráfico. Para essa atividade vamos utilizar as notas da prova de matemática no vestibular 2005 da UFRJ para alunos classificados nas carreiras: Ciências Atuariais e Estatística: Básico, Meteorologia, Engenharia Ambiental e Engenharia de Produção. Exemplo 4: Notas de Matemática 2005 Os dados estão em quatro arquivos nos quais a primeira coluna indica o gênero (masculino ou feminino), a segunda indica o ano de nascimento e, a terceira, a nota obtida em matemática. Os nomes dos arquivos são: caest05.txt, engamb05.txt, producao05.txt e meteoro05.txt. Exemplo 4 (cont.) Vejamos separadamente os 4 histogramas resultantes. hist(cat$mat,main="Histograma das Notas de Matemática",sub="Classificados em Ciências At. E Estatística: Básico -2005”,xlab=“nota”,ylab=“Freqüência”) Exemplo 4 (cont.) hist(enam$mat,main="Histograma das Notas de Matemática", sub= "Classificados em Engenharia Ambiental - 2005", xlab="nota", ylab="frequência") Exemplo 4 (cont.) hist(met$mat,main="Histograma das Notas de Matemática", sub= "Classificados em Meteorologia - 2005",xlab="nota",ylab="frequência") Exemplo 4 (cont.) hist(eprod$mat,main="Histograma das Notas de Matemática", sub="Classificados em Engenharia de Produção - 2005", xlab= "nota",ylab="frequência") Uniformização das escalas Para construir os 4 histogramas numa única janela vamos primeiramente uniformizar as escalas. Como os dados são notas de 0 a 10, podemos começar impondo a cada gráfico o argumento xlim=c(0,10). O comando que devemos dar antes do primeiro histograma é: par(mfrow=c(2,2)), indicando que queremos os 4 histogramas dispostos em duas linhas e duas colunas. Além disso, use freq=F em cada histograma, pois os totais por amostra são diferentes e, assim trabalhamos na escala das Densidades de freqüência relativa. par(mfrow=c(2,2)) > hist(enam$mat,main="Histograma das Notas de Matemática",sub="Classificados em Engenharia Ambiental 2005",xlab="nota",ylab="frequência",xlim=c(0,10),freq=F) > hist(eprod$mat,main="Histograma das Notas de Matemática",sub="Classificados em Engenharia de Produção 2005",xlab="nota",ylab="frequência",xlim=c(0,10),freq=F) > hist(met$mat,main="Histograma das Notas de Matemática",sub="Classificados em Meteorologia - 2005",xlab="nota",ylab="frequência",xlim=c(0,10),freq=F) > hist(cat$mat,main="Histograma das Notas de Matemática",sub="Classificados em Ciências Atuariais e Estatística 2005",xlab="nota",ylab="frequência",xlim=c(0,10),freq=F) Uniformizando a escala do eixo das densidades Observe que as escalas das densidades em cada histograma ainda diferem. Inserindo ylim=c(0,0.40) em cada histograma: Comparação Comparando os histogramas, podemos claramente perceber que os candidatos ao curso de Meteorologia mostraram um desempenho inferior em Matemática, quando comparado com os outros cursos. Também podemos ver que nos demais cursos, a variação das notas é parecida com uma concentração maior nas notas de Matemática para o curso de Ciências Atuariais/Estatística:básico. Finalmente, percebe-se uma distribuição simétrica no comportamento das notas de Matemática para o curso Produção, que não ocorre para os demais. Medidas de posição: média e mediana A média é a soma dos valores observados sobre o número de observações (média aritmética). No histograma ela representa o ponto de equilíbrio. mean(cat$mat) [1] 4.78186 mean(met$mat) [1] 2.138710 mean(prod$mat) [1] 5.537074 mean(enam$mat) [1] 5.125484 Mediana A mediana de uma distribuição de valores é o valor que ocupa a posição central quando os dados estão ordenados. Exemplo: considere o conjunto cujos valores são 11,23,14,15,16,20 e 21. Valores ordenados: 11,14,15,16,20,21,23 Mediana 11,14,15,16,20,21,23 Valor que ocupa a posição central Logo, a mediana deste conjunto é 16. Calculando a medianamedian No R a função median, retorna a mediana de um conjunto de dados. > median(cat$mat) [1] 4.5 > median(met$mat) [1] 2.13 > median(prod$mat) [1] 5.5 > median(enam$mat) [1] 4.94 > mean(cat$mat) [1] 4.78186 > mean(met$mat) [1] 2.138710 > mean(prod$mat) [1] 5.537074 > mean(enam$mat) [1] 5.125484 Média e mediana no R A função que calcula a média aritmética de um vetor de dados numéricos x é mean(x). A função mean(x,trim=0.5) também serve para retornar o valor da mediana dos dados no vetor x. Mas, também podemos usar a função median(x). Data(islands): média e mediana mean(islands) produz 1252.729. median(islands) produz 41 mean(islands,trim=0.5) produz 41. Não é uma mera coincidência os dois valores acima serem iguais, pois a mediana é o valor que ocupa a posição central quando os dados estão ordenados. Média e mediana (cont.) O argumento trim na função mean tem o efeito de “aparar as pontas” quando os dados estão ordenados na fração atribuída a trim, que pode ser um valor de 0(default) até 0.5. Observe que quando trim=0.5, depois de “aparar as pontas” sobra justamente o valor que ocupa a posição central. Média versus mediana MÉDIA é mais fácil de ser manipulada algebricamente; representa o centro de massa dos dados (é o ponto de equilíbrio no histograma). É muito afetada por valores extremos (ex.: (data(islands)). MEDIANA É mais difícil de ser manipulada algebricamente; É o valor que ocupa a posição central quando os dados estão ordenados; Não é afetada por valores extremos. Média versus mediana Desta discussão, podemos observar que para distribuições muito assimétricas, a mediana é uma medida mais apropriada para caracterizar um conjunto de dados. Veja o exemplo dos dados em Islands. Um valor extremo torna a média muito alta, quando comparada aos dados do conjunto. Voltando ao exemplo dos dados Islands: 0 | 00000000000000000000000000000111111222338 2 | 07 4|5 mean(islands) produz 1252.729. 6|8 median(islands) produz 41 8|4 10 | 5 12 | 14 | 16 | 0 OUTRO EXEMPLO x<-rf(50,6,3) # x recebe 50 valores gerados pelo R, segundo a distribuição de probabilidades F de Snedecor. stem(x) 0 | 0000000000011111111111111111122222222234 0 | 5555568 1 | 13 1| 2| 2|8 Observe que neste caso mean(x)>median(x). Média versus mediana Se a distribuição é aproximadamente simétrica, então média e mediana são aproximadamente iguais. Em distribuições perfeitamente simétricas tem-se média=mediana. Moda É o valor mais freqüente da distribuição. No histograma, a classe modal é a classe de maior freqüência e a moda pode ser aproximada pelo ponto médio da classe. Moda Uma outra forma de aproximar a moda é mostrada na figura a seguir. Moda Uma distribuição pode não possuir moda (“achatada”). Uma distribuição pode possuir mais de uma moda (multimodal). Uma distribuição pode possuir apenas uma moda (unimodal). Distribuição achatada voltar Distribuição multimodal volta Distribuições unimodais Em distribuições unimodais tem-se sempre a mediana entre a média e a moda: Ou média<=mediana<=moda (assimetria negativa) ou moda<=mediana<=média (assimetria positiva) Em distribuições unimodais perfeitamente simétricas tem-se média=moda=mediana. Assimetria positiva - distribuição unimodal média>mediana>moda Assimetria negativa - distribuição unimodal média<mediana<moda Distribuição unimodal simétrica média=mediana=moda