Análise Exploratória de Dados - 2006 R - LIG-06 Objetivos da aula Apresentar um método para a determinação aproximada de quantis para dados nãoagrupados e usar a função quantile do R; definir o esquema dos cinco números e apresentar e construir um boxplot (gráficocaixa) de um conjunto de dados. Determinação dos quantis usando o R A função apropriada do R para obter os quantis de um vetor numérico x é a função quantile. Se x é o vetor contendo os dados, e desejamos determinar os três quartis, pedimos quantile(x,c(0.25,0.5,0.75)) Se desejamos o quinto e o nonagésimoquinto percentis, pedimos quantile(x,c(0.05,0.95)) Em geral, q(p) quantile(x,p), que retorna o quantil de ordem p dos dados em x. Exemplo 1: Emissão de Dióxido de Carbono Os dados no arquivo dados13bm.txt fornecem emissões de dióxido de carbono "per capita", para uma amostra de 72 países. Os dados são do ano de 1995. Fonte: Stabilizing The Atmosphere: Population, Consumption and Greenhouse Gases. Exemplo 1: Emissão de Dióxido de Carbono (cont.) Determine os três quartis, os decis, a média e o desvio-padrão das emissões registradas para os 72 países em 1995. Exemplo 1: Emissão de Dióxido de Carbono (cont.) dados<read.table(”http://www.im.ufrj.br/~flavia/aed06/dados13bm.txt",header=T) names(dados) "pais" "emissao" quantile(dados$emissao,c(0.25,0.5,0.75)) 25% 50% 75% 0.0675 0.4150 1.4725 quantile(dados$emissao,c(.1,.2,.3,.4,.5,.6,.7,.8,.9)) 10% 20% 30% 40% 50% 60% 70% 80% 90% 0.02 0.05 0.14 0.28 0.42 0.87 1.26 1.99 3.02 Histograma das emissões Observe que a distribuição de freqüências de dados sobre emissão apresenta forte assimetria positiva Observe também que há uma classe sem representantes nessa distribuição Histograma das emissões: sugerindo 10 intervalos: (0,0.33,0.67,1,1.33,1.67,2,3,4,6,10) Observe que nessa figura tem-se Q2-Q1<Q3-Q2 Q2-x(1)<<x(n)-Q2 Q1-x(1)<<x(n)-Q3 Dados não-agrupados: cálculo aproximado dos quantis Passo 1: Ordene a amostra de modo a ter as estatísticas de ordem: x(1) x( 2) ... x( n ) Considere os pontos da forma: i 0.5 ( x(i ) , pi ), com pi , i 1,..., n n Por exemplo, se n=20 i 0.5 pi , i 1,..., n n i pi 1 0.025 2 0.075 3 0.125 4 0.175 5 0.225 6 0.275 7 0.325 8 0.375 9 0.425 10 0.475 11 0.525 12 0.575 13 0.625 14 0.675 15 0.725 16 0.775 17 0.825 18 0.875 19 0.925 20 0.975 Dados não-agrupados (cont.) Passo 2: Determine i tal que: pi p pi 1 Passo 3: Obtenha a reta que passa pelos pontos: ( x(i ) , pi ) e ( x(i 1) , pi 1 ) Passo 4: Calcule a abscissa do ponto pertencente à reta obtida no passo 2, cuja ordenada é p. q ( p ) x(i ) x(i 1) x(i ) pi 1 pi ( p pi ) Exemplo Considere novamente obter uma aproximação do terceiro quartil. Observe que 54 0.5 55 0.5 0,743 0.75 0,757 tal que i 54 . 72 72 Logo, consideramos os pontos (1,45 , 53,5/72) e (1,54 , 54,5/72). x(55) x(54) A reta é obtida, e encontramos q(0,75) como 1,495 (1,54 1,45) q(0,75) 1,45 (0,75 53,5 / 72 ) 1,495 54,5 / 72 53,5 / 72 Esquema dos cinco números É uma lista de informações da distribuição que inclui cinco medidas, a saber, x(1), Q1, Q2, Q3 e x(n). Estes cinco valores são importantes para se ter uma boa idéia da assimetria dos dados. Esquema dos cinco números Para uma distribuição simétrica ou aproximadamente simétrica, deveríamos ter: (a) Q2- x(1) x(n)-Q2; (b) Q2-Q1 Q3-Q2; (c) Q1- x(1) x(n)-Q3; (d) distâncias entre mediana e Q1, mediana e Q3 menores do que distâncias entre os extremos e Q1, Q3. Histograma alisado de uma distribuição simétrica unimodal Comandos summary() e fivenum() O R possui uma função que retorna as informações do esquema dos cinco números: fivenum(x), se x é o vetor que contém os dados. Exemplo: fivenum(dados$emissao) [1] 0.000 0.065 0.415 1.495 8.440 mínimo Q1 Q2 Q3 máximo Comandos summary() e fivenum() summary(dados$emissao) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.0000 0.0675 0.4150 1.1740 1.4730 8.4400 O comando summary(x), quando x é um vetor numérico, produz as informações do esquema dos cinco números e a média. Desenho Esquemático (Box Plots) A informação contida no esquema dos cinco números pode ser traduzida graficamente num diagrama, conhecido como box plot (também chamado de gráfico-caixa). A figura a seguir, ilustra o boxplot. Boxplot O retângulo no boxplot é traçado de tal maneira que suas bases têm alturas correspondentes aos primeiro e terceiro quartis da distribuição. O retângulo é cortado por um segmento paralelo às bases, na altura correspondente ao segundo quartil. Assim, o retângulo do boxplot correponde aos 50% valores centrais da distribuição. Cosntruindo o boxplot Depois de desenhado o retângulo, traça-se um segmento paralelo ao eixo, partindo do ponto médio da base superior do retângulo até o maior valor observado que NÃO supera o valor de Q3+(1,5)DEQ. O mesmo é feito a partir do ponto médio da base inferior do retângulo, até o menor valor que NÃO é menor do que Q1-(1,5)DEQ. Fechando o boxplot As observações que estiverem acima de Q3+(1,5)DEQ ou abaixo de Q1-(1,5)DEQ são chamadas pontos exteriores e representadas por asteriscos. Essa observações destoantes das demais podem ser o que chamamos de outliers ou valores atípicos. Observações Não necessariamente haverá a presença de pontos exteriores num boxplot. Quando for este o caso, o esquema terá a seguinte aparência: A função boxplot no R Experimente pedir ao R para construir um boxplot dos dados sobre emissões de dióxido de carbono: boxplot(dados$emissao) Alguns argumentos da função boxplot Observação: é possível construir vários boxplots na mesma função. boxwex: controla a largura dos retângulos no boxplot. O default é 0.8. outline: valor lógico. Se T, os pontos exteriores são assinalados (default). Se F, os pontos exteriores não são assinalados Exemplo 2 Vamos trabalhar com os dados sobre salários para diferentes profissões/formações do conjunto dados6bm.txt. dados<-read.table(“http://www.im.ufrj.br/~flavia/aed06/dados6bm.txt”,header=T) Há quatro profissões diferentes, a saber, nivelmedio, mecanico, administrador, engeletrico. boxplot(dados[,2],dados[,3],dados[,4],dados[,5], names=c(“nivel medio”,”mecanico”,”administrador”,”eng.eletrico”)) 1 – nível médio 2 – mecânico 3 – administrador 4 – Eng. Elétrico Cores col - cor de preenchimento dos retângulos Boxplots horizontais horizontal - valor lógico, se T o boxplot fica na posição horizontal. Se F (default) fica na posição vertical. Outros argumentos ylim: controla a escala de valores main: título sub: sub-título names: vetor com os rótulos dos conjuntos de dados, quando são pedidos mais de um boxplot. pch: específica o caracter a ser usado nos pontos exteriores. Ex.: pch=“*”. Exemplo 3: No domingo, dia 4 de abril de 2004, o jornal O Globo publicou uma reportagem sobre o dinheiro da União disponível para investimentos nas prefeituras em 2004. Nesta reportagem, foram publicados os dados sobre 25 capitais, os partidos dos prefeitos destas capitais, o número de habitantes e o total em reais disponível. Exemplo 3 (cont.) Estes dados foram armazenados no arquivo dadosaula6.txt com o número de habitantes em milhares e o investimento em milhares de reais. Os nomes atribuídos às variáveis foram: cidade, partido, hab1000 e invest1000. Exemplo 3 (cont.) dados<read.table(“http://www.im.ufrj.br/~flavia/aed06/dadosaula6.txt",header=T) Construa o boxplot dos investimentos. Construa também um boxplot do número de habitantes. Olhando para a razão investimento sobre número de habitantes você diria que foi justa esta distribuição? O título da reportagem no jornal foi Aos amigos, mais da metade. Você concorda com este título? Por que? Ordenando os dados por partido: indice<-order(dados$partido) # indice é um vetor que receberá as posições da base de dados # ordenadas por partido dadosord<-dados[indice,] # dadosord receberá toda a informação de dados, só que agora # suas linhas estão ordenadas por partido Depois de ordenar os dados por partido em dadosord, é possível ver que de 1 a 17 tem-se outros partidos e de 18 a 25 tem-se o PT. CÁLCULO DOS PERCENTUAIS INVESTIDOS EM CAPITAIS DO PT E DE OUTROS PARTIDOS EM RELAÇÃO AO TOTAL DE INVESTIMENTOS: resumo<-matrix(0,2) #variável que vai receber o total # de investimentos, na posição 1: outros partidos # na posição 2: PT resumo[1]<-sum(dadosord$invest1000[1:17]) resumo[2]<-sum(dadosord$invest1000[18:25]) total<-resumo[1]+resumo[2] parcial<-matrix(0,2)#variável que vai receber o percentual # de investimentos, na posição 1: outros partidos # na posição 2: PT parcial<-resumo/total Resultado parcial [1] 0.4077745 0.5922255