RparaCS-260611

download RparaCS-260611

of 124

Transcript of RparaCS-260611

R para cientistas sociais

Jakson Alves de AquinoU NIVERSIDADE F EDERAL DO C EAR [email protected]

Fortaleza - CE 26 de junho de 2011

Sumrio1 2 Apresentao Primeiros passos 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 3 Apresentao do R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Iniciando e nalizando o R . . . . . . . . . . . . . . . . . . . . . . . . . . . . Obtendo ajuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Criando, destruindo, salvando objetos . . . . . . . . . . . . . . . . . . . . . . Tipos de variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores matemticos e lgicos . . . . . . . . . . . . . . . . . . . . . . . . Usando um editor de textos . . . . . . . . . . . . . . . . . . . . . . . . . . . . Milhares de funes em milhares de pacotes . . . . . . . . . . . . . . . . . . . 9 11 11 11 12 14 17 17 19 19 21 21 21 23 24 26 27 28 29 30 33 33 35 35 37

Vetores, matrizes, listas 3.1 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.2 3.3 Criando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nomeando elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . Obtendo informaes . . . . . . . . . . . . . . . . . . . . . . . . . . . Convertendo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ndices: obtendo e modicando valores . . . . . . . . . . . . . . . . . Operaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

Carregar banco de dados existente 4.1 4.2 4.3 4.4 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arquivos sav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arquivos csv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arquivos xls, ods e mdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 4.5 4.6

SUMRIO Arquivo com colunas de largura xa . . . . . . . . . . . . . . . . . . . . . . . Soluo de problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5 4.6.6 4.6.7 4.6.8 Variveis com letras maisculas nos nomes . . . . . . . . . . . . . . . Espaos excedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . Necessidade de codicar variveis . . . . . . . . . . . . . . . . . . . . Codicao de caracteres errada . . . . . . . . . . . . . . . . . . . . . Converso entre numeric, factor e character . . . . . . . . . . . . . . . Converso de datas . . . . . . . . . . . . . . . . . . . . . . . . . . . . Carregar bancos de grandes dimenses . . . . . . . . . . . . . . . . . Variveis categricas de arquivo sav lidas incorretamente . . . . . . . . 38 39 40 40 41 41 42 42 43 44 45 45 47 48 48 52 53 53 54 54 55 57 57 58 60 62 65 68 71 71 72 75

5

Manipulando bancos de dados 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 Visualizao dos dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Extrair subconjunto dos dados . . . . . . . . . . . . . . . . . . . . . . . . . . Ordenar um banco de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . Visualizao grca de variveis . . . . . . . . . . . . . . . . . . . . . . . . . Recodicar variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Criar varivel categrica a partir de varivel numrica . . . . . . . . . . . . . . Apagar variveis existentes e acrescentar novas . . . . . . . . . . . . . . . . . Reunir dois bancos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . Reformatar banco de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.10 Atributos de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Anlise descritiva 6.1 6.2 6.3 6.4 6.5 6.6 7 Anexar variveis de um banco de dados rea de trabalho . . . . . . . . . . . Construo de ndices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uma varivel numrica e outra categrica . . . . . . . . . . . . . . . . . . . . Duas variveis categricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . Duas variveis numricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sries temporais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Qui-quadrado e regresso 7.1 7.2 7.3 Qui-Quadrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Regresso linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Procedimento step wise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

SUMRIO 7.4 8 Regresso logstica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 77 79 80 80 81 83 86 89 89 90 91 92 92 95 95 97 98 98 99

Grcos 8.1 8.2 8.3 8.4 8.5 Ttulo, subttulo e rtulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adicionar pontos, linhas, polgonos, textos . . . . . . . . . . . . . . . . . . . . Parmetros globais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Legendas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

Produo de relatrios 9.1 9.2 9.3 9.4 9.5 Resultado em texto plano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mapa de bits versus grco vetorial . . . . . . . . . . . . . . . . . . . . . . . Insero de grcos em relatrios . . . . . . . . . . . . . . . . . . . . . . . .A LTEX, R and Sweave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

odfWeave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10 Tpicos em programao 10.1 Manipulao de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2 Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3 Blocos entre chaves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4 Execuo condicional de cdigo . . . . . . . . . . . . . . . . . . . . . . . . . 10.5 Famlia de funes apply . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10.6 strsplit(), unlist() e do.call() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 10.7 Loops for e while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 11 Mapas 12 Anlise de redes sociais Glossrio ndice Remissivo Referncias Bibliogrcas 105 109 117 119 123

4

SUMRIO

Lista de Figuras4.1 5.1 5.2 5.3 5.4 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 Exemplo de banco de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . Eleitos e no eleitos para o Senado em 2006 . . . . . . . . . . . . . . . . . . . Diagrama em caixa explicado . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo de histograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo de histograma melhorado . . . . . . . . . . . . . . . . . . . . . . . . rea de trabalho antes e depois de attach(b) . . . . . . . . . . . . . . . . . Diagramas em caixa: percepo da corrupo segundo a Regio . . . . . . . . Grco de densidade condicional: regies segundo a percepo de corrupo . Grco mosaico: religio e sexo do indivduo . . . . . . . . . . . . . . . . . . Grco mosaico: religio e sexo do indivduo (II) . . . . . . . . . . . . . . . . Grco de interao: sexo, escolaridade e votos vlidos . . . . . . . . . . . . . Diagrama de disperso: votao segundo os gastos de campanha . . . . . . . . Diagramas em caixa: votao segundo os gastos de campanha . . . . . . . . . Grco mosaico: votao segundo os gastos de campanha . . . . . . . . . . . 33 49 50 50 51 57 61 62 63 64 65 66 67 68 69 69 73 75 82 85 86 87 90

6.10 Sries temporais: latrocnios e furtos em So Paulo . . . . . . . . . . . . . . . 6.11 Sries temporais: latrocnios e furtos em So Paulo (II) . . . . . . . . . . . . . 7.1 7.2 8.1 8.2 8.3 8.4 9.1 Correlao entre duas variveis numricas . . . . . . . . . . . . . . . . . . . . Grcos de diagnstico de um modelo de regresso . . . . . . . . . . . . . . . Ferramentas de desenho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Grco de barras de varivel com rtulos longos . . . . . . . . . . . . . . . . . Grco de barras de varivel com rtulos longos (II) . . . . . . . . . . . . . . Exemplos de legendas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo de Bitmap em tamanho natural e ampliado . . . . . . . . . . . . . . .

11.1 Exemplo de mapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 5

6

LISTA DE FIGURAS 11.2 Exemplo de mapa (II) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 11.3 Mapa do Nordeste do Brasil . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 12.1 Sociograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 12.2 Sociogramas dos graus de centralidade e intermediao . . . . . . . . . . . . . 112 12.3 Sociogramas dos graus de centralidade . . . . . . . . . . . . . . . . . . . . . . 113 12.4 Identicao de grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

Lista de Tabelas2.1 2.2 2.3 2.4 6.1 Localizao de pastas no Linux . . . . . . . . . . . . . . . . . . . . . . . . . . Localizao de pastas no Windows XP . . . . . . . . . . . . . . . . . . . . . . Localizao de pastas no Windows Vista/7 . . . . . . . . . . . . . . . . . . . . Operadores matemticos e lgicos . . . . . . . . . . . . . . . . . . . . . . . . Algumas variveis da PESB 2002 e seus respectivos rtulos . . . . . . . . . . . 16 16 16 18 58

7

8

LISTA DE TABELAS

Captulo 1 ApresentaoO R um software livre de estatstica que funciona em diversos sistemas operacionais: GNU Linux, Microsoft Windows, Mac OS X e outros. O aprendizado do R difcil no incio devido necessidade de se adaptar sua lgica de funcionamento, se acostumar com a estrutura dos seus arquivos de ajuda e memorizar alguns comandos bsicos. preciso bastante perseverana e motivao para aprender os comandos bsicos e disposio para ler as pginas de ajuda e os manuais. Entretanto, depois de um certo tempo, ele possibilita que se trabalhe com grande produtividade e, o que mais importante, eccia. No encontrei textos semelhantes em portugus e nem mesmo em ingls. H um livro em francs, disponvel na internet, intitulado R pour les sociologues, de Barnier (2008). Este livro deve ser lido de uma maneira que no habitual para cientistas sociais. No basta fazer uma ou duas leituras, reetir e discutir sobre o assunto com os colegas. preciso fazer uma leitura no apenas reproduzindo os comandos no R, mas imaginando e testando alteraes nos comandos para comparar com os resultados originais. Em seguida, preciso enfrentar alguma situao real de pesquisa e reler as sees que trazem solues para os problemas que forem surgindo. Muitas vezes, entretanto, a soluo estar no uso criativo dos comandos vistos ao longo do livro e no em uma seo especca. Alm disso, o leitor deve sempre ler o arquivo de ajuda de cada funo porque a maioria delas possui argumentos adicionais que no utilizaremos neste livro mas so teis em situaes diversas. A minha pretenso com este livro no era de escrever um manual completo de uso do R, mas apenas, em meio multiplicidade de pacotes e funes disponveis para o R, indicar caminhos a seguir. Ao longo do texto, fao referncia a programas de escritrio do BrOfce ou LibreOfce, mas as informaes, com alguns ajustes, tambm so vlidas para os programas da Microsoft, que, atualmente, possuem uma maior fatia do mercado. Assim, instrues dirigidas a usurios do LibreOfce Writer podem ser seguidas, sem muitas diculdades, por usurios do Microsoft Word e as informaes referentes ao LibreOfce Calc so geralmente vlidas para o Microsoft Excel. O livro foi escrito e o cdigo foi testado em ambiente Linux, mas o funcionamento do R praticamente igual em todas as plataformas e, portanto, isso no dever ser motivo de diculdade adicional para usurios de outros sistemas operacionais. Sou grato aos alunos de Cincias Sociais do Departamento de Cincias que no segundo semestre de 2009 embarcaram na aventura de fazer uma disciplina cujo livro didtico estava comeando a ser escrito, em especial monitora da disciplina, Gabriella Maria Lima Bezerra, que encontrou vrias passagens pouco claras ao longo do texto. Sou grato tambm a Milton

9

10

CAPTULO 1. APRESENTAO

(milton ruser) por vrias sugestes de melhoria nos grcos.

Captulo 2 Primeiros passos2.1 Apresentao do R

O R possui uma enorme quantidade de procedimentos estatsticos em milhares de pacotes livremente disponveis na internet e que podem ser carregados opcionalmente. Softwares comerciais com interface grca so usualmente mais fceis de usar, mas possuem apenas algumas dezenas de funes acessveis com o mouse, sendo preciso comprar mdulos adicionais para executar funes extras. Com o R, possvel criar e manter disponveis na rea de trabalho vrios tipos de objetos. Isso permite grande exibilidade e rapidez, mas tem um preo: todos os objetos cam carregados na memria e algumas operaes realizam a criao automtica de vrios objetos, tornando mais complexa a tarefa de se trabalhar com bancos de dados muito grandes. Existem dezenas de interfaces para o R. Algumas exigem a memorizao de numerosos comandos; outras oferecem uma interface com vrios botes e itens de menu clicveis. Algumas funcionam apenas no Linux, no Windows ou no OS X; outras funcionam nos trs sistemas operacionais. Algumas funcionam bem num dos sistemas operacionais e so problemticos nos demais. Algumas so fceis de instalar e no exigem nenhuma congurao especial; outras, para funcionar, precisam ser cuidadosamente congurados. Em todos os casos, o procedimento bsico consiste em editar o cdigo no editor e enviar os comandos para o console do R. Caber ao leitor experimentar vrias opes e escolher a que melhor se adequar ao seu estilo de trabalho e necessidades. No momento em que este livro era escrito, algumas opes de editores de texto ou ambiente integrado de desenvolvimento eram: RStudio, Tinn-R, Eclipse com plugin StatET, RKward, GEdit com plugin rgedit, JGR, Vim com o plugin vim-r-plugin, e Emacs com ESS. Os dois ltimos, Vim e Emacs, so de uso mais complexo, sendo preciso dedicar algum tempo aprendizagem de seus comandos mas, em compensao, dominados os comandos bsicos, a edio de cdigo poder ser mais produtiva do que com as outras opes.

