500 likes | 653 Views
Análise Exploratória de Dados 2006/1. Aula lig-02 Variáveis Qualitativas. Exemplo 1: Tipo Sangüíneo. Registrou-se o tipo sangüíneo de 40 doadores voluntários de sangue em um dia. Os dados estão no arquivo tiposangue.txt.
E N D
Análise Exploratória de Dados 2006/1 Aula lig-02 Variáveis Qualitativas
Exemplo 1: Tipo Sangüíneo • Registrou-se o tipo sangüíneo de 40 doadores voluntários de sangue em um dia. • Os dados estão no arquivo tiposangue.txt. • Esta base de dados é univariada. Podemos, portanto, usar o comando scan.
Exemplo 1: (continuação) • dados<-scan(“m:\\aed\\tiposangue.txt”,what=“character”) • O argumento what=“character”, no comando acima, serve para informar que o tipo de informação que será lida são caracteres não-numéricos. • Problema: Descrever estes dados numa tabela de freqüências e representá-los graficamente usando o R.
Exemplo 1: (continuação) • > dados • [1] "O" "O" "A" "B" "A" "O" "A" "A" "A" "O" "B" "O" "B" "O" "O" • [16] "A" "O" "O" "A" "A" "A" "A" "AB" "A" "B" "A" "A" "O" "O" "A" • [31] "O" "O" "A" "A" "A" "O" "A" "O" "O" "AB"
Comando sort • Você pode ordenar a informação na base dados usando o comandosort que rearruma as informações de maneira ordenada. No caso destes dados ele usa a ordem alfabética como chave. • Você ainda pode escolher se deseja ordem crescente (default) ou decrescente, acrescentando o argumento decreasing=T. • sort(dados) [1] "A" "A" "A" "A" "A" "A" "A" "A" "A" "A" "A" "A" "A" "A" "A" [16] "A" "A" "A" "AB" "AB" "B" "B" "B" "B" "O" "O" "O" "O" "O" "O" [31] "O" "O" "O" "O" "O" "O" "O" "O""O" "O"
Comando table • Os conjunto de dados que estamos trabalhando é de tamanho pequeno, e com o auxílio do comando sort poderíamos perfeitamente contar os casos de cada tipo possível de resposta. • Porém, esta solução não é razoável se nosso conjunto de dados for de tamanho médio ou grande. • O comando table resolve este problema para qualquer tamanho de conjunto de dados.
Comando table dados A AB B O 18 2 4 16 • > table(dados) Freqüências absolutas Freqüências relativas: table(dados)/sum(table(dados)) dados A AB B O 0.45 0.05 0.10 0.40 Porcentagens: table(dados)*100/sum(table(dados)) dados A AB B O 45.0 5.0 10.0 40.0
Gráfico de Setores • Veremos agora como construir um gráfico de setores para estes dados. • O comando pie(table(dados)) produzirá um gráfico de setores caracterizando a distribuição de freqüências das respostas em dados.
Detalhes do comando pie • Podemos configurar alguns detalhes no gráfico anterior como cores, títulos e legendas. • Vamos usar o help para saber como realizar estas configurações. help(pie).
Detalhes do comando pie (cont.) pie package:base R Documentation Pie Charts (Gráfico de setores) Descrição: Desenha um gráfico de setores. Uso: pie(x, labels = names(x), edges = 200, radius = 0.8, density = NULL, angle = 45, col = NULL, border = NULL, lty = NULL, main = NULL, ...) Argumentos: 1. x: um vetor de quantidades positivas. Os valores em 'x' representam a proporção das áreas dos setores no gráfico. (OBRIGATÓRIO.) 2. labels: um vetor de caracteres fornecendo nomes para os setores. (Não é obrigatório.) 3. edges: um inteiro. A linha do círculo é aproximada por um polígono com este número de lados. 4. radius: o gráfico é desenhado centrado num quadrado cujos lados variam de -1 à 1. Se os rótulos dos setores forem longos pode ser necessário usar um raio menor. (default: radius=0.8).
Detalhes do comando pie (cont.) 5. col: um vetor de cores a serem usadas no preenchimento dos setores. Se ausente, será usado um conjunto de cores pastéis. 6. main: Título para o gráfico. A função colors() lista o nome das 657 cores possíveis: (exemplos) "white" "aliceblue" "antiquewhite" "antiquewhite1" "antiquewhite2" "aquamarine" "aquamarine1" "aquamarine2” "azure" "azure4" "beige" "bisque" "black" "blanchedalmond" "blue" "blue1" "blueviolet" "brown" "burlywood" "cadetblue" "chartreuse" "chocolate" "coral" "cornflowerblue" "cornsilk" "cyan" "darkblue" "darkcyan" "darkgoldenrod" "gray" "thistle" "tomato" "turquoise" "violet" "yellowgreen"
Alguns exemplos: pie pie(table(dados),col=c("yellow","red","green","blue"), main="Distribuição de freqüências de tipo sangüíneo")
Alguns exemplos: pie pie(table(dados),col = gray(seq(0.4,1.0,length=4)), main="Distribuição de freqüências de tipo sangüíneo")
Alguns exemplos: pie pie(table(dados),density = 10, angle = 15 + 40 * 1:4, main="Distribuição de freqüências de tipo sangüíneo")
Alguns comentários: pie O gráfico de setores é uma forma muito ruim de dispor informações! O olho é bom em julgar medidas lineares e ruim em julgar áreas relativas. Um gráfico de barras ou um diagrama de pontos são formas preferíveis de dispor este tipo de dado. Cleveland (1985): ”Dados que podem ser mostrados por um gráfico de setores sempre podem ser mostrados por um gráfico de barras ou um diagrama de pontos. Isto significa que julgamentos da posição em meio a uma escala comum podem ser feitos em vez de julgamentos menos acurados via ângulos dos setores.”
Gráfico de barras • Comando barplot • Produz um gráfico de barras da distribuição de freqüências de alguma variável. • Argumento obrigatório: height - vetor (ou matriz) contendo as freqüências, absolutas ou relativas, dos `valores’ possíveis. Se height for uma matriz, cada coluna desta matriz será olhada como uma distribuição de freqüências.
Gráfico de barras (exemplo) • barplot(table(dados),col=“blue”,main= “Distribuição de freqüências de Tipo Sangüíneo”)
Detalhes do comando barplot • Se 'height' é um vetor, o gráfico consiste de uma seqüência de barras retangulares com alturas dadas pelos valores no vetor. • Se 'height' é uma matriz e o argumento 'beside=F’, então cada barra do gráfico corresponderá a uma coluna da matriz 'height', com os valores na coluna correspondendo às alturas das "sub-barras" que compõem a barra. (default) • Se ‘height' é uma matriz e 'beside=T', então os valores em cada coluna ficarão justapostos em vez de ‘empilhados’.
Exemplo 2: Tipo sangüíneo para 4 amostras Suponha que em vez de uma única amostra, observamos a variável tipo sangüíneo em 4 amostras de diferentes regiões, obtendo para os sangues tipo O, A, AB e B, nesta ordem, as seguintes freqüências: amostra 1) 15, 12, 10, 5 amostra 2) 25, 23, 12, 8 amostra 3) 14, 12, 8, 6 amostra 4) 12, 20, 5, 10
Exemplo 2 (continuação) Podemos construir a matriz ‘height’ onde cada coluna representará uma distribuição: x<-matrix(0,4,4) - constrói uma matriz nula 4x4 x[,1]<-c(15,12,10,5) # atribui os valores da coluna 1 de x x[,2]<-c(25,23,12,8) # atribui os valores da coluna 2 de x x[,3]<-c(14,12,8,6) # atribui os valores da coluna 3 de x x[,4]<-c(12,20,5,10) # atribui os valores da coluna 4 de x
Exemplo 2 (continuação) barplot(x,beside=F)
Exemplo 2 (continuação) Observe que como cada amostra conta com um número diferente de observações, este gráfico ainda precisa ser melhorado se queremos comparar as diferentes amostras. A sugestão aqui é uniformizar a escala, trabalhando com freqüências relativas. x[,1]<-x[,1]/sum(x[,1]) x[,2]<-x[,2]/sum(x[,2]) x[,3]<-x[,3]/sum(x[,3]) x[,4]<-x[,4]/sum(x[,4]) ou for (i in 1:4) {x[,i]<-x[,i]/sum(x[,i]) }
Exemplo 2 (continuação) barplot(x,beside=F)
Exemplo 2 (continuação) barplot(x,beside=T)
Barplot: mais detalhes • Argumento main - aqui também é usado para inserir um título: barplot(x,main=“Título”,sub=“sub-título”) • Argumentos xlab e ylab - rótulos para os eixos do gráfico. barplot(x,main=“Título”,sub=“sub-título”,ylab=“freq. rel.”,xlab=“rótulo para o eixo Ox”) • Argumento names.arg - vetor que cria rótulos para cada uma das amostras. barplot(x,main=“Título”,sub=“sub-título”,ylab=“freq. rel.”,xlab=“nome”,names.arg=c(“amostra 1”,”amostra 2”, “amostra 3”,”amostra 4”))
barplot(x,beside=T,names.arg=c("amostra 1","amostra 2","amostra 3","amostra 4"), main="Distribuição de freqüências de tipo sangüíneo",ylab="freq. relativa", xlab="rótulo para o eixo horizontal")
Barplot:legenda • Só está faltando uma legenda para saber que cor corresponde a cada tipo sangüíneo. • Argumento: legend.text - vetor contendo a legenda. barplot(x,main=“Título”,sub=“sub-título”,ylab=“freq. rel.”, xlab=“nome”,names.arg=c(“amostra 1”,”amostra 2”, “amostra 3”,”amostra 4”), legend.text=c(“O”,”A”, “AB”,”B “))
Outros argumentos de barplot • width - vetor opcional com a largura das barras; • space - quantidade de espaço à esquerda antes de cada barra. Pode ser fornecido como um único número ou um número por barra. • Se 'height' é uma matriz e 'beside=T’, 'space' pode ser especificado por dois números, onde o primeiro é o espaço entre barras no mesmo grupo, e o segundo é o espaço entre os grupos. • Se não é fornecido explicitamente, seu default é 'c(0,1)' se 'height’ é uma matriz e 'beside=T’, e 0.2, caso contrário.
Gráfico usando o argumento space=c(1,3)
Outros argumentos de barplot • horiz: um valor lógico. • Se ’horiz=F', as barras são desenhadas verticalmente com a primeira barra à esquerda. • Se ’horiz=T', as barras são desenhadas horizontalmente com a primeira barra em baixo. • Default: horiz=F
Argumento horiz=T, xlab=“freq. relativa”, ylab=“”, sub=“”
Outros argumentos de barplot • col - vetor informando as cores das barras. • border - cor das bordas da barra. Inserindo o argumentos: col=c(“blue”,”violetblue”,”green”,”palegreen”), border=“red” e retirando horiz=T e space=c(1,3)
Modificando a escala de cinza col = gray(seq(0.4,1.0,length=4))
Barras tracejadas density = 10, angle = 15 + 30 * 1:4
Outros argumentos... • Há uma série de outras possibilidades. • Sugerimos que elas sejam exploradas por vocês quando estiverem usando o R.
Atividade 1: classes sociais • Saiu, publicada no jornal O Globo de 20 de março de 2005, uma matéria de capa cujo título foi: “Pesquisa mostra que o Brasil é classe C”. • “Mapeamento inédito sobre o poder de compra das classes sociais brasileiras, feito pela Fundação Getúlio Vargas, mostra que 5,8 milhões das famílias estão na classe C e ganham entre R$1157 e R$2039.”
Classes sociais no Brasil • “Outras 4,6 milhões são consideradas classe D.” • “Duas a cada três famílias nos 83 maiores municípios do país estão nas faixas de renda média e baixa.” • “O topo da pirâmide tem apenas 27mil domicílios.”
Renda familiar média Fonte: O Globo, 20/03/2005 (FGV)
Gráfico de Barras das classes sociais • Os dados da tabela anterior foram armazenados no arquivo classes.txt com 10 linhas (a primeira com o nome da informação, a saber, classe, brasil, rj, sp e df) e 5 colunas. dados<-read.table(“m:\\aed\\classes.txt”,header=T)
Construindo a matriz de dados para o gráfico simultâneo das distribuições: dad<-matrix(0,9,4) # dad recebe uma matriz nula 9 por 4 dad[,1]<-dados[,2] # coluna 1 de dad recebe porcentagens do Brasil dad[,2]<-dados[,3] # coluna 2 de dad recebe porcentagens do Rio dad[,3]<-dados[,4] # coluna 3 de dad recebe porcentagens doe Sampa dad[,4]<-dados[,5] # coluna 4 de dad recebe porcentagens do DF barplot(dad,names.arg=c("Brasil","RJ","SP","DF"), legend.text=c("A","A1","A2","B1","B2","C1","C2","D","E"))
Distribuição percentual das famílias por classes sociais segundo a região barplot(dad,names.arg=c("Brasil","RJ","SP","DF"), legend.text=c("A","A1","A2","B1","B2","C1","C2","D","E"), col = gray(seq(0.0,1.0,length=9)))
Agrupando classes: A, B, D, D e E Como vocês podem perceber, o gráfico anterior não ficou muito bom, pois há um número de classes razoável. Uma forma de melhorar a visualização da distribuição de classes é reduzir de 9 para 5 classes, juntando as classes A, A1, A2 em A, B1 e B2 em B e C1 e C2 em C e, depois reconstruir o gráfico de barras simultâneo para todas as áreas. Essa tarefa será deixada como um exercício!
Gráfico da distribuição de freqüências das classes sociais, agrupando as classes C e D:
scan (para ler dados) what (parâmetro do scan) sort (ordenação) table (tabulação) sum (soma) pie (gráfico de setores) ver argumentos possíveis para pie barplot (gráfico de barras) ver argumentos possíveis para barplot Argumentos comuns: main - título col - cores para os atributos Principais comandos da aula