2.2

Iniciando e nalizando o R

No Linux, o R pode ser iniciado num terminal, digitando-se a letra R e pressionando Enter . O R um programa de linha de comando, ou seja, aberto o R, precisamos digitar algum texto no console e pressionar a tecla Enter para enviar a linha para o interpretador do R. Todos as funes terminam com (). Quando quiser fechar o R, utilize a funo quit(). O 11

12

CAPTULO 2. PRIMEIROS PASSOS

R lhe perguntar se quer salvar a rea de trabalho. Escolha sim se quiser continuar o trabalho da prxima vez que abrir o R na mesma pasta. Os objetos criados sero salvos no arquivo .RData e o histrico de todos os comandos digitados no arquivo .Rhistory. Se quiser sair sem salvar a rea de trabalho e o histrico, escolha no. O comando quit() possui uma verso mais curta q():> q()

Neste livro, os comandos a serem digitados no console do R esto precedidos por > . Se um comando for muito longo e precisar de mais de uma linha para ser exibido, a segunda e as demais linhas sero precedidas pelo smbolo +. Se o leitor estiver copiando os comandos deste livro, dever excluir esses smbolos do cdigo copiado. A maioria das funes pode receber um ou mais argumentos para execuo. A funo q(), por exemplo, pode receber o argumento save de modo que pode-se executar:> q(save = "no")

Com o comando executado desta forma, estamos dizendo ao R que ele deve sair e que o valor do argumento save no, ou seja, estamos dizendo que no queremos salvar os objetos da rea de trabalho.

2.3

Obtendo ajuda

O manual completo do R e dos pacotes adicionais instalados pode ser acessado com a funo help.start(). Mas h vrias outras formas de se obter ajuda no uso do R. Uma delas pela chamada funo args(), que lista os argumentos recebidos por uma funo, como no exemplo abaixo:> args(quit) function (save = "default", status = 0, runLast = TRUE) NULL

O comando args(quit) nos informa que quit() uma funo que recebe como argumentos, a informao se a rea de trabalho deve ou no ser salva, qual valor o R deve retornar para o sistema (0 signica nenhum problema) e se a funo .Last() deve ser executada. Cada argumento separado do outro por uma vrgula. Alguns argumentos de alguns comandos so opcionais; outros so obrigatrios e, se no forem fornecidos, os comandos no funcionaro. Em alguns casos, os argumentos possuem valores pr-denidos que sero utilizado se no indicarmos explicitamente algo diferente; em outros, os argumentos no possuem valores prdenidos e a funo ter um comportamento diferente com e sem a presena dos argumentos. No caso da funo args(), o argumento package ter valor nulo (NULL) se no for fornecido explicitamente. Raramente possvel saber quais argumentos so obrigatrios e quais so opcionais apenas observando o resultado de args(). No caso, o nico argumento obrigatrio o primeiro. Os parmetros que no tm algum valor atribudo so reconhecidos pelo R pela posio em que se encontram na lista de argumentos. No caso da funo args(), o argumento topic o nico que no tem valor pr-denido e deve ser o primeiro a ser fornecido. A presena de . . . na lista de argumentos de algumas funes signica que a funo chamar alguma outra durante a sua execuo e os argumentos fornecidos que no forem reconhecidos como prprios da funo chamada sero repassados para a segunda funo.

2.3. OBTENDO AJUDA

13

A funo args() til quando j conhecemos a funo e precisamos apenas de uma ajuda para lembrar dos seus argumentos. Se precisarmos saber o signicado de cada argumento, o tipo de objeto retornado pela funo, e maiores detalhes sobre o seu uso, usamos a funo help() ou, na sua verso mais sucinta, ?:> help(demo) > ?quit

Quando no lembramos do nome exato de uma funo, podemos obter uma lista de todos as funes existentes que tenham um determinado texto como parte de seu nome com a funo apropos():> apropos("csv") [1] "read.csv" "read.csv2"

"write.csv"

"write.csv2"

Se realmente no conhecemos a funo que precisamos, podemos fazer uma busca de texto mais completa, no nome da funo e na sua descrio, usando help.search() ou sua forma abreviada, ??:> help.search("install") > ??network

Se isso no for suciente para localizar o comando que precisamos, a penltima opo ser fazer uma busca na internet. Isso pode ser feito a partir do prprio R se o computador estiver conectado internet:> RSiteSearch("social network analysis")

O arquivo de ajuda de algumas funes inclui uma seo de exemplos. Para que esses exemplos sejam executados automaticamente, utilize a funo example(), fornecendo como argumento o nome da funo cujos exemplos se deseja ver, como abaixo:> example("ls")

Por m, alguns pacotes incluem cdigos de demonstrao, como a prpria mensagem de saudao do R informa. Digite demo() para obter uma lista dos cdigos de demonstrao disponveis. Se, por exemplo, quiser ver demonstraes de grcos, digite:> demo("graphics")

Como o leitor j percebeu, uma limitao do sistema de ajuda do R que todos os termos de busca devem ser digitados em ingls. A ltima opo ser pedir ajuda em algum frum ou lista de discusso sobre R. Se resolver fazer isso, procure fornecer algum cdigo ilustrando o seu problema e algumas informaes sobre o seu sistema se desconar que o problema pode ser especco da sua verso do R ou do sistema operacional. Para tanto, o comando sessionInfo() poder ser til:1> sessionInfo() Os interessados em assinar a Lista Brasileira do R devem acessar https://listas.inf.ufpr.br/ cgi-bin/mailman/listinfo/r-br.1

14R version 2.13.0 (2011-04-13) Platform: x86_64-pc-linux-gnu (64-bit) locale: [1] LC_CTYPE=pt_BR.UTF-8 [3] LC_TIME=pt_BR.UTF-8 [5] LC_MONETARY=C [7] LC_PAPER=pt_BR.UTF-8 [9] LC_ADDRESS=C [11] LC_MEASUREMENT=pt_BR.UTF-8

CAPTULO 2. PRIMEIROS PASSOS

LC_NUMERIC=C LC_COLLATE=pt_BR.UTF-8 LC_MESSAGES=pt_BR.UTF-8 LC_NAME=C LC_TELEPHONE=C LC_IDENTIFICATION=C

attached base packages: [1] stats graphics grDevices utils

datasets

methods

base

2.4

Criando, destruindo, salvando objetos

Objetos so criados no R por meio do smbolo de atribuio x ls() [1] "x"

O comando print() imprime o objeto que lhe for passado como parmetro, mas se simplesmente digitarmos o nome do objeto e pressionarmos Enter obteremos o mesmo resultado porque o comportamento padro do R chamar a funo print() quando lhe passado o nome de um objeto pela linha de comando:> print(x) [1] 3.141593 > x [1] 3.141593

A vantagem de usar o comando print() explicitamente a possibilidade de personalizar o resultado, usando, por exemplo, o parmetro digits para imprimir um valor numrico com uma quantidade especicada de dgitos:> print(x, digits = 3) [1] 3.14

Observe que o resultado do comando print() acima, chamado implcita ou explicitamente, tem sempre adicionado [1] antes do valor de x. Isso ocorre porque o R sempre cria vetores e o objeto x um vetor de comprimento 1. O nmero 1 entre colchetes indica o ndice inicial do vetor numrico x. Para criar uma sequncia de nmeros, podemos usar o operador :, como abaixo:> x x

2.4. CRIANDO, DESTRUINDO, SALVANDO OBJETOS[1] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [24] 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 [47] 51 52 53 54 55 56 57 58 59 60

15

O antigo objeto x foi destrudo e o novo objeto um vetor com 60 algarismos. A coluna de nmeros entre colchetes indica qual o ndice do primeiro nmero da linha. Uma dica importante a de sempre usar a tecla Tab para completar o nome de objetos e de arquivos existentes no disco. Este procedimento acelera e evita erros na digitao dos comandos. Experimente digitar let Tab Enter . O resultado dever ser:> letters [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" [18] "r" "s" "t" "u" "v" "w" "x" "y" "z"

Outra dica importante usar as setas e sempre que precisar corrigir e reenviar comandos j digitados. Para salvar um objeto, usamos a funo save(), fornecendo como parmetros os objetos a serem salvos e o nome do arquivo. Por conveno, objetos do R so salvos com a extenso RData. Assim, para salvarmos o nosso objeto x, mas note que o R no adiciona a extenso automaticamente. Precisamos digit-la explicitamente:> save(x, file = "x.RData")

Para carregar na rea de trabalho um objeto salvo anteriormente com o comando save(), usamos load():> load("x.RData")

Como em muitos comandos do R, se no houver nenhum erro na execuo, nenhuma mensagem impressa na tela, mas, a funo load() retorna invisivelmente um vetor de caracteres com os nomes dos objetos presentes na rea de trabalho carregada. Para vermos essa lista, podemos usar a funo print() para imprimir na tela o resultado da funo load():> print(load("x.RData")) [1] "x"

Os objetos sero salvos na pasta de trabalho atual. Para saber em qual pasta o R est atualmente procurando e salvando arquivos e para saber quais os arquivos e pastas esto nesta pasta, digite:> getwd() > dir()

getwd() uma forma abreviada de dizer get working directory (me diga qual a pasta de trabalho atual). Para congurar uma pasta diferente deve-se usar setwd(). As tabelas 2.1, 2.2 e 2.3 listam trs importantes pastas do Linux, do Windows XP e Windows Vista ou 7, o que deve facilitar o uso de setwd() por aqueles pouco familiarizados com a visualizao do sistema de arquivos em modo texto. Nas duas tabelas, supe-se a existncia de um usurio chamado estudante.

16

CAPTULO 2. PRIMEIROS PASSOS Tabela 2.1: Localizao de pastas no Linux Nome fantasia Localizao real Pasta pessoal /home/estudante ou ~/ rea de trabalho /home/estudante/Desktop Pendrive /media/RotuloDoPendrive

Tabela 2.2: Localizao de pastas no Windows XP Nome fantasia Pasta pessoal Localizao real C:/Documents and Settings/estudante/Meus documentos ou ~/ rea de trabalho C:/Documents and Settings/estudante/Desktop ou ~/../Desktop Pendrive F:/ (ou outra letra)

Tabela 2.3: Localizao de pastas no Windows Vista/7 Nome fantasia Localizao real Pasta pessoal C:/Users/estudante/Meus documentos ou ~/ rea de trabalho C:/Users/estudante/Desktop ou ~/../Desktop Pendrive F:/ (ou outra letra)

Tanto no Linux quanto no Windows a pasta pessoal pode ser abreviada pelo smbolo ~. Para saber qual pasta o R considera como pasta pessoal no seu sistema operacional digite:> setwd("~") > getwd()

Embora no Windows seja geralmente usada uma barra invertida, \ para delimitar pastas e arquivos, no R o uso da barra normal, / recomendado porque com ela possvel usar a tecla Tab para completar nomes de arquivos e os scripts caro mais facilmente portveis de um sistema operacional para outro. Note, entretanto, que os nomes de arquivos e pastas no ser mais completado aps a ocorrncia de algum espao em branco no nome de uma pasta. Por isso, recomendvel que se evite o uso de espaos em branco ao nomear arquivos e pastas a serem usados com o R. Ao baixar da internet arquivos compactados (como os que tm extenso .zip, .tar.gz, tar.bz2, .rar ou outra), no d um duplo clique sobre eles. Geralmente, a melhor opo clicar sobre o arquivo com o boto direito do mouse e escolher a opo Extrair tudo..., Extrair aqui... ou outra semelhante, com ateno para o local onde os arquivos sero descompatados. Para este curso, sugiro que o arquivo com os bancos de dados a serem usados neste texto seja descompactado na pasta pessoal, "~/". Assim, em qualquer sistema operacional, o primeiro comando a ser digitado ao iniciar o R seria:> setwd("~/RparaCS-dados")

2.5. TIPOS DE VARIVEIS

17

2.5

Tipos de variveis

Durante uma anlise de dados, precisamos lidar com diferentes tipos de variveis. A seguir esto listados os tipos mais comuns, com o nome utilizado no R para se referir a eles entre parntesis:

Numricas (numeric): Nmeros inteiros ou reais, como idade, renda, nmero de lhos. Datas (Date): So um tipo especial de varivel numrica. Categricas (factor): Variveis qualitativas, ou seja, caractersticas dos indivduos para as quais no possvel atribuir um valor numrico como sexo, religio, estado civil, opinio sobre algum tema. possvel agrupar os indivduos em categorias e contar quantos indivduos pertencem a cada categoria, mas se, por exemplo, um indivduo arma ser catlico e outro, protestante, no podemos, com base nessas armaes considerar um mais religioso do que o outro. Categricas ordenveis (ordered): Tipo de varivel categrica cujas categorias podem ser hierarquizveis, como grau de escolaridade, alguns tipos de respostas a perguntas de questionrio. Se pergunta Qual o papel do governo?, as opes de resposta forem O governo deve mandar em tudo, O governo deve controlar algumas coisas e No precisamos de governo, poderamos considerar aqueles que optaram pela primeira opo adeptos de uma ideologia mais estatizante do que aqueles que escolheram a terceira opo. Texto (character): Caractersticas puramente individuais que no podem ser utilizadas para categorizar os indivduos. Geralmente aparecem nos bancos de dados apenas para ajudar em anlises qualitativas e no estatsticas. Exemplo: o nome dos candidatos em um banco de dados de resultados eleitorais. Em alguns casos, os textos so passveis de categorizao, como as respostas a uma pergunta aberta. Neste caso, seria preciso manualmente recodicar as respostas abertas numa nova varivel contendo um nmero limitado de categorias. Booleanas (logical): Variveis cujos valores podem ser VERDADEIRO ou FALSO; no R, TRUE ou FALSE.

2.6

Operadores matemticos e lgicos

Um software de estatstica no poderia deixar de ser capaz de fazer operaes matemticas e lgicas. A Tabela 2.4 apresenta os principais operadores matemticos e lgicos usados no R. Aprendemos o signicado dos operadores lgicos > e < no ensino fundamental, mas alguns operadores lgicos do R devem ser novidade para muitos leitores. Observe que o smbolo == tem signicado diferente do smbolo = utilizado para atribuir valores a argumentos de funes.

18

CAPTULO 2. PRIMEIROS PASSOS Tabela 2.4: Operadores matemticos e lgicos Operador + / * ^ > < Signicado soma subtrao diviso multiplicao exponenciao MAIOR QUE MENOR QUE Operador >= 9/3 [1] 3 > 2 * 3 [1] 6 > 4^2 [1] 16 > (3 + 1) * (6 - 1)^2 [1] 100 > 3 + 1 * 6 - 1^2 [1] 8 > (1 + (2 * 3)) * 5 [1] 35

Note que, ao contrrio dos clculos que aprendemos a fazer manualmente no Ensino Fundamental, no se usa colchetes e chaves nas operaes matemticas. Quando necessrio, usa-se vrios grupos de parntesis aninhados. Colchetes e chaves tm outros usos na linguagem R. Os colchetes so usados para selecionar ndices de vetores e matrizes, tabelas e data.frames e as chaves so usadas para delimitar blocos de programao. Nas operaes lgicas, tambm utilizamos parntesis para isolar operaes ou para tornar o cdigo mais legvel. Observe nos exemplos abaixo que o resultado de um teste lgico sempre uma varivel booleana:> 3 > 2 [1] TRUE > 5 < 2 [1] FALSE > 2 == 2 [1] TRUE > 2 != 2 [1] FALSE > (6 > 5) & (7 > 8) [1] FALSE > (6 > 5) | (7 > 8) [1] TRUE

Para a extrao da raiz quadrada e clculo do logaritmo natural utilizamos, respectivamente, as funes sqrt() e log():> sqrt(16) + log(1) [1] 4

2.7. USANDO UM EDITOR DE TEXTOS

19

2.7

Usando um editor de textos

Usualmente, se trabalha no R produzindo scripts, ou seja, arquivos de texto plano contendo uma sequncia de comandos. Os scripts do R so convencionalmente salvos com a extenso .R, mas a maioria das interfaces grcas para o R no acrescentar a extenso automaticamente, cando a cargo do usurio faz-lo manualmente. A grande vantagem do uso de scripts a possibilidade de repetir toda a anlise dos dados em poucos segundos aps a descoberta e correo de algum erro ou esquecimento no procedimento seguido durante a anlise. A maneira recomendada de se trabalhar com o R escrever os comandos no diretamente no console do R, mas sim no Editor, enviando-os para o console com o atalho de teclado prprio para isso. recomendvel que trs janelas, do console do R, do Editor e dos Grcos, sejam arranjadas de modo a permanecerem visveis simultaneamente. Isso facilita a visualizao dos resultados dos comandos enviados do Editor, o que fundamental para perceber e corrigir erros no cdigo. Alguns editores fazem esse arranjo automaticamente. Um script deve conter todo o cdigo necessrio para atingir o objetivo desejado, ou seja, a sua execuo linha por linha dever ocorrer sem erros. Mas nem todos os comandos executados durante uma sesso de uso do R precisam estar presentes no script. Em alguns momentos, til escrever comandos diretamente no console, principalmente aqueles utilizados para explorar os dados antes de analis-los. O console pode ser visto como um local para rascunhos e experimentaes, enquanto no se chega forma denitiva dos comandos que produziro um relatrio de pesquisa. Se quiser ver uma lista dos comandos digitados (para copiar e colar no editor) utilize o comando history(). Ao digitar alguns comandos diretamente no console, o script ca mais conciso e fcil de ler. Algumas funes que so comumente mais teis no console do que no script so ls(), summary(), str(), names(), getwd(), dir(), levels() e dput(). Os signicados dessas funes sero esclarecidos ao longo do livro. Observe que qualquer texto aps o caractere # ignorado pelo R e esta caracterstica utilizada para inserir comentrios no script que ajudaro o pesquisador a entender o prprio cdigo se precisar retornar a ele alguns meses aps t-lo escrito. Ateno: Dependendo do editor de textos que estiver sendo utilizado e da forma como os scripts so abertos, pode ser recomendvel ter a funo setwd() como primeiro comando do script, congurando o diretrio de trabalho como aquele em que esto os arquivos (bases de dados, mapas) que sero carregados durante a execuo do script. Isso facilitar o trabalho ao tornar desnecessria a digitao do caminho completo para a localizao dos arquivos contidos no diretrio. Exemplo:> setwd("/diretorio/onde/estao/os/arquivos")

2.8

Milhares de funes em milhares de pacotes

O R iniciado com pouco mais de 2000 funes e outros objetos na memria e milhares de outras funes, para as mais diversas tarefas, podem ser adicionadas por meio de pacotes (packages) disponveis livremente na internet.2 Ningum precisa de todas as funes do R; neste livro, utilizaremos em torno de 120.Acesse o stio http://www.r-project.org/ para ver a lista de pacotes disponveis, todos acompanhados de uma descrio e do manual de referncia.2

20

CAPTULO 2. PRIMEIROS PASSOS

Para instalar um novo pacote, utilize a funo install.packages() e para carregar na memria um pacote j instalado, library(). No Linux, e em verses recentes do Windows, o R dever ser executado com privilgios de administrador para que os pacotes quem disponveis para todos os usurios do sistema. Se o R no estiver sendo executado com privilgios de administrador, os pacotes instalados caro disponveis apenas para o usurio que os instalou. No exemplo abaixo, o pacote descr instalado e, em seguida, suas funes so disponibilizadas:> install.packages("descr") > library(descr)

O comportamento padro da funo install.packages() obter a ltima verso do pacote na internet e prosseguir com a instalao. Se voc quiser instalar um pacote a partir do arquivo zip (Windows) ou tar.gz (Linux), ter que fornecer o nome completo do arquivo, como no exemplo:> install.packages("~/R/pacoteInexistente_1.0.tar.gz")

O comando a seguir instala a maioria dos pacotes que sero usados neste livro:> install.packages(c("descr", "memisc", "XML", "gdata", "igraph", + "maptools", "odfWeave"))

Captulo 3 Vetores, matrizes, listas3.13.1.1

VetoresCriando

Vimos na seo 2.4 que mesmo quando atribumos um nico valor numrico ou textual a um objeto, o R, na verdade, cria um vetor de nmeros ou de textos com comprimento 1. Uma das formas de criar um vetor pelo uso da funo vector(). A funo recebe como argumentos mode (modo) e length (comprimento). O primeiro argumento uma varivel do tipo character informando o tipo de vetor a ser criado o qual pode ser, entre outros, logical, numeric e character. O segundo argumento o comprimento do vetor. Vetores do tipo character so inicializados com strings vazias; do tipo numeric, com zeros; e logical, com FALSEs. No cdigo seguinte temos alguns exemplos:> vector(mode = [1] "" "" "" "" > vector(mode = [1] 0 0 0 0 0 0 > vector(mode = [1] FALSE FALSE "character", length = 5) "" "numeric", length = 7) 0 "logical", length = 4) FALSE FALSE

Uma funo bsica para criar vetores com valores pr-determinados c(), abreviatura de concatenate:> c("Marx", "Weber", "Durkheim") [1] "Marx" "Weber" "Durkheim" > c(5, 3, 11, 6, 1, 4) [1] 5 3 11 6 1 4 > c(TRUE, FALSE, TRUE, TRUE, FALSE) [1] TRUE FALSE TRUE TRUE FALSE

Nos exemplos acima, os objetos foram criados mas no foram guardados; foram impressos diretamente no console. Para guard-los, como vimos na seo 2.4, devemos utilizar o smbolo de atribuio lgc lgc [1] TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE

21

22

CAPTULO 3. VETORES, MATRIZES, LISTAS

Em alguns casos, podemos querer registrar que no temos informao sobre um dos elementos de um vetor. Por exemplo, imagine ter feito para 10 pessoas uma pergunta cujas opes de resposta eram Sim e No e que o 3 e o 8 entrevistados no responderam pergunta. Neste caso, atribuiramos o valor NA a esses elementos do vetor:> txt txt [1] "Sim" "No" NA "Sim" "Sim" "No" "No" NA "Sim" "Sim"

Se o vetor a ser criado for uma sequncia de nmeros inteiros, podemos usar o operador : como nos exemplos abaixo:> 1:4 [1] 1 2 3 4 > 3:9 [1] 3 4 5 6 7 8 9 > 10:1 [1] 10 9 8 7 6

5

4

3

2

1

Para outros tipos de sequncias uniformes, existe a funo seq(), a qual pode ser invocada de diversas formas, sendo uma delas com os argumentos from, to e by, (de, para, tamanho dos passos) como nos exemplos abaixo:> seq(2, 10, 2) [1] 2 4 6 8 10 > seq(1, 10, 2) [1] 1 3 5 7 9 > seq(3, 5, 0.5) [1] 3.0 3.5 4.0 4.5 5.0

Outro comando til para criar vetores rep(), que pode ser invocada com dois argumentos: o valor a ser repetido e o nmero de repeties:> rep("texto", 5) [1] "texto" "texto" "texto" "texto" "texto" > rep(3, 7) [1] 3 3 3 3 3 3 3 > rep(c(1, 2, 3), 4) [1] 1 2 3 1 2 3 1 2 3 1 2 3

Como o leitor percebeu pelos exemplos anteriores, nmeros so impressos na tela sem aspas enquanto textos so limitados por aspas. Como todos os elementos de um vetor obrigatoriamente pertencem a uma mesma classe, se misturarmos nmeros e texto no mesmo vetor, os nmeros sero convertidos em texto e impressos entre aspas:> c(1, "Texto", 7, "Outro texto") [1] "1" "Texto" "7" "Outro texto"

Alm dos vetores dos tipos character, numeric e logical, so muito importantes nas cincias sociais os vetores que representam variveis categricas. Esses, do tipo factor, armazenam os dados em forma de nmeros inteiros mas possuem rtulos vetores do tipo character indicadores do signicado dos valores armazenados. Existem duas formas diferentes de criar um vetor de classe factor. A forma mais simples converter um vetor do tipo character em factor:

3.1. VETORES> res res [1] Sim No Sim Levels: No Sim Sim No No Sim Sim

23

Observe que, ao imprimir um vetor do tipo factor, o R exibe os rtulos dos valores e no os valores numricos e que os rtulos so impressos sem aspas. Aps a impresso dos valores do factor, impressa a lista de rtulos (no caso, Levels: No Sim). Ao criar um factor pela converso de um character, os rtulos das categorias sero armazenados em ordem alfabtica. Por isso, embora o primeiro valor tenha sido Sim, a primeira categoria (level) apresentada No. Outra forma de criar um vetor de classe factor por meio da atribuio de rtulos a um vetor numrico, usando a funo factor(), que recebe como argumentos um vetor numrico com os dados, um vetor numrico levels listando os algarismos utilizados para representar as categorias e um vetor do tipo character labels com os rtulos das categorias. Exemplo:> codigo uf uf [1] Cear Piau Cear Cear Piau Piau Cear Piau Levels: Piau Cear

interessante observar que embora os valores numricos no vetor codigo fossem 22 e 23, os valores numricos armazenados no vetor uf sero 1 e 2. De fato, independentemente dos valores numricos originais, os valores numricos armazenados num vetor do tipo factor so sempre uma sequncia de nmeros inteiros iniciadas com o nmero 1.

3.1.2

Nomeando elementos

Os elementos de um vetor podem receber nomes e, nesse caso, ao imprimir o objeto, o R exibe uma linha de nomes abaixo dos quais esto os valores:> idh2005 names(idh2005) idh2005 AL BA CE MA PB PE PI RN SE 0.677 0.742 0.723 0.683 0.718 0.718 0.703 0.738 0.742

A funo names() tanto pode ser usada para atribuir nomes aos elementos de um objeto, como no exemplo acima, como para obter os nomes j atribudos:> names(idh2005) [1] "AL" "BA" "CE" "MA" "PB" "PE" "PI" "RN" "SE"

24

CAPTULO 3. VETORES, MATRIZES, LISTAS

3.1.3

Obtendo informaes

Existem diversas funes teis para se obter informaes sobre vetores e outros tipos de objetos. Para exemplicar o uso dessas funes, vamos utilizar os vetores criados nas sees anteriores. Para saber o nmero de elementos de um vetor usamos a funo length():> length(idh2005) [1] 9 > length(txt) [1] 10

A funo mode() informa, genericamente, como o objeto armazenado na memria do R e a funo class() diz qual classe foi atribuda a um objeto. Em alguns casos, mode e class coincidem; em outros, no. No exemplo abaixo, em que so concatenadas essas informaes sobre vrios objetos, podemos perceber que objetos do tipo factor so armazenados como nmeros:> c(class(txt), class(idh2005), class(lgc), class(res)) [1] "character" "numeric" [1] "character" "numeric" "logical" "logical" "factor" "numeric" > c(mode(txt), mode(idh2005), mode(lgc), mode(res))

No caso de objetos de classe factor, podemos usar a funo levels() para saber quais so os rtulos das categorias:> levels(res) [1] "No" "Sim" > levels(uf) [1] "Piau" "Cear"

Uma das funes mais usadas summary() que, de um modo bastante sucinto, apresenta informaes sobre um objeto. Trata-se de uma funo genrica que possui um mtodo diferente para diferentes tipos de objetos. Ou seja, o sumrio apresentado tem uma formatao que depende da classe do objeto, como pode ser visto nos exemplos abaixo:> summary(txt) Length Class Mode 10 character character > summary(lgc) Mode logical FALSE 3 TRUE 5 Median 0.718 NA's 0 Mean 3rd Qu. 0.716 0.738 Max. 0.742

> summary(idh2005) Min. 1st Qu. 0.677 0.703 > summary(res) No 3 Sim NA's 5 2

3.1. VETORES

25

Para vetores do tipo character no h estatsticas a serem calculadas e a funo summary() basicamente informa o comprimento do vetor. Para vetores do tipo logical, so informados quantos elementos tm valor verdadeiro, quantos tm valor falso e quantos valores esto faltando (mesmo que no haja nenhum). Para vetores numricos so impressas as seguintes estatsticas: valor mnimo, primeiro quartil, mediana, mdia, terceiro quartil e valor mximo. Para vetores do tipo factor, so impressas as quantidades de cada categoria. No caso de vetores dos tipo numeric e factor, o nmero de valores faltantes (missing values) indicado por NA's (mas somente quando existem valores faltantes). No caso dos vetores numricos, as diferentes estatsticas exibidas pela funo summary() tambm poderiam ser obtidas separadamente por funes mais especcas. No cdigo abaixo, podemos ver, respectivamente, a mdia, a mediana, o valor mnimo, o valor mximo e os quartis de um vetor numrico:> mean(idh2005) [1] 0.716 > median(idh2005) [1] 0.718 > min(idh2005) [1] 0.677 > max(idh2005) [1] 0.742 > quantile(idh2005) 0% 25% 50% 75% 100% 0.677 0.703 0.718 0.738 0.742

Outra estatstica bastante til a soma. Exemplo:> # Estados do Nordeste com IDH acima de 0.72 em 2005: > sum(idh2005 > 0.72) [1] 4

Outra funo que apresenta informaes sobre um objeto de forma bastante sucinta str(). Esta funo apresenta a estrutura do vetor em apenas uma ou duas linhas. Para maior conciso, algumas informaes so abreviadas (como a classe do objeto).> str(txt) chr [1:10] "Sim" "No" NA "Sim" "Sim" "No" "No" NA ... > str(lgc) logi [1:8] TRUE FALSE TRUE TRUE FALSE FALSE ... > str(idh2005) Named num [1:9] 0.677 0.742 0.723 0.683 0.718 0.718 0.703 0.738 0.742 - attr(*, "names")= chr [1:9] "AL" "BA" "CE" "MA" ... > str(res) Factor w/ 2 levels "No","Sim": 2 1 NA 2 2 1 1 NA 2 2

Por m, uma funo frequentemente til dput(). A funo produz como sada o cdigo necessrio para gerar o objeto que recebeu como argumento. Exemplos:> dput(txt) c("Sim", "No", NA, "Sim", "Sim", "No", "No", NA, "Sim", "Sim") > dput(uf) structure(c(2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L), .Label = c("Piau", "Cear"), class = "factor")

26

CAPTULO 3. VETORES, MATRIZES, LISTAS

Observe que a funo dput() usou nmeros seguidos da letra L para representar os dados armazenados no factor uf. A letra L aps um nmero indica que ele um nmero inteiro e no um nmero real. Vetores do tipo factor armazenam os dados na forma de nmeros inteiros porque eles ocupam menos espao na memria do que nmeros reais. Como vimos na seo 2.7, alguns comandos so usados para conhecer melhor os dados e no precisam ser includos no script que est sendo produzido com o objetivo de realizar uma anlise dos dados. Esses comandos podem ser digitados diretamente no console para manter o script mais conciso e de fcil leitura. A maior parte das funes vistas nesta seo esto justamente entre as que mais comumente devem ser digitadas diretamente no console e no registradas nos scripts.

3.1.4

Convertendo

O R possui diversas funes para converter vetores de um tipo em outro. Na pgina 22, vimos como usar a funo as.factor() para converter um vetor do tipo character em factor. As funes que fazem converso de um tipo para outro, convencionalmente, tm o prexo as seguido de um ponto e do nome da classe de destino. Qualquer tipo de vetor pode ser convertido em um vetor do tipo character:> as.character(c(TRUE, FALSE, TRUE, FALSE)) [1] "TRUE" "FALSE" "TRUE" "FALSE" > as.character(c(1, 3.4, -5.6, 9)) [1] "1" "3.4" "-5.6" "9"

Podem ser convertidos em numeric vetores lgicos e representaes textuais de nmeros. A tentativa de converter um texto com as palavras Sim e No resulta num vetor de NA's:> as.numeric(c(TRUE, FALSE, TRUE, FALSE)) [1] 1 0 1 0 > as.numeric(c("1.3", "1.4", "1.7")) [1] 1.3 1.4 1.7 > as.numeric(txt) [1] NA NA NA NA NA NA NA NA NA NA

Merece ateno especial a converso de vetores de classe factor em character ou numeric, pois, como numeric, so aproveitados os valores numricos armazenados na memria mas, como character, os valores numricos so substitudos por seus rtulos:> as.numeric(res) [1] 2 1 NA 2 2 > as.character(res) [1] "Sim" "No" NA 1 1 NA 2 2 "Sim" "Sim"

"Sim" "Sim" "No" "No" NA

Vetores numricos podem ser convertidos em vetores lgicos, sendo que o valor zero se torna FALSE e qualquer outro valor se torna VERDADEIRO. A tentativa de converter character em logical funciona apenas para os textos "FALSE" e "TRUE". Para qualquer outro texto, o resultado a produo de NA's:> as.logical(c(0, 1, 1, 0, 1, 1)) [1] FALSE TRUE TRUE FALSE TRUE TRUE > as.logical(c(-1.2, -3.3, 0.5, 0.8, 1.3, 2.4)) [1] TRUE TRUE TRUE TRUE TRUE TRUE > as.logical(c("0", "FALSE", "TRUE", "3.4")) [1] NA FALSE TRUE NA

3.1. VETORES

27

3.1.5

ndices: obtendo e modicando valores

Podemos acessar elementos de um vetor por meio de ndices entre colchetes, como nos exemplos abaixo:> x y z x[3] [1] 2 > y[2] [1] 7

Para selecionar mais de um elemento, deve-se colocar entre colchetes um vetor com os ndices dos elementos de interesse. O cdigo seguinte seleciona o 1, o 3 e o 5 elementos do vetor x:> x[c(1, 3, 5)] [1] 4 2 7

Observe que permitido usar funes dentro dos colchetes. No caso, usamos a j conhecida funo c(), mas qualquer cdigo que produza um vetor de nmeros inteiros ou de valores lgicos pode ser utilizado para produzir o vetor de ndices, como nos exemplos seguintes:> z[1:4] [1] "a" "b" "c" "d" > i y[i] [1] 3 4 1 2 > x[i] [1] 2 6 7 8 > x[y < 5] [1] 2 6 7 8

Como vimos na seo 3.1.2, uma caracterstica importante dos vetores no R que seus elementos podem receber nomes por meio da funo names(). No cdigo seguinte, usamos os textos criados no vetor z como nomes de x:> > a 4 names(x) c 2 > b 8 x["c"]

x[c("b", "d", "g")] d g 6 8

possvel usar ndices com valores negativos, o que informa quais elementos no sero selecionados:

28> b 8 > d 6 x[-1] c d e f 2 6 7 1 x[-c(1, e f g h 7 1 8 1

CAPTULO 3. VETORES, MATRIZES, LISTAS

g h i 8 1 2 2, 3)] i 2

Os mesmos ndices e nomes usados para extrair valores de um vetor tambm podem ser usados para modicar esses valores:> y[3] y [1] 6 7 11 4 1 5 2 8 > x[c("b", "d", "g")] x a b c d e f g h i 4 0 2 0 7 1 0 1 2

9

3.1.6

Operaes

Podemos fazer operaes aritmticas e lgicas com vetores. Os vetores so emparelhados e o resultado um novo vetor em que a operao aplicada a cada par de elementos. Exemplos:> x > y > x [1] > x [1] > x [1] > x [1] > x [1] x > y > x [1] x y x + y [1] 2 7 10 5 10 13 8

3.2. MATRIZES

29

3.2

Matrizes

As funes cbind() (juntar colunas) e rbind() (juntar linhas) juntam vetores formando matrizes, ou seja, uma forma retangular de representao dos dados em que eles esto distribudos em linhas e colunas. Cada vetor fornecido como argumento para a funo cbind() se torna uma coluna da matriz resultante; Com a funo rbind(), cada vetor se torna uma linha:> > > > x > + > m m[c(1, 4), 1] Helena Francisco 7 10 > m["Maria", c("Portugus", "Matemtica")] Portugus Matemtica 10 8

30

CAPTULO 3. VETORES, MATRIZES, LISTAS

Observe que na primeira linha do cdigo abaixo nenhuma linha da matriz selecionada e, consequentemente, so exibidos todos os valores da coluna selecionada ("Histria"). Na segunda linha do cdigo, ocorre o contrrio, nenhuma coluna selecionada:> m[, "Histria"] Helena Jos 10 9 > m["Macunama", ] Matemtica Portugus 1 3 Maria Francisco Macunama 9 9 2 Histria 2

Analogamente ao que zemos com os vetores, podemos usar os ndices para mudar valores de elementos especcos de uma matriz:> m["Macunama", "Portugus"] numeros lista lista [[1]] [1] 1 2 3 $letras [1] "a" "b" "c" "d" [[3]] [1] TRUE FALSE

No cdigo acima, os elementos foram adicionados list de trs formas diferentes e, como podemos ver pela impresso da lista, somente o segundo elemento tem um nome, letras. Os demais elementos da lista esto sem nome, mas podem ser acessados pela sua posio na lista. Para acessar um elemento de uma list, devemos digitar o nome da list seguido do smbolo $ e do nome do elemento ou, entre colchetes (simples ou duplos) o seu nome ou o nmero da sua posio, como nos exemplos abaixo:> lista$letras [1] "a" "b" "c" "d" > lista["letras"] $letras [1] "a" "b" "c" "d" > lista[["letras"]] [1] "a" "b" "c" "d" > lista[3] [[1]] [1] TRUE FALSE > lista[[3]]

3.3. LISTAS[1] TRUE FALSE

31

Quando estamos trabalhando com listas, retornado um valor diferente conforme sejam usados o smbolo $ ou colchetes duplicados ou colchetes simples. Com o uso do $ ou dos colchetes duplicados, retornado o elemento componente da lista. Com o uso de colchetes simples, retornada uma lista com os elementos selecionados. Conra:> c(class(lista["letras"]), class(lista[["letras"]]), class(lista$letras)) [1] "list" "character" "character"

Com o uso de colchetes simples, podemos selecionar simultaneamente vrios elementos de uma list:> lista[c(1, 3)] [[1]] [1] 1 2 3 [[2]] [1] TRUE FALSE

32

CAPTULO 3. VETORES, MATRIZES, LISTAS

Captulo 4 Carregar banco de dados existente4.1 Introduo

Bancos de dados para anlises quantitativas nas cincias sociais consistem, tipicamente, em dados em formato tabular onde cada coluna representa uma caracterstica varivel de muitos casos. Os casos podem ser indivduos, organizaes, pases etc, e todas as informaes sobre cada caso cam numa mesma linha. A Figura 4.1 mostra o contedo de um pequeno banco de dados ctcio registrado num arquivo de texto plano, com apenas cinco casos (pessoas entrevistadas) e trs variveis (sexo, idade e estado.civil):sexo Masculino Feminino Feminino Masculino Feminino idade 40 37 17 13 10 estado.civil casado casado solteiro solteiro solteiro

1 2 3 4 5

Figura 4.1: Exemplo de banco de dados No R, os objetos capazes de guardar informaes tabulares presentes em bancos de dados como os da Figura 4.1 so os data.frames. Um data.frame constitudo pela concatenao de vrias colunas em uma nica list. Assim como uma matrix, todas as colunas de um data.frame tm que ter o mesmo nmero de elementos, mas, ao contrrio de uma matrix, um data.frame pode conter colunas de tipos diferentes, com variveis numricas, categricas, booleanas etc. Uma forma de criar e visualizar no prprio R o banco de dados acima seria:1> > > > > sexo b attr(b, "variable.labels") uf candidat partido "uf" "candidato" "partido" idade "idade" sexo resultad "sexo" "resultado"

O data.frame ou list criado poder ter outros atributos, como Missing, se o banco de dados no formato sav contiver valores missing denidos pelo usurio. O atributo informar quais valores haviam sido codicados como missing no arquivo sav.

4.3

Arquivos csv

Arquivos do tipo csv, comma separated values,5 so arquivos de texto plano, podendo ser visualizados em editores de texto simples porque no contm qualquer formatao especial como negrito, itlico, cores, espaamento entre linhas etc. . . 6 Apesar do nome, devido ao fato da vrgula ser um smbolo comum em textos, inclusive nos valores de variveis categricas, e, principalmente, por ser a vrgula o separador de decimais em alguns idiomas, como o portugus,Se tiver diculdades para encontrar um arquivo, tente a usar a funo file.choose(). Em alguns sistemas, essa funo abre uma caixa de dilogo para localizao de arquivos. 5 Valores separados por vrgulas. 6 por isso que uma planilha de clculo, ao ser salva como csv, perde toda informao sobre formatao das clulas e sobre frmulas utilizadas.4

36

CAPTULO 4. CARREGAR BANCO DE DADOS EXISTENTE

na prtica, comum encontrar arquivos csv com os campos separados por ponto e vrgula, espaos e caracteres de tabulao. Para eliminar qualquer dvida sobre o tipo de valor de um campo, se numrico ou textual, costuma-se escrever os valores que devem ser tratados como texto entre aspas, simples ou duplas. Para se habituar a utilizar este tipo de arquivo no R, abra os arquivos bd_exemplo*.csv um por um, de acordo com os procedimentos apresentados a seguir. Para carregar um arquivo no formato csv, utilizamos a funo read.table(), mas, para usar a funo corretamente, precisamos saber algumas informaes, sendo as mais frequentemente necessrias: (1) qual caractere utilizado para separar os valores; (2) se os valores textuais esto limitados por aspas simples ou aspas duplas ou se no esto limitados por nenhum caractere especial; (3) se os nomes das variveis esto na primeira linha do arquivo. Para descobrirmos essas informaes, utilizaremos a funo file.head() do pacote descr para inspecionar as primeiras linhas de arquivos de texto, como o caso dos bancos de dados no formato csv:> library(descr) > file.head("bd_exemplo1.csv") "uf" "candidato" "partido" "logvotos" "sexo" "resultado" "RO" "ACIR MARCOS GURGACZ" "PDT" 12,257 "Masculino" "No eleito" "ES" "AFONSO CEZAR CORADINE" "PSOL" 9,937 "Masculino" "No eleito" "DF" "AGNELO SANTOS QUEIROZ FILHO" "PC do B" 13,207 "Masculino" "No eleit "SP" "ALDA MARCO ANTONIO" "PMDB" 13,742 "Feminino" "No eleito" "GO" "ALDO SILVA ARANTES" "PC do B" 11,659 "Masculino" "No eleito"

Como podemos ver pelo resultado da funo file.head(), a primeira linha do arquivo contm os nomes das variveis (ou seja, o arquivo possui um cabealho, ou header), os diferentes valores esto separados por um espao em branco, uma vrgula est sendo usada como separdor de decimais e os valores textuais esto limitados por aspas (quotation marks) duplas. Logo, o comando para abrir este arquivo ser:> b1 summary(b1) uf candidato SP : 15 ACIR MARCOS GURGACZ : 1 RJ : 11 AFONSO CEZAR CORADINE : 1 MG : 10 AGNELO SANTOS QUEIROZ FILHO: 1 RS : 10 ALDA MARCO ANTONIO : 1 DF : 9 ALDO SILVA ARANTES : 1 MA : 9 ALFREDO HELIO SIRKIS : 1 (Other):138 (Other) :196 logvotos sexo resultado Min. : 5.790 Feminino : 30 Eleito : 27 1st Qu.: 8.441 Masculino:172 No eleito:175 Median :10.211 Mean :10.523 3rd Qu.:12.791 Max. :16.011

partido PSOL : 17 PFL : 15 PDT : 14 PSDB : 13 PSTU : 13 PCB : 12 (Other):118

Para carregar os demais arquivos csv, basta repetir o mesmo procedimento: inspecionar as primeiras linhas do arquivo com file.head() e, ento, fornecer os argumentos adequados

4.4. ARQUIVOS XLS, ODS E MDB

37

para read.table(). No exemplo seguinte, o separador de campos uma vrgula, como delimitadoras de texto foram usadas aspas duplas e o separador de decimais um ponto, mas esse j o valor padro do argumento dec e, portanto, no preciso acrescentar esse argumento funo:> file.head("bd_exemplo2.csv") "uf","candidato","partido","logvotos","sexo","resultado" "RO","ACIR MARCOS GURGACZ","PDT",12.257,"Masculino","No eleito" "ES","AFONSO CEZAR CORADINE","PSOL",9.937,"Masculino","No eleito" "DF","AGNELO SANTOS QUEIROZ FILHO","PC do B",13.207,"Masculino","No eleit "SP","ALDA MARCO ANTONIO","PMDB",13.742,"Feminino","No eleito" "GO","ALDO SILVA ARANTES","PC do B",11.659,"Masculino","No eleito" > b2 file.head("bd_exemplo3.csv") "uf";"candidato";"partido";"logvotos";"sexo";"resultado" "RO";"ACIR MARCOS GURGACZ";"PDT";12,257;"Masculino";"No eleito" "ES";"AFONSO CEZAR CORADINE";"PSOL";9,937;"Masculino";"No eleito" "DF";"AGNELO SANTOS QUEIROZ FILHO";"PC do B";13,207;"Masculino";"No eleit "SP";"ALDA MARCO ANTONIO";"PMDB";13,742;"Feminino";"No eleito" "GO";"ALDO SILVA ARANTES";"PC do B";11,659;"Masculino";"No eleito" > b3 b$candidato head(b, n = 3) uf candidato partido idade sexo resultado 1 RO ACIR MARCOS GURGACZ PDT 44 Masculino No eleito 2 ES AFONSO CEZAR CORADINE PSOL 51 Masculino No eleito 3 DF AGNELO SANTOS QUEIROZ FILHO PC do B 48 Masculino No eleito

45

46

CAPTULO 5. MANIPULANDO BANCOS DE DADOS

> tail(b, n = 3) uf candidato partido idade sexo resultado 200 PB WALTER AMORIM DE ARAJO PRTB 52 Masculino No eleito 201 TO WEDER MARCIO DA SILVA SANTOS PSDC 35 Masculino No eleito 202 PI ZILTON VICENTE DUARTE JUNIOR PSOL 37 Masculino No eleito

O comando head() imprime no Console os seis primeiros valores do objeto que lhe passado como argumento. Se esse objeto for um data.frame, ele imprime as seis primeiras linhas de todas as colunas. O nmero de valores ou linhas a ser impresso pode ser controlado pelo parmetro n. O comando tail() imprime os seis ltimos valores ou linhas. Veremos a seguir vrias outras formas de selecionar e exibir linhas e colunas especcas. Basicamente, tudo o que foi dito sobre extrao de elementos e modicao de valores de matrizes e listas, nas sees 3.2 e 3.3, tambm vlido para data.frames. Para escolher uma linha especca, por exemplo, a 26, podemos digitar:> b[26, ] uf candidato partido idade sexo resultado 26 AP CELISA PENNA MELO CAPELARI PSOL 37 Feminino No eleito

De acordo com o sistema de ndices do R, podemos fazer referncia a um elemento de um data.frame, de uma matrix ou de uma table indicando entre colchetes, respectivamente, o nmero da linha e o da coluna do elemento. No exemplo acima, no indicamos a coluna, e, por isso, todas foram impressas. possvel tambm selecionar vrias linhas ou colunas simultaneamente e usar os nomes das linhas ou das colunas ao invs dos seus ndices e imprimir fora da sequncia em que se encontram no banco de dados, como nos exemplos abaixo (resultados dos comandos omitidos):> > > > > > b[1:10, ] b[10:1, 1:3] b[c(1, 2, 3, 4), c(1, 2, 3)] b[c(4, 2, 1, 3), c(2, 3, 1)] b[20:30, "candidato"] b[1:10, c("partido", "resultado")]

possvel utilizar ndices negativos para no imprimir linhas ou colunas (resultados omitidos):> b[1:10, -1] > b[c(1, 3, 5), -c(5, 3, 1)]

Tambm podemos utilizar condies lgicas para selecionar os ndices das linhas a serem impressas. Nesse caso, a condio da coluna deve retornar os ndices que correspondem linha e, por isso, deve ocupar o primeiro dos dois campos que esto entre colchetes e so separados por uma vrgula (resultados omitidos):> > > > b[b$uf == b[b$idade b[b$uf == b[b$uf == "CE", c(2, 3, 6)] > 80, c(1, 2, 4)] "AP" & b$sexo == "Feminino", 1:4] "RJ" | b$uf == "SP", 1:3]

A Tabela 2.4 (p. 18) explica o signica de cada smbolo. E, claro, para visualizar o banco de dados inteiro, basta digitar b (ou b[,] ou, ainda, b[]), mas no faa isso se o banco for muito grande, com dezenas de colunas e milhares de

5.2. EXTRAIR SUBCONJUNTO DOS DADOS

47

linhas. Para saber o nmero de linhas e de colunas de um data.frame, use o comando dim(), abreviatura de dimensions. Tambm possvel obter o nmero de colunas com comando length(), fornecendo o data.frame como parmetro. Para saber o nmero de linhas, poderamos fornecer uma das variveis como parmetro, uma vez que todas as variveis tm o mesmo comprimento:> dim(b) [1] 202 6

> c(length(b$resultado), length(b)) [1] 202 6

Tambm pode ser importante saber qual a classe das diferentes variveis de um banco de dados porque s vezes uma anlise falha devido varivel estar classicada de modo errado. Estar habituado s diferentes classes de objetos facilitar o entendimento das mensagens de erro e a consequente correo dos problemas. Para isso, podemos usar o comando class().

5.2

Extrair subconjunto dos dados

A partir de agora, utilizaremos uma verso mais completa do banco com dados dos candidatos ao Senado em 2006. Para tanto, carregue a rea de trabalho senado2006.RData:> load("senado2006.RData")

Quando no se precisa de todas as variveis de um banco de dados, recomendvel a criao de um novo banco contendo apenas um subconjunto dos dados. possvel extrair um subconjunto com a seleo de ndices de linhas e colunas, como visto na seo 5.1, mas a forma mais apropriada de se fazer isso usando o comando subset(), que recebe como parmetros o banco de dados original, a condio de seleo e um vetor com os nomes das colunas a serem selecionadas (consulte a ajuda do comando para ver formas alternativas de us-lo). No exemplo abaixo, ser criado um novo banco de dados, contendo apenas as linhas do banco original cujo valor da varivel uf "CE", sendo selecionadas apenas as variveis candidato, partido e votos:> ce ce candidato partido votos 16 ANTONIO FERNANDES DA SILVA FILHO PSDC 3640 74 INCIO FRANCISCO DE ASSIS NUNES ARRUDA PC do B 1912663 139 MARIA NAIR FERNANDES SILVA PDT 39327 149 MORONI BING TORGAN PFL 1680362 172 RAIMUNDO PEREIRA DE CASTRO PSTU 18545 193 TARCSIO LEITO DE CARVALHO PCB 6084

O smbolo == tem signicado diferente do smbolo = utilizado para atribuir valores a argumentos de funes e o segundo argumento fornecido funo signica VERDADEIRO se uf for igual a "CE" e FALSO em todos os outros casos. Quando usamos a funo subset(), no necessrio acrescentar o smbolo $ antes dos nomes das variveis.

48

CAPTULO 5. MANIPULANDO BANCOS DE DADOS

5.3

Ordenar um banco de dados

Em algumas ocasies pode ser necessrio ordenar um banco de dados. A forma de fazer isso no R usar a funo order() para criar um vetor de ndices ordenados de acordo com algum critrio e, em seguida, atribuir a um objeto o banco original reordenado pelo vetor. Por exemplo, para reordenar o banco ce criado na seo anterior pelo nmero decrescente de votos recebidos, podemos usar o seguinte cdigo:> idx ce ce candidato partido votos 74 INCIO FRANCISCO DE ASSIS NUNES ARRUDA PC do B 1912663 149 MORONI BING TORGAN PFL 1680362 139 MARIA NAIR FERNANDES SILVA PDT 39327 172 RAIMUNDO PEREIRA DE CASTRO PSTU 18545 193 TARCSIO LEITO DE CARVALHO PCB 6084 16 ANTONIO FERNANDES DA SILVA FILHO PSDC 3640

5.4

Visualizao grca de variveis

Como j vimos em outras sees, para obter um sumrio de um objeto temos a funo summary(), que tanto pode ser aplicada a uma das colunas de um banco de dados quanto ao data.frame completo. O sumrio apenas numrico, mas a visualizao de uma varivel num grco muitas vezes mais informativa. A funo genericamente usada para produzir grcos no R plot(), a qual determina o tipo de grco a ser produzido conforme a classe do objeto que lhe passado como argumento. Por exemplo, com uma varivel categrica, ou seja, um objeto da classe factor, produzido um grco de barras (gura no includa): A funo freq(), do pacote descr, produz um objeto que, impresso, exibe uma tabela de frequncia de um objeto do tipo factor. O argumento user.missing indica quais categorias devem ser consideradas dados faltantes, o que afeta o clculo do percentual vlido. No cdigo abaixo, produzimos uma tabela de frequncia da renda familiar dos entrevistados da Pesquisa Social Brasileira, realizada em 2002:> load("pesb2002.RData") > library(descr) > freq(pesb$q546, user.missing = c("NR", "NS")) Renda familiar - faixas Frequncia Percentual % Vlido At R$ 200,00 379 16.032 17.661 De R$ 1001,00 a 2000,00 322 13.621 15.005 De R$ 2001,00 a 4000,00 142 6.007 6.617 De R$ 201,00 a 600,00 730 30.880 34.017 De R$ 601,00 a 1000,00 398 16.836 18.546 Mais de R$ 4001,00 81 3.426 3.774 NR 61 2.580 NS 157 6.641 Sem renda 94 3.976 4.380 Total 2364 100.000 100.000

O objeto produzido pela funo freq() tambm possui um mtodo para a funo plot(), gerando um grco de barras quando plotado. Entre os argumentos da funo freq(),

5.4. VISUALIZAO GRFICA DE VARIVEIS

49

est a escolha do tipo de apresentao das quantidades das categorias por meio de nmeros absolutos ou relativos no eixo y do grco de barras. No exemplo da Figura 5.4, optou-se pelo uso de valores percentuais.> f plot(f, y.axis = "percent")80 0 20 40 60

Eleito

No eleito

Figura 5.1: Eleitos e no eleitos para o Senado em 2006

Para variveis numricas, a funo summary() nos fornece o valor mnimo, o 1 quartil, a mediana, a mdia, o 3 quartil e o valor mximo. Uma ferramenta til para visualizao das caractersticas de uma varivel numrica o diagrama em caixa e bigodes (boxplot), o qual permite visualizar quase todas as informaes exibidas pela funo summary(). Ele revela, ainda, a existncia de valores extremos ou atpicos (outliers).

> summary(sen$idade) Min. 1st Qu. 35.00 44.00 Median 50.50 Mean 3rd Qu. 52.25 60.00 Max. 89.00

Na Figura 5.2, a base da caixa do diagrama representa o primeiro quartil, Q1 , a linha central representa a mediana, Q2 , e o topo da caixa, o terceiro quartil, Q3 . A distncia entre Q3 e Q1 o intervalo interquartil, IIQ. O limite do bigode inferior do diagrama, Li , invisvel no grco, calculado como Q1 (1,5 IIQ) e o limite superior, Ls = Q3 + (1,5IIQ). Os valores que estiverem abaixo do limite inferior ou acima do limite superior so considerados atpicos. No caso da idade dos candidatos ao Senado em 2006, no h nenhum valor abaixo de Li , o que faz sentido, pois a Constituio do Brasil no permite a candidatura ao Senado de pessoas muito jovens, com menos de 35 anos. O valor mnimo, min, est acima de Li e o nico valor atpico, acima de Ls , a idade de 89 anos de uma candidata do Rio Grande do Sul. Outro grco muito importante para a visualizao de variveis numricas o histograma. No histograma, o vetor de nmeros subdividido em classes de valores e as barras representam a frequncia dos valores em cada classe. Na Figura 5.3 temos um grco produzido por hist():

5090

CAPTULO 5. MANIPULANDO BANCOS DE DADOS

> boxplot(sen$idade)

60

70

80

max Ls

q

valor atpico

Q3 IIQ min Q2 Q1

Figura 5.2: Diagrama em caixa explicado> hist(sen$bens)

40

50

Histogram of sen$bens200 Frequency 0 0e+00 50 100 150

1e+08

2e+08

3e+08

4e+08

5e+08

sen$bens

Figura 5.3: Exemplo de histograma O histograma da Figura 5.3 tem uma srie de problemas que precisam ser corrigidos. O mais srio deles que quase todos os candidatos esto na classe inferior de posse de bens. Vericando o resultado de> summary(sen$bens) Min. 1st Qu. 0 24580 Median 167000 Mean 3566000 3rd Qu. Max. 697800 492600000

percebemos que o valor mnimo de sen$bens 0 e o mximo de 492 milhes. A funo hist() dividiu esse intervalo em dez partes iguais; a primeira faixa, de 0 a 50 milhes, inclui todos, menos um candidato:

5.4. VISUALIZAO GRFICA DE VARIVEIS> sen[sen$bens > 5e+07, c("candidato", "uf", "partido")] candidato uf partido 183 RONALDO CEZAR COELHO RJ PSDB

51

Isso explica porque o histograma cou to deformado, com apenas uma grande barra esquerda e uma diminuta, quase invisvel, barra direita: a barra da esquerda representa 221 candidatos e a barra da direita apenas um. Em sociedades com alto ndice de desigualdade social, a riqueza no s mal distribuda como a distribuio no linear, mas geomtrica. Por isso, comumente, utilizamos o logaritmo da renda em anlises estatsticas. Assim, antes de produzir um novo grco, vamos criar uma nova varivel. Para evitar valores innitos (logaritmo de zero), vamos adicionar 1 varivel bens antes de calcular o logaritmo:> sen$log.bens hist(sen$log.bens, ylab = "Proporo", xlab = "Logaritmo dos Bens", + main = "Logaritmo dos Bens Declarados (R$)\ndos Candidatos ao Senado", + col = "lightgray", probability = TRUE)

Logaritmo dos Bens Declarados (R$) dos Candidatos ao Senado

Proporo

0.00 0

0.05

0.10

0.15

5

10

15

20

Logaritmo dos Bens

Figura 5.4: Exemplo de histograma melhorado

52

CAPTULO 5. MANIPULANDO BANCOS DE DADOS

Alm de melhorarmos a aparncia do grco, utilizamos o argumento probability para substituir a apresentao das frequncias em valores absolutos por valores relativos. Os candidatos que declaram no possuir bens caram isolados na barra mais esquerda e Ronaldo Cezar Coelho continua solitrio na barra mais direita do histograma, mas o restante do grco possui uma forma de sino, tpica de uma distribuio normal. Chamamos de log-normal a uma distribuio cujo logaritmo se assemelha a uma distribuio normal.

5.5

Recodicar variveis

Quando so aplicados questionrios, muitas questes cam sem receber resposta de boa parte dos entrevistados. Em alguns casos, a pergunta no se aplica ao indivduo, em outros, o entrevistado, por algum motivo, preferiu no responder pergunta e, nalmente, o entrevistado pode no saber responder pergunta. Antes de realizar a anlise dos dados pode ser necessrio recodicar as variveis para que as anlises posteriores sejam bem sucedidas. Digamos que uma determinada varivel categrica x tenha entre seus levels os valores "NS" e "NR", correspondendo respectivamente a No Sabe e No Respondeu:> x summary(x) No NR NS Sim 3 1 1 3

Se quisermos tratar "NS" e "NR" como valores omissos (missing values), poderamos faz-lo da seguinte forma:> x[x == "NS" | x == "NR"] summary(x) No NR NS Sim NA's 3 0 0 3 2 > x summary(x) No Sim NA's 3 3 2

Os valores entre colchetes na primeira linha do cdigo acima, como o leitor j est habituado, fazem uma seleo dos ndices de x. Mas h vrias novidades nessa linha. Observe que o smbolo NA, embora constitudo por duas letras, no est entre aspas. O valor NA que est sendo atribudo a alguns dos valores de x tem um signicado especial para o R: not available, ou seja, valor ausente. Vimos na seo 2.6 (p. 17) os signicados dos smbolos lgicos utilizados no cdigo acima. Na primeira parte do cdigo entre colchetes, ele signica VERDADEIRO se x for igual a "NS" e FALSO se no for. O smbolo | signica a condio lgica OU. Assim, o cdigo dentro dos colchetes pode ser lido como: VERDADEIRO se x for igual a "NS" ou x igual a "NR"; FALSO se x no for igual a nenhum dos dois valores. Ou seja, o valor NA ser atribudo a todos os elementos do vetor x que corresponderem s categorias No Sabe, No Respondeu. A funo droplevels() tem o objetivo de eliminar da varivel categrica os levels vazios, no caso, "NS" e "NR". No cdigo acima, modicamos a prpria varivel, mas, em outras ocasies, precisamos criar uma nova varivel, como no exemplo abaixo, em que a funo recode() do pacote memisc utilizada para recodicar a varivel Partido poltico em Posicionamento em relao ao Governo Federal.

5.6. CRIAR VARIVEL CATEGRICA A PARTIR DE VARIVEL NUMRICA> library(memisc) > sen$pos > > names(b2) + > > pais > > > pais attributes(sen$sexo) $levels [1] "Feminino" "Masculino" $class [1] "factor" $label [1] "Sexo do candidato" $Observao [1] "Sexo diferente de sexualidade"

Como ca claro pelo resultado do comando attributes(), os objetos no R armazenam muitas informaes como atributos. Um objeto do tipo factor, por exemplo, apenas um vetor do tipo integer com alguns atributos adicionais: levels e class. A possibilidade de atribuio de caractersticas arbitrrias a qualquer objeto, combinada com a possibilidade de criar novas classes e atribu-las aos objetos, uma das caractersticas da linguagem R que lhe proporcionam grande exibilidade e poder. Entretanto, os atributos de um objeto so perdidos quando ele transformado de um tipo em outro, o que frequentemente precisamos fazer durante a fase de manipulao do banco de dados. Por isso, quando se pretende acrescentar rtulos ou outros atributos s variveis de um banco de dados, recomendvel que isso seja feito como ltima etapa da manipulao. Concluda a manipulao do banco de dados, salve o script que escreveu durante essa fase do processo de anlise de dados. Ele ser necessrio se for percebida alguma falha na manipulao dos dados. Nesse caso, bastar fazer a correo no script e execut-lo novamente. Salve tambm o banco de dados, pois, geralmente, mais rpido carregar o banco de dados j manipulado e salvo no formato RData do que executar novamente todo o script de manipulao dos dados:> save(sen, file = "senado2006.novo.RData")

Entre as funes presentes no pacote Hmisc, temos label(), que acrescenta o atributo label a um objeto, e spss.get(), que atribui automaticamente rtulos s variveis de um banco de dados importado do SPSS. A funo label(), entretanto, muda a classe do objeto, o que pode causar problemas de compatibilidade com funes de outros pacotes. Por isso, neste livro, no usaremos o pacote Hmisc.

1

Captulo 6 Anlise descritivaNeste captulo, veremos as anlises que podem ser feitas sem o uso de tcnicas avanadas de estatstica. Elas so muito teis para a explorao inicial do banco de dados e podemos ter que nos limitar a elas quando vamos apresentar um relatrio de pesquisa para um pblico leigo em estatstica.

6.1

Anexar variveis de um banco de dados rea de trabalho

At aqui, sempre que precisamos fazer referncia a uma varivel de um banco de dados, usamos a notao b$v, onde b representa um data.frame e v uma de suas colunas ou variveis, mas a funo attach() permite fazer referncia a uma varivel de um banco de dados diretamente, sem o prexo b$. Ao digitarmos attach(b), o R faz cpias das variveis de b que, embora no sejam exibidas pela funo ls(), podem ser acessadas pelas demais funes. A Figura 6.1 uma representao grca do processo: b v1 v3 v5 v2 v4 v6 v1 v3 v5 b v2 v4 v6 v5 v6 v3 v4

v1

v2

Antes

Depois

Figura 6.1: rea de trabalho antes e depois de attach(b) O inconveniente de usar attach() durante o processo de manipulao dos dados decorre do fato de alteraes nos objetos anexados rea de trabalho no se reetirem nas variveis do data.frame() e vice-versa. Seria preciso usar constantemente a funo detach() para desanexar os objetos anexados pela ltima chamada a attach(). Como isso causa frequente de confuso entre iniciantes, evitaremos o uso de attach() neste livro. 57

58

CAPTULO 6. ANLISE DESCRITIVA

Nas primeiras sees deste captulo, utilizaremos um subconjunto do banco de dados da Pesquisa Social Brasileira de 2002. O primeiro passo , pois, carregar o banco de dados:> load("pesb2002.RData")

A Tabela 6.1 reproduz o nome de algumas variveis e seus respectivos rtulos, conforme o livro de cdigos da PESB 2002. Tabela 6.1: Algumas variveis da PESB 2002 e seus respectivos rtulos Var. q2 q66 q68 q78 q105 q511 q531 q546 q660 Rtulo Regio do pas Pedir a um amigo que trabalha no servio pblico para ajudar a tirar um documento mais rpido do que o normal : Um funcionrio pblico recebe um presente de Natal de uma empresa que ele ajudou a ganhar um contrato do governo : Algum consegue um emprstimo do governo, mas que demora muito a sair. Como ela tem um parente no governo consegue liberar o emprstimo mais rpido : Atitude que a empregada domstica deveria ter se a patroa diz que ela pode assistir televiso na sala junto com ela Religio Sexo Renda familiar - faixas Peso nal para desproporcionalidade amostral e diferenas scio demogrcas

Para facilitar o nosso trabalho durante o captulo, vamos renomear as variveis do nosso subconjunto da PESB 2002 com nomes mais signicativos do que os originais. Para evitar erros de digitao na produo do novo vetor com nomes, usaremos o comando dput(names(pesb)) para produzir um cdigo que podemos copiar e editar, modicando os nomes conforme nosso interesse:> dput(names(pesb)) c("q2", "q531", "q511", "q546", "q66", "q68", "q78", "q105", "q660") > names(pesb) library(descr)

6.2

Construo de ndices

ndices so construdos pela computao de novas variveis a partir de variveis existentes. Eles so teis para condensar informaes que de outra forma seriam difceis de analisar. Na PESB, por exemplo, existem 19 perguntas sobre situaes que o entrevistado deve classicar como favor, jeitinho ou corrupo. As trs que Almeida (2007) aponta como as que obtiveram respostas mais variadas foram: (1) Pedir a um amigo que trabalha no servio pblico para ajudar a tirar um documento mais rpido do que o normal. (2) Um funcionrio pblico recebe

6.2. CONSTRUO DE NDICES

59

um presente de Natal de uma empresa que ele ajudou a ganhar um contrato do governo. (3) Algum consegue um emprstimo do governo, mas que demora muito a sair. Como ela tem um parente no governo consegue liberar o emprstimo mais rpido. No nosso banco de dados, estas variveis esto nomeadas docrapido, natal e emprestimo. As trs, claro tm as mesmas categorias:> levels(pesb$docrapido) [1] [3] [5] [7] [9] [1] [3] [5] [7] [9] [1] [3] [5] [7] [9] "Favor" "Mais jeitinho do que favor" "Mais jeitinho do que corrupo" "Corrupo" "NS" "Favor" "Mais jeitinho do que favor" "Mais jeitinho do que corrupo" "Corrupo" "NS" "Favor" "Mais jeitinho do que favor" "Mais jeitinho do que corrupo" "Corrupo" "NS" "Mais favor do que jeitinho" "Jeitinho" "Mais corrupo do que jeitinho" "NR"

> levels(pesb$emprestimo) "Mais favor do que jeitinho" "Jeitinho" "Mais corrupo do que jeitinho" "NR"

> levels(pesb$natal) "Mais favor do que jeitinho" "Jeitinho" "Mais corrupo do que jeitinho" "NR"

Mesmo utilizando apenas essas trs variveis, a quantidade de nmeros a serem visualizados em tabelas cruzadas tornaria difcil a interpretao dos dados. Em situaes como essas, til construir um ndice que sumarize as informaes de um conjunto de variveis. Assim, vamos utilizar da PESB as variveis docrapido, natal e emprestimo para construir um ndice de percepo da corrupo, ipc (no presente no livro de Almeida). Antes, entretanto da construo do ndice, vamos eliminar das variveis as respostas NS e NR:> pesb$emprestimo[pesb$emprestimo == "NS" | pesb$emprestimo == + "NR"] pesb$docrapido[pesb$docrapido == "NS" | pesb$docrapido == + "NR"] pesb$natal[pesb$natal == "NS" | pesb$natal == "NR"] pesb$ipc attr(pesb$ipc, "label") table(pesb$ipc) 0 95 18 108 1 12 2 18 3 97 4 49 5 6 55 222 7 82 8 9 10 11 12 13 14 15 93 220 120 142 275 136 124 146 16 98 17 66

Nas seo seguinte teremos oportunidade de utilizar o ndice. O atributo label adicionado ao objeto ipc ser utilizado pela funo compmeans() para criar o ttulo da tabela impressa na tela (ver Figura 6.2).

60

CAPTULO 6. ANLISE DESCRITIVA

6.3

Uma varivel numrica e outra categrica

Quando queremos saber a relao entre uma varivel numrica e outra categrica, a anlise descritiva mais adequada a comparao do valor mdio da varivel numrica segundo as diversas categorias da categrica, mas, antes de fazer essa comparao, vamos usar a funo levels() para abreviar os nomes das regies e, assim, melhorar a aparncia da tabela e do grco que sero produzidos:

> levels(pesb$regiao) [1] "Centro-Oeste" "Nordeste" [5] "Sul" "Norte" "Sudeste"

> levels(pesb$regiao) compm compm Valor mdio de "ndice de percepo de corrupo" segundo "Estrato-Regio do pas" Mdia N Desv. Pd. CO 10.959567 149 4.401661 NE 8.705418 580 4.894689 N 10.717111 106 4.372350 SE 11.047238 1005 4.159193 S 10.993303 351 4.317077 Total 10.397203 2191 4.528028

Na tabela de comparao de mdias acima, temos o valor mdio do ipc segundo a Regio, o nmero de indivduos entrevistados em cada Regio (N), e o desvio padro do ipc dos indivduos segundo a Regio. Ao plotarmos o objeto resultante da funo compmeans(), obtemos o conjunto de diagramas de caixa mostrados na Figura 6.2.Alguns programas de estatstica permitem denir uma varivel como o peso a ser utilizado nas anlises. No R isso no possvel, sendo necessrio fornecer o peso como argumento para cada uma das funes que incluem essa opo.1

6.3. UMA VARIVEL NUMRICA E OUTRA CATEGRICA> plot(compm, ylab = "Percepo de corrupo", xlab = "Regio do pas", + col = "lightgray")

61

Percepo de corrupo

5

10

15

q q q

0

CO

NE

N Regio do pas

SE

S

Figura 6.2: Diagramas em caixa: percepo da corrupo segundo a Regio

As pessoas das regies com ipc mais alto, em mdia, interpretam em maior proporo as situaes apresentadas como casos de corrupo (algo negativo) do que de jeitinho (algo aceitvel) ou favor (algo positivo) e suponho que elas se sentiro mais inibidas em praticar atos semelhantes do que aquelas que consideram que as situaes representam casos de jeitinho ou favor. Na Figura 6.3, temos um grco de densidade condicional tambm ilustrando a relao entre percepo da corrupo e regio de moradia dos entrevistados. Os nordestinos constituem mais da metade dos que tm baixa percepo de corrupo e menos de 20% dos que tm a mais alta percepo de corrupo.

62

CAPTULO 6. ANLISE DESCRITIVA

> b cdplot(b$ipc, b$regiao, xlab = "IPC", ylab = "Regio")1.0 S SE Regio N NE CO 5 IPC 10 15

Figura 6.3: Grco de densidade condicional: regies segundo a percepo de corrupo

6.4

Duas variveis categricas

Para saber se existe alguma correlao entre duas variveis categricas, podemos fazer uma tabela cruzada e produzir um grco com as duas variveis. As funes que fazem isso so table() e plot() (ver Figura 6.4). Nesta seo, exemplicaremos como fazer anlise de duas variveis categricas, vericando se diferentes religies atraem igualmente homens e mulheres.

> table(pesb$religiao, pesb$sexo) Feminino Masculino 1 6 1 1 3 5 902 772 47 23 66 42 167 92 1 0 30 19 57 75 3 1 4 3 13 12 5 4 5 4

Ateu Budista Candombl Catlica Esprita kardecista Evanglica no-pentecostal Evanglica pentecostal Judaica Mormon, Adventista, Testemunha de Jeov No tem religio NR NS Santo Daime, Esotrica, Outras Seisho-N-I, Messinica Umbanda

0.0

0.2

0.4

0.6

0.8

6.4. DUAS VARIVEIS CATEGRICAS> plot(pesb$religiao, pesb$sexo, xlab = "Religio", ylab = "Sexo")1.0

63

Masculino

Sexo

Feminino

Ateu

Catlica

Esprita kardecista Religio

NR

Figura 6.4: Grco mosaico: religio e sexo do indivduo

A tabela acima e a Figura 6.4 precisam de algumas melhorias. Um primeiro problema a ser resolvido a eliminao das categorias com pequeno nmero de casos. Vamos criar uma nova varivel, rlg, reunindo algumas categorias e eliminando outras:> library(memisc) > pesb$rlg sen$escola.superior options(scipen = 1000) > plot(sen$vgasto, sen$votos, log = "xy", xlab = "Gasto (R$)", + ylab = "Votao")10000000q q q q qq qq q q q qq q q q q qq q q q q q q q qq q q q q q q q q q qq q q q q q qq q q qq q q q q q q q q qq q q qq q q q q q q q q q q q q qq q q q q q q q q q q q q q q q qq q q q q q q q q q q q q q q q q q q q qq q q q q q q q q q q q q q q q q q qq q

100000

1000000

Votao

q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q qq q q q q q q qq q q q q

10000

q q q q

q

q q q q

1000

q

q

5000

50000

500000 Gasto (R$)

5000000

Figura 6.7: Diagrama de disperso: votao segundo os gastos de campanha

possvel perceber uma maior densidade dos pontos nas intersees entre baixo gasto e baixa votao e entre alto gasto e alta votao, mas seria preciso fazer uma anlise de regresso para saber o valor exato dessa correlao e sua signicncia estatstica. O que ainda podemos fazer nos limites da proposta deste captulo converter as variveis em categricas e utilizar compmeans() e crosstab() para vericar a existncia de relao entre elas. A converso de uma varivel numrica em categrica pode ser feita com a funo cut(), como vimos na seo 5.6:

> sen$gastos sen$votac vg plot(vg, ylab = "Votao", xlab = "Gasto declarado", + col = "lightgray", log = "y")10000000q q q q q q q

67

1000000

q q q q q

100000

Votao

q q q q q q q q

1000

10000

Baixo

Mdio Gasto declarado

Alto

Figura 6.8: Diagramas em caixa: votao segundo os gastos de campanha

Tambm podemos apresentar uma tabela cruzada com as duas novas variveis categricas:

> ct2 ct2 Contedo das clulas |-------------------------| | Contagem | |-------------------------|

===================================== Baixa Mdia Alta Total ------------------------------------Baixo 70 14 0 84 ------------------------------------Mdio 13 26 13 52 ------------------------------------Alto 4 15 47 66 ------------------------------------Total 87 55 60 202 =====================================

Para evitar que o grco produzido por crosstab() apresente a categoria Baixa Votao na parte superior do grco e Alta Votao na parte inferior, acrescentaremos o argumento inv.y = TRUE (inverter a ordem das categorias no eixo y). O resultado a Figura 6.9.

68

CAPTULO 6. ANLISE DESCRITIVA

> plot(ct2, xlab = "Gasto declarado", ylab = "Votao", inv.y = TRUE)Alta Baixo Mdio Alto

VotaoBaixa

Mdia

Gasto declarado

Figura 6.9: Grco mosaico: votao segundo os gastos de campanha As guras 6.8 e 6.9, contendo, respectivamente, diagramas em caixa e um grco mosaico, apresentam mais claramente a existncia de correlao entre gastos de campanha e votao do que o grco de disperso da Figura 6.7, sendo boas alternativas de apresentao visual dos dados quando se prefere no utilizar anlise de regresso para demonstrar a relao entre duas variveis numricas. Neste captulo, no vamos mais precisar dos dados sobre senadores e, portanto, vamos remover o objeto sen da rea de trabalho:> rm(sen)

6.6

Sries temporais

Usamos a funo ts() para converter um vetor numrico em objeto da classe ts (srie temporal). A funo recebe como argumentos obrigatrios o vetor de nmeros, e os parmetros de tempo inicial (start) e nal (end). No exemplo a seguir, criamos duas sries temporais, relativas ao nmero de ocorrncias de furtos consumados e de latrocnios no Estado de So Paulo no perodo de 1997 a 2004.4 O nmero de furtos quase mil vezes maior do que o nmero de latrocnios e, para melhor visualizao das duas variveis num nico grco, dividimos o nmero de furtos por 1000 no momento de criar a srie temporal.> + > > > fur > > > + > > >

ts.fur levels(atitude) library(gdata) > atitude library(memisc) > rendafam summary(step(modelo2, trace = 0)) Call: lm(formula = log.votos ~ log.vgasto + instr + idade + sexo, data = sen) Residuals: Min 1Q -4.6280 -1.0404 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -3.08745 1.01517 -3.041 0.002676 ** log.vgasto 0.86001 0.07240 11.878 < 2e-16 *** instrAlto 1.03055 0.29627 3.478 0.000621 *** idade 0.03329 0.01184 2.811 0.005441 ** sexoMasculino -0.63553 0.34899 -1.821 0.070115 . --Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1 Residual standard error: 1.757 on 197 degrees of freedom Multiple R-squared: 0.5255, Adjusted R-squared: 0.5159 F-statistic: 54.55 on 4 and 197 DF, p-value: < 2.2e-16

Median 0.1716

3Q 1.3601

Max 4.3287

Neste caso, se houvesse interesse em tentar manter a varivel estado civil no modelo, uma alternativa ao uso de stepwise seria a reduo do nmero de categorias da varivel est.civil. Podemos ver pelo sumrio do modelo2, antes do procedimento step wise, que, em relao categoria Casado, todas as demais categorias tem impacto negativo sobre a votao recebida pelo candidato. Vamos, portanto, criar uma nova varivel, indicando simplesmente se o candidato casado ou no e produzir um novo modelo de regresso:> sen$casado eleito modelo4 summary(modelo4) Call: glm(formula = eleito ~ log.vgasto + idade, family = binomial(link = "logit"), data = sen) Deviance Residuals: Min 1Q Median -1.55396 -0.55878 -0.27858 Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) -18.46727 4.02185 -4.592 4.4e-06 *** log.vgasto 0.98354 0.25983 3.785 0.000153 *** idade 0.04421 0.02067 2.138 0.032502 * --Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1 (Dispersion parameter for binomial family taken to be 1) Null deviance: 158.89 Residual deviance: 123.32 AIC: 129.32 on 201 on 199 degrees of freedom degrees of freedom

3Q -0.08332

Max 2.51121

Number of Fisher Scoring iterations: 6

No possvel calcular a estatstica R2 para modelos de regresso logsticos, mas a funo LogRegR2() do pacote descr calcula algumas das estatsticas comumente utilizadas em substituio ao R2 :> library(descr) > LogRegR2(modelo4) Qui2 35.57142 Gl 2 Sig. 1.886969e-08 ndice de Cox & Snell 0.1614626 ndice de Nagelkerke 0.2964782 0.2238747 R2 de McFadden

78

CAPTULO 7. QUI-QUADRADO E REGRESSO

Captulo 8 GrcosNeste captulo, veremos como modicar o comportamento padro do R ao criar grcos e como adicionar novos elementos a grcos j criados. Os grcos so criados por funes especcas, muitas das quais j foram vistas nos captulos anteriores. Aps a cham