Escolar Documentos
Profissional Documentos
Cultura Documentos
R Cientistas
R Cientistas
Ilhus Bahia
2014
DIRETORA DA EDITUS
RITA VIRGINIA ALVES SANTOS ARGOLLO
Conselho Editorial:
Rita Virginia Alves Santos Argollo Presidente
Andra de Azevedo Morgula
Andr Luiz Rosa Ribeiro
Adriana dos Santos Reis Lemos
Dorival de Freitas
Evandro Sena Freire
Francisco Mendes Costa
Jos Montival Alencar Jnior
Lurdes Bertol Rocha
Maria Laura de Oliveira Gomes
Marileide dos Santos de Oliveira
Raimunda Alves Moreira de Assis
Roseanne Montargil Rocha
Slvia Maria Santos Carvalho
SUMRIO
SUMRIO
IV
LISTA DE FIGURAS
VII
LISTA DE TABELAS
IX
APRESENTAO
PRIMEIROS PASSOS
2.1 Apresentao do R . . . . . . . . . . . . . . . . . .
2.2 Iniciando e finalizando o R . . . . . . . . . . . .
2.3 Obtendo ajuda . . . . . . . . . . . . . . . . . . . . .
2.4 Criando, destruindo, salvando objetos . . . .
2.5 Tipos de variveis . . . . . . . . . . . . . . . . . . .
2.6 Operadores matemticos e lgicos . . . . . . .
2.7 Usando um editor de textos . . . . . . . . . . . .
2.8 Milhares de funes em milhares de pacotes
2.9 Rcmdr . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
4
5
9
13
14
16
18
19
.
.
.
.
.
.
.
.
20
20
20
24
24
28
29
31
32
SUMRIO
3.3
4
Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
37
37
40
42
45
46
48
48
49
50
51
52
52
53
55
55
59
59
60
65
67
67
68
69
70
ANLISE DESCRITIVA
6.1 Variveis de um banco de dados na rea de trabalho .
6.2 Construo de ndices . . . . . . . . . . . . . . . . . . . . . . .
6.3 Uma varivel numrica e outra categrica . . . . . . . .
6.4 Duas variveis categricas . . . . . . . . . . . . . . . . . . .
6.5 Duas variveis numricas . . . . . . . . . . . . . . . . . . . .
6.6 Sries temporais . . . . . . . . . . . . . . . . . . . . . . . . . . .
73
73
75
77
79
83
87
34
QUI-QUADRADO E REGRESSO
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
89
SUMRIO
7.1
7.2
7.3
7.4
8
Qui-Quadrado . . . . . . .
Regresso linear . . . . . .
Procedimento step wise .
Regresso logstica . . . .
VI
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
89
91
96
97
GRFICOS
8.1 Ttulo, subttulo e rtulos . . . . . . . . . . . . .
8.2 Cores . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3 Adicionar pontos, linhas, polgonos, textos .
8.4 Parmetros globais . . . . . . . . . . . . . . . . . .
8.5 Legendas . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
99
100
101
102
105
110
.
.
.
.
.
111
111
113
114
115
118
.
.
.
.
.
.
.
.
120
120
123
124
125
126
130
131
133
PRODUO DE RELATRIOS
9.1 Resultado em texto plano . . . . . . .
9.2 Mapa de bits versus grfico vetorial
9.3 Insero de grficos em relatrios . .
9.4 R e Markdown . . . . . . . . . . . . . . .
9.5 R e LATEX . . . . . . . . . . . . . . . . . . . .
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() . . . .
10.7 Loops for e while . . . . . . . . . . .
10.8 A funo source() . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11 MAPAS
134
140
GLOSSRIO
151
NDICE REMISSIVO
152
BIBLIOGRAFIA
156
LISTA DE FIGURAS
4.1
37
5.1
5.2
5.3
5.4
.
.
.
.
61
62
63
64
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
6.10
74
78
79
80
82
83
84
85
86
88
7.1
7.2
93
95
8.1
8.2
8.3
8.4
Ferramentas de desenho . . . . . . . . . . . . . . . . . . . .
Grfico de barras de varivel com rtulos longos . . .
Grfico de barras de varivel com rtulos longos (II)
Exemplos de legendas . . . . . . . . . . . . . . . . . . . . . .
9.1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
103
108
109
110
LISTA DE FIGURAS
VIII
Sociograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sociogramas dos graus de centralidade e intermediao
Sociogramas dos graus de centralidade . . . . . . . . . . . .
Identificao de grupos I . . . . . . . . . . . . . . . . . . . . . . .
Identificao de grupos II . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
141
144
145
147
148
LISTA DE TABELAS
2.1
2.2
2.3
12
12
15
6.1
74
ix
CAPTULO 1
APRESENTAO
O 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 documentos 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, eficcia.
Este no um livro de estatstica e, apenas de forma muito introdutria, pode ser considerado um manual de anlise de dados. O
objetivo deste livro introduzir o leitor no uso do R, com foco nas principais tarefas que um cientista social precisa executar quando comea
a manusear um banco de dados. Quando comecei a escrev-lo, no encontrei textos que tivessem propsito semelhante em portugus e nem
mesmo em ingls disponveis livremente na internet. Havia apenas
um livro, em francs, disponvel na internet, R pour les sociologues, de
Barnier (2008). Hoje, j existem mais opes, inclusive em portugus
(LANDEIRO, 2011).
Este livro deve ser lido de uma maneira que no habitual para
cientistas sociais. No basta fazer uma ou duas leituras, refletir e discutir sobre o assunto com os colegas. preciso fazer uma leitura no
apenas reproduzindo os comandos no R, mas imaginando e testando
1
APRESENTAO
CAPTULO 2
PRIMEIROS PASSOS
2.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 grfica 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 flexibilidade e rapidez,
mas tem um preo: todos os objetos ficam 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 problemticas nos demais. Algumas so fceis de instalar e
no exigem nenhuma configurao especial; outras, para funcionar,
precisam ser cuidadosamente configuradas. Na maioria das interfaces,
o modo bsico de uso consiste em editar o cdigo no editor e enviar os
INICIANDO E FINALIZANDO O R
2.3
7, 8, 9, 10, 11)
OBTENDO AJUDA
setwd("/tmp")
help(demo)
?quit
Quando no lembramos do nome exato de uma funo, podemos obter uma lista de todas 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 de 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 suficiente para localizar o comando de que precisamos, uma 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")
[1] LC_CTYPE=pt_BR.UTF-8
[3] LC_TIME=pt_BR.UTF-8
[5] LC_MONETARY=pt_BR.UTF-8
LC_NUMERIC=C
LC_COLLATE=pt_BR.UTF-8
LC_MESSAGES=pt_BR.UTF-8
[7] LC_PAPER=pt_BR.UTF-8
[9] LC_ADDRESS=C
LC_NAME=C
LC_TELEPHONE=C
#
#
#
graphics
grDevices utils
datasets
methods
# [7] base
#
# other attached packages:
# [1] knitr_1.5
vimcom.plus_1.0-0 setwidth_1.0-3
# [4] colorout_1.0-3
#
# loaded via a namespace (and not attached):
# [1] evaluate_0.5.5 formatR_0.10
highr_0.3
# [5] tools_3.1.0
2.4
stringr_0.6.2
listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br.
10
x <- 3.1415926
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 especificada de dgitos:
print(x, digits = 3)
# [1] 3.14
[1]
11
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
# [22] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
# [43] 47 48 49 50 51 52 53 54 55 56 57 58 59 60
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p"
# [17] "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
12
diga qual a pasta de trabalho atual). Para configurar uma pasta diferente deve-se usar setwd(). As tabelas 2.1 e 2.2 listam trs importantes
pastas do Linux e de verses mais recentes do Windows, 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.
Tabela 2.1: Localizao de pastas no Linux
Nome fantasia
Localizao real
Pasta pessoal
rea de trabalho
Pendrive
/home/estudante ou ~/
/home/estudante/Desktop
/media/RotuloDoPendrive
Nome fantasia
Localizao real
Pasta pessoal
rea de trabalho
C:/Users/estudante/Desktop
Pendrive
ou ~/../Desktop
F:/ (ou outra letra)
C:/Users/estudante/Meus documentos ou ~/
13
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()
2.5
TIPOS DE VARIVEIS
14
15
operadores lgicos do R devem ser novidade para muitos leitores. Observe que o smbolo == tem significado diferente do smbolo = utilizado
para atribuir valores a argumentos de funes.
Tabela 2.3: Operadores matemticos e lgicos
Operador
+
/
*
^
>
<
Significado
soma
subtrao
diviso
multiplicao
exponenciao
MAIOR QUE
MENOR QUE
Operador
>=
<=
&
|
==
!
!=
Significado
MAIOR OU IGUAL A
MENOR OU IGUAL A
E
OU
IGUAL A
NO
DIFERENTE DE
Note que, ao contrrio dos clculos que aprendemos a fazer manualmente no Ensino Fundamental, no se usa colchetes e chaves nas
16
2.7
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 algumas
17
das interfaces grficas para o R no acrescentam a extenso automaticamente, ficando 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
Grficos, 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, como o RStudio, 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 definitiva 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 fica mais
conciso e fcil de ler. Por exemplo, as funes ls(), summary(), str(),
names(), getwd(), dir(), levels() e dput() comumente so mais
teis no console do que no script. Os significados 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, configurando
18
O R iniciado com pouco mais de 2000 funes e outros objetos na memria. Milhares de outras funes, para as mais diversas
tarefas, podem ser adicionadas por meio de pacotes (packages) disponveis livremente na internet.2 claro que ningum precisa de todas
as funes do R; neste livro, utilizaremos em torno de 120.
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
2
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.9. RCMDR
19
com privilgios de administrador para que os pacotes fiquem disponveis para todos os usurios do sistema. Se o R no estiver sendo
executado com privilgios de administrador, os pacotes instalados
ficaro 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)
2.9
RCMDR
CAPTULO 3
VETORES, MATRIZES,
LISTAS
3.1
VETORES
Criando
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 = "character", length = 5)
# [1] "" "" "" "" ""
vector(mode = "numeric", length = 7)
# [1] 0 0 0 0 0 0 0
vector(mode = "logical", length = 4)
# [1] FALSE FALSE FALSE FALSE
20
3.1. VETORES
21
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]
3 11
TRUE FALSE
TRUE
TRUE FALSE
TRUE FALSE
TRUE
TRUE
TRUE
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 <- c("Sim", "No", NA, "Sim", "Sim", NA, "No", NA, "Sim", "Sim")
txt
#
"Sim" "Sim" NA
"No" NA
"Sim" "Sim"
[1] 10
3.1. VETORES
22
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
"Texto"
"7"
"Outro texto"
3.1. VETORES
23
[1] Sim
No
<NA> Sim
Sim
<NA> No
<NA> Sim
Sim
# Levels: No Sim
Ao imprimir um vetor do tipo factor, observe que o R exibe os rtulos dos valores e no os valores numricos, e 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 <- c(23, 22, 23, 23, 22, 22, 23, 22)
uf <- factor(codigo, levels = c(22, 23), labels = c("Piau", "Cear"))
uf
# [1] Cear Piau Cear Cear Piau Piau Cear Piau
# Levels: Piau Cear
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. VETORES
24
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:
idh05 <- c(0.677, 0.742, 0.723, 0.683, 0.718, 0.718, 0.703, 0.738,
0.742)
names(idh05) <- c("AL", "BA", "CE", "MA", "PB", "PE", "PI", "RN", "SE")
idh05
#
AL
BA
CE
MA
PB
PE
PI
RN
SE
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(idh05)
# [1] "AL" "BA" "CE" "MA" "PB" "PE" "PI" "RN" "SE"
Obtendo informaes
Existem diversas funes teis para se obter informaes sobre vetores e outros tipos de objetos. Para exemplificar 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(idh05)
# [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:
3.1. VETORES
25
"logical"
"factor"
"logical"
"numeric"
No caso de objetos de classe factor, podemos usar a funo levels() para saber quais so os rtulos das categorias:
levels(rspt)
# [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
FALSE
TRUE
NA's
# logical
Median
summary(idh05)
#
#
0.677
0.703
0.718
0.738
Max.
0.742
summary(rspt)
#
No
Sim NA's
5
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
3.1. VETORES
26
0%
25%
50%
75%
100%
3.1. VETORES
27
str(txt)
#
str(lgc)
#
str(idh05)
# Named num [1:9] 0.677 0.742 0.723 0.683 0.718 0.718 0.703 0.738 0.742
#
str(rspt)
#
Por fim, 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", NA, "No", NA, "Sim", "Sim"
# )
dput(uf)
# structure(c(2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L), .Label = c("Piau",
# "Cear"), class = "factor")
3.1. VETORES
28
Convertendo
O R possui diversas funes para converter vetores de um tipo em
outro. Na pgina 23, vimos como usar a funo as.factor() para converter um vetor do tipo character em factor. Convencionalmente,
as funes que fazem converso de um tipo para outro tm o prefixo
as seguido de um ponto e do nome da classe de destino.
Qualquer tipo de vetor pode ser convertido num vetor do tipo
character:
as.character(c(TRUE, FALSE, TRUE, FALSE))
# [1] "TRUE"
"FALSE" "TRUE"
"FALSE"
"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 NAs:
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
[1]
1 NA
2 NA
1 NA
3.1. VETORES
29
as.character(rspt)
#
"Sim" "Sim" NA
"No" NA
"Sim" "Sim"
TRUE
TRUE FALSE
TRUE
TRUE
NA FALSE
TRUE
NA
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
3.1. VETORES
30
Como vimos na seo 3.1, 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:
names(x) <- z
x
# a b c d e f g h i
# 4 8 2 6 7 1 8 1 2
3.1. VETORES
31
7 11
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 <- c(5, 2, 4, 3, 2)
y <- c(1, 3, 2, 5, 2)
x + y
# [1] 6 5 6 8 4
x - y
# [1]
4 -1
2 -2
x > y
# [1]
TRUE FALSE
x == y
# [1] FALSE FALSE FALSE FALSE
TRUE
x != y
# [1]
TRUE
TRUE
TRUE
TRUE FALSE
3.2. MATRIZES
32
Se um dos vetores for maior do que o outro, o menor ser reciclado, ou seja, os elementos sero reutilizados quantas vezes isso for
necessrio para completar a operao:
x <- c(1, 2, 3)
y <- c(1, 1, 1, 4, 4, 4)
x + y
# [1] 2 3 4 5 6 7
No exemplo acima, o comprimento de y mltiplo do comprimento de x, e o R no emite nenhum aviso de possvel problema porque
muito comum precisarmos fazer operaes com vetores de comprimentos diferentes. Por exemplo, ao somar o valor 1 ao vetor y, estamos,
na verdade, somando 1 a cada elemento de y, ou seja, estamos reciclando o vetor 1:
y + 1
# [1] 2 2 2 5 5 5
Entretanto, se o vetor maior no for mltiplo do vetor menor, haver um aviso, porque, provavelmente, se trata de um erro de programao. Exemplo:
x <- c(1, 5, 7)
y <- c(1, 2, 3, 4, 5, 6, 7)
x + y
# [1]
3.2
7 10
5 10 13
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()
3.2. MATRIZES
33
# [1,]
9 10
# [2,]
# [3,]
8 10
# [4,] 10
# [5,]
rbind(x, y, z)
#
# x
10
# y
10
# z
10
Vamos agora salvar a matriz resultante da funo cbind() no objeto m, e usar a funo colnames() para atribuir nomes s colunas, e a
funo rownames() para atribuir nomes s linhas:
m <- cbind(x, y, z)
colnames(m) <- c("Matemtica", "Portugus", "Histria")
rownames(m) <- c("Helena", "Jos", "Maria", "Francisco", "Macunama")
m
#
# Helena
10
# Jos
# Maria
10
# Francisco
10
# Macunama
3.3. LISTAS
34
m[5, 3]
# [1] 2
m[1:3, 2]
# Helena
#
Jos
Maria
10
m[c(1, 4), 1]
#
#
Helena Francisco
7
10
Portugus Matemtica
10
Helena
Jos
10
m["Macunama", ]
# Matemtica
#
Portugus
Histria
3.3
LISTAS
3.3. LISTAS
35
TRUE FALSE
TRUE FALSE
lista[[3]]
# [1]
TRUE FALSE
3.3. LISTAS
36
"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
CAPTULO 4
CARREGAR BANCO DE
DADOS EXISTENTE
4.1
INTRODUO
1
2
3
4
5
sexo
Masculino
Feminino
Feminino
Masculino
Feminino
idade
40
37
17
13
10
estado.civil
casado
casado
solteiro
solteiro
solteiro
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
numa nica list. Assim como uma matrix, todas as colunas de um
37
4.1. INTRODUO
38
b
#
# 1 Masculino
40
# 2
Feminino
37
casado
# 3
Feminino
17
solteiro
# 4 Masculino
13
solteiro
# 5
10
solteiro
Feminino
casado
casado solteiro
2
Todas as operaes vlidas para vetores tambm podem ser aplicadas s colunas de um data.frame. Exemplo:
b$estado.civil[3] <- "casado"
summary(b$estado.civil)
#
casado solteiro
#
1
O R no possui funes adequadas para a entrada de uma grande quantidade de
dados. Para esse propsito, melhor utilizar algum outro software, como o LibreOffice
Calc com a opo de Janela / Congelar, ou criar um formulrio para entrada de dados
no LibreOffice Base.
4.1. INTRODUO
39
Como todos os objetos do R, data.frames devem ser salvos em arquivos com extenso RData, usando save(), e carregados com load()
e, portanto, no precisam ser especialmente discutidos neste captulo.
Arquivos no formato dta, o formato utilizado pelo STATA, so muito
bem operados pelo R. Eles podem ser lidos com a funo read.dta() e
tambm no sero discutidos aqui. Os procedimentos expostos neste
captulo se aplicam a bancos de dados salvos por outros programas.
Se o leitor tiver necessidade de utilizar um banco de dados preparado por outra pessoa e tiver oportunidade de escolher o tipo de
arquivo a ser utilizado, a melhor opo seria um arquivo RData com
todas as variveis categricas j rotuladas. A segunda melhor opo
seria um banco de dados no formato dta, se todas as variveis categricas j estiverem rotuladas. A terceira melhor opo seria um banco
de dados no formato sav, o formato utilizado pelo SPSS porque ele
geralmente j est com todas as variveis categricas rotuladas e, se
tiver sido bem preparado, com poucos problemas a serem corrigidos.
Outra opo seria um arquivo csv salvo com os rtulos das variveis
categricas e no com nmeros que ainda teriam que ser transformados em factors. Por fim, um arquivo csv, cujas variveis categricas
ainda precisam ser rotuladas (mas, se for fornecido um script do R para
carregar o banco de dados e codificar as variveis, essa ltima opo
se tornar a melhor de todas).
Nos procedimentos das prximas sees, sero trabalhados os
arquivos iniciados com o prefixo bd_ contidos no arquivo RparaCSdados.tar.gz (ou zip, se seu sistema operacional for Windows).2 Eles
contm dados de candidatos ao Senado nas eleies de 2006 salvos
em diferentes formatos.3 Alguns dos arquivos possuem dados que
aos serem carregados no R j estaro prontos para serem utilizados
em anlises estatsticas. Outros, aps carregados, ainda precisaro
ser manipulados. No conjunto, os diferentes bancos exemplificam as
situaes mais comuns com as quais os cientistas sociais se deparam
2
40
ARQUIVOS SAV
41
library(foreign)
b <- read.spss("bd_exemplo.sav", to.data.frame = TRUE)
candidat
partido
idade
sexo
"uf" "candidato"
uf
"partido"
"idade"
"sexo"
resultad
# "resultado"
42
procedimento para descobrir quais colunas possuem valores ou rtulos de valores duplicados examinando o atributo label.table do
data.frame criado pela funo read.spss(), como exemplificado na
seo 10.5 (pgina 127). O atributo label.table somente adicionado
ao data.frame quando o valor do argumento to.data.frame FALSE.
A soluo para problemas desse tipo pode ser importar o banco de
dados sem aproveitar os rtulos das variveis categricas,
b <- read.spss("bd_exemplo.sav", use.value.labels = FALSE,
to.data.frame = FALSE)
ARQUIVOS CSV
43
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 separador de decimais e os valores textuais esto limitados por
aspas (quotation marks) duplas. Logo, o comando para abrir este arquivo ser:
b1 <- read.table("bd_exemplo1.csv", header = TRUE, sep = " ",
dec = ",", quote = '"')
Aps carregar cada banco dos exemplos desta seo, use a funo
summary() para conferir se a operao foi realizada com sucesso. Por
exemplo:
summary(b1)
#
uf
candidato
partido
SP
: 15
PSOL
RJ
: 11
PFL
: 15
MG
: 10
PDT
: 14
RS
: 10
PSDB
: 13
DF
PSTU
: 13
: 17
MA
(Other):138
logvotos
44
(Other)
:196
sexo
PCB
: 12
(Other):118
resultado
Min.
: 5.79
Feminino : 30
Eleito
Masculino:172
No eleito:175
: 27
Median :10.21
Mean
3rd Qu.:12.79
Max.
:10.52
:16.01
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 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
# "SP","ALDA MARCO ANTONIO","PMDB",13.742,"Feminino","No eleito"
# "GO","ALDO SILVA ARANTES","PC do B",11.659,"Masculino","No eleito"
b2 <- read.table("bd_exemplo2.csv", header = TRUE, sep = ",",
quote = '"')
45
No ltimo exemplo, o separador de valores o caractere de tabulao, o qual, por ser um caractere no imprimvel, no R, representado
por \t, e no h smbolo delimitador de textos:
file.head("bd_exemplo4.csv")
# uf\tcandidato\tpartido\tlogvotos\tsexo\tresultado
# RO\tACIR MARCOS GURGACZ\tPDT\t12.257\tMasculino\tNo eleito
# ES\tAFONSO CEZAR CORADINE\tPSOL\t9.937\tMasculino\tNo eleito
# DF\tAGNELO SANTOS QUEIROZ FILHO\tPC do B\t13.207\tMasculino\tNo ele
# SP\tALDA MARCO ANTONIO\tPMDB\t13.742\tFeminino\tNo eleito
# GO\tALDO SILVA ARANTES\tPC do B\t11.659\tMasculino\tNo eleito
b4 <- read.table("bd_exemplo4.csv", header = TRUE, sep = "\t",
quote = '')
4.4
8
No Windows, poder ser necessrio instalar ActivePerl ou outro interpretador da
linguagem perl.
46
PDT
4411
PSOL
5111
PC do B4811
PMDB
PC do B6811
PV
6221
5611
Em muitas verses do Linux, as mdb-tools podem ser instaladas a partir do gerenciador de software do sistema operacional. Em alguns sistemas, deve ser instalado
o pacote mdbtools.
10
Abreviatura de Pesquisa Nacional por Amostragem de Domiclio
47
2
39
7
2
Nome da
varivel
V001
V002
V003
V004
51
V005
Sexo
52
V006
Resultado
Tamanho
Rtulo da
varivel
Estado
Candidato
Partido
Idade
Categorias
Valor Rtulo
1
2
1
2
Masculino
Feminino
No Eleito
Eleito
O comando acima poder falhar se o arquivo contiver uma codificao de caracteres incompatvel com o sistema operacional. O
caso mais frequente ser a necessidade de carregar no Linux um banco
de dados criado com a codificao de caracteres utilizada no Windows. Neste caso, poderemos usar as funes readLines(), toUTF8()
e writeLines para, respectivamente, ler as linhas presentes no arquivo,
recodificar os caracteres para UTF-8 e escrever uma nova verso do
arquivo (para maiores detalhes, ver a seo 4.6):
tmp <- readLines("bd_largurafixa.txt")
tmp <- toUTF8(tmp)
writeLines(tmp, "bd_lfx.utf8.txt")
bf <- read.fwf("bd_lfx.utf8.txt", widths = c(2, 39, 7, 2, 1, 1),
colClasses = c("factor", "character", "factor",
rep("numeric", 3)))
48
SOLUO DE PROBLEMAS
49
Espaos excedentes
Alguns bancos de dados trazem variveis do tipo texto ou os valores de variveis categricas com espaos em branco adicionais para
completar uma largura pr-definida pelo programa em que o banco de
dados foi gerado. Esses espaos podem ser eliminados com a funo
trim(), do pacote gdata. possvel fornecer um data.frame como
argumento para a funo, o que implicar na remoo dos espaos
desnecessrios de todas as variveis que os contenham. Segue um
exemplo simples do uso da funo trim() (o argumento recode.factor
= FALSE evita que as categorias das variveis categricas sejam reordenadas):
library(gdata)
trim("
PCB
2
# PMDB
#
PMN
12
# PSB
#
PDT
9
PPS
PSDB
PTC
4
6
PP
PSC
# PTB
#
PC do B PCO
12
PRB
4
PSDC
13
3
12
7
8
PL
2
PRP
5
PSOL
PV
2
PHS
15
PRONA
PSL
PT do B PTN
4
PFL
14
5
PSTU
17
2
PRTB
6
PT
13
10
PCB PC do B
50
PAN
PCO
PDT
PFL
PHS
12
14
15
PL
2
PMDB
PMN
PP
PPS
PRB
PRONA
PRP
PRTB
12
PSB
PSC
PSDB
PSDC
PSL
PSOL
PSTU
PT
13
12
17
13
10
PTC PT do B
PTN
PV
PTB
51
52
A classe correta para variveis categricas que podem ser consideradas ordenveis ordered. Nem sempre variveis categricas
aparentemente ordenveis devem ser classificadas como ordered. A
varivel idade, por exemplo, se convertida em categrica, em geral, no
dever ser convertida em ordered porque muitas das caractersticas
dos indivduos atingem intensidade mxima ou mnima durante
a fase adulta da vida da pessoa, e no durante a infncia ou velhice.
Uma varivel muito comum, a escolaridade, por outro lado, fica mais
corretamente classificada como ordered do que simplesmente como
factor. Para converter uma varivel em ordered, utilizamos a funo
ordered() ou as.ordered().
Converso de datas
Alguns bancos de dados possuem datas como variveis. Essas
variveis podem ser lidas pelo R como se fossem texto para, em seguida,
serem convertidas em objetos da classe Date. A funo para converter
de character para data as.Date(). No exemplo abaixo, so criados
dois pequenos vetores, cada um com apenas duas datas expressas na
forma de texto. Observando as datas com ateno, percebemos que em
53
54
12
13
Disponvel em http://www.lepem.ufc.br/jaa/sav2dat.html.
Ver http://www.gnu.org/software/pspp/.
CAPTULO 5
MANIPULANDO BANCOS
DE DADOS
Usualmente, a maior parte do trabalho de anlise est na manipulao do banco de dados e no propriamente na elaborao de
modelos analticos. Mesmo que o banco de dados esteja com todas
as variveis categricas codificadas, ainda podem ser necessrios vrios ajustes. Neste captulo, veremos vrias das tarefas comumente
enfrentadas por um cientista social na fase de preparao de um banco
de dados para anlise, mas, antes de comear a manipular os dados,
preciso conhec-los bem. Por isso, algumas sees deste captulos
tratam da descrio dos diferentes tipos de dados.
No esquea de registrar, num script, os comandos necessrios
para a adequada manipulao do banco de dados.
5.1
No R, no vemos os dados permanentemente, como numa planilha de clculo e em alguns softwares de estatstica. No seria mesmo
fcil visualizar o contedo dos objetos presentes na rea de trabalho
do R porque eles no so apenas dados tabulares; podem ser texto,
vetores de diversos tamanho, tabelas, funes, listas de objetos etc.
Alm disso, pode no ser desprezvel o custo computacional de atualizar a exibio, na tela, dos valores do banco de dados que esto
sendo manipulados. Assim, para conhecer o contedo dos objetos,
55
56
preciso, por meio de comandos, dizer ao R o que queremos. Para visualizar alguns desses comandos em ao, carregue o banco de dados
bd_exemplo1.csv utilizado no captulo anterior no objeto de nome
b. Digite:
b <- read.table("bd_exemplo1.csv", header = TRUE, sep = "",
quote = '"')
uf
sexo
# 1 RO
PDT
# 2 ES
PSOL
9,937 Masculino
13,207 Masculino
12,257 Masculino
resultado
# 1 No eleito
# 2 No eleito
# 3 No eleito
tail(b, n = 3)
#
uf
# 200 PB
sexo
PRTB
9,513 Masculino
PSDC
6,353 Masculino
PSOL
7,81 Masculino
resultado
# 200 No eleito
# 201 No eleito
# 202 No eleito
57
uf
PSOL
sexo
8,191 Feminino
resultado
# 26 No eleito
58
c(length(b$resultado), length(b))
# [1] 202
c(nrow(b), ncol(b))
# [1] 202
59
candidato partido
ANTONIO FERNANDES DA SILVA FILHO
PSDC
votos
3640
# 139
# 149
PDT
39327
PFL 1680362
# 172
PSTU
18545
# 193
PCB
6084
5.3
#
# 74
60
candidato partido
votos
# 149
# 139
PDT
39327
# 172
PSTU
18545
# 193
PCB
6084
PSDC
3640
# 16
5.4
PFL 1680362
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
#
# 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
61
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
# Total
94
3.976
4.380
2364
100.000
100.000
O objeto produzido pela funo freq() tambm possui um mtodo para a funo plot(), gerando um grfico de barras quando plotado. Entre os argumentos da funo freq(), est a escolha do tipo de
apresentao das quantidades das categorias por meio de nmeros
absolutos ou relativos no eixo y do grfico de barras. No exemplo da
Figura 5.1, optou-se pelo uso de valores percentuais.
f <- freq(sen$resultado, plot = FALSE)
plot(f, y.axis = "percent")
20
40
60
80
Eleitos
No eleitos
35.0
44.0
Median
50.5
Max.
52.2
89.0
60.0
62
90
valor atpico
60
Q2
40
Q3
50
70
80
Ls
IIQ
Q1
min
63
100
0
50
Frequency
150
200
Histogram of sen$bens
0e+00
1e+08
2e+08
3e+08
4e+08
5e+08
sen$bens
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. Verificando o resultado de
summary(sen$bens)
#
Min.
1st Qu.
Median
Mean
3rd Qu.
Max.
candidato uf partido
PSDB
64
0.10
0.05
0.00
Proporo
0.15
10
15
20
Alm de melhorarmos a aparncia do grfico, utilizamos o argumento probability para substituir a apresentao das frequncias em
valores absolutos por valores relativos. Os candidatos que declaram
no possuir bens ficaram isolados na barra mais esquerda, e Ronaldo
65
RECODIFICAR VARIVEIS
NR
NS Sim
No
NR
NS
Sim NA's
3
x <- droplevels(x)
summary(x)
#
No
Sim NA's
3
66
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 significado especial para o R: not available, ou seja, valor ausente. Vimos, na seo 2.6
(p. 14), os significados dos smbolos lgicos utilizados no cdigo acima.
Na primeira parte do cdigo entre colchetes, ele significa VERDADEIRO
se x for igual a "NS", e FALSO se no for. O smbolo | significa 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, modificamos 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 recodificar a varivel Partido poltico em Posicionamento em relao ao
Governo Federal.
library(memisc)
sen$pos <- recode(sen$partido,
"Situao" <- c("PT", "PMDB", "PSB", "PV", "PTB", "PC do B", "PP",
"PRTB", "PL", "PMN", "PT do B", "PAN", "PSC", "PTC",
"PHS", "PTN", "PRB", "PRONA"),
"Intermedirio" <- c("PCB", "PDT", "PRP", "PSDC", "PSL"),
"Oposio" <- c("PSDB", "PFL", "PPS", "PSOL", "PSTU", "PCO"))
summary(sen$pos)
#
#
Situao Intermedirio
81
50
Oposio
71
Foram classificados na Situao aqueles partidos que no lanaram candidatura prpria Presidncia da Repblica em 2006 e que em
2008 estavam na base aliada do Governo Federal; como Intermedirios, aqueles que lanaram candidatura prpria, mas em 2008 estavam
na base aliada do Governo; finalmente, como pertencentes Oposio, aqueles que lanaram candidatura prpria e faziam oposio ao
Governo em 2008.
Jovem Experiente
56
120
Idoso
26
No h problema se os pontos de corte mnimo e mximo estiverem para alm dos valores mnimo e mximo da varivel numrica. Por
outro lado, se o ponto de corte mnimo for superior ao valor mnimo
da varivel numrica ou se o ponto de corte mximo for inferior ao
valor mximo, sero introduzidos NAs no novo vetor. Observe que o
nmero de rtulos das categorias igual ao nmero de pontos de corte
1.
5.7
68
5.8
poderemos reuni-los num nico banco de dados com o comando merge(b1, b2). O pr-requisito para o correto funcionamento de merge()
que a varivel chave para fuso esteja presente com o mesmo nome
nos dois bancos. No exemplo em questo, para a comparao das
chaves realizada por merge() ser possvel, teremos que renomear uma
das variveis chave para que os nomes fiquem exatamente iguais e
converter as colunas correspondentes Unidade da Federao de
factor para character:
names(b2) <- c("uf", "pop")
b1$uf <- as.character(b1$uf)
b2$uf <- as.character(b2$uf)
merge(b1, b2)
#
uf
idh
pop
# 1 PR 0.82 10.3
# 2 RS 0.83 10.6
# 3 SC 0.84
5.9
69
pais
ano populacao
# 1
Brasil 1960
71695
# 2
Brasil 1980
122958
# 3
Brasil 2000
175553
# 4 Bulgria 1960
7867
# 5 Bulgria 1980
8844
# 6 Bulgria 2000
7818
# 7
ndia 1960
445857
# 8
ndia 1980
687029
# 9
ndia 2000
1002708
71695
122958
# 4 Bulgria
7867
8844
7818
445857
687029
1002708
# 7
ndia
175553
70
# 1
Brasil
71695
122958
# 2 Bulgria
7867
8844
7818
445857
687029
1002708
# 3
ndia
175553
pais
# Brasil.1960
ano
pop
Brasil 1960
71695
7867
ndia 1960
445857
Brasil 1980
122958
8844
ndia 1980
687029
Brasil 2000
175553
7818
# Brasil.2000
# ndia.2000
5.10
ATRIBUTOS DE OBJETOS
71
Feminino Masculino
30
172
attributes(sen$sexo)
# $levels
# [1] "Feminino"
"Masculino"
#
# $class
# [1] "factor"
#
# $label
# [1] "Sexo do candidato"
72
CAPTULO 6
ANLISE DESCRITIVA
Neste 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
73
74
b
v1 v2
v3 v4
v5 v6
Antes
b
v1 v2
v3 v4
v5 v6
v1
v2
v3
v4
v5
v6
Depois
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.
Rtulo
q2
q66
Regio do Pas
Pedir a um amigo que trabalha no servio pblico para ajudar a
tirar um documento mais rpido do que no tempo normal :
Um funcionrio pblico receber 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 ele tem um parente no governo, conseguir
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 final para desproporcionalidade amostral e diferenas
sciodemogrficas
q68
q78
q105
q511
q531
q546
q660
75
Usaremos vrias funes do pacote descr. Por isso, vamos carreglo na memria do R:
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 classificar 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 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] "Favor"
"Jeitinho"
"NR"
76
levels(pesb$emprestimo)
# [1] "Favor"
"Jeitinho"
"NR"
# [9] "NS"
levels(pesb$natal)
# [1] "Favor"
"Jeitinho"
"NR"
# [9] "NS"
6.0
Median
11.0
Max.
NA's
10.1
18.0
206
14.0
77
6.2).
6.3
"Norte"
"Sudeste"
# [5] "Sul"
levels(pesb$regiao) <- c("CO", "NE", "N", "SE", "S")
compm
# Valor mdio de "ndice de percepo de corrupo" segundo
# "Estrato-Regio do Pas"
#
Mdia
# CO
1
10.960
N Desv. Pd.
149
4.402
# NE
8.705
580
# N
10.717
106
4.372
# SE
11.047 1005
4.159
# S
10.993
351
4.317
4.528
78
4.895
15
10
5
Percepo de corrupo
CO
NE
SE
Regio do Pas
79
N
CO
NE
Regio
SE
10
15
IPC
6.4
Para saber se existe alguma correlao entre duas variveis categricas, podemos fazer uma tabela cruzada e produzir um grfico
com as duas variveis. As funes que fazem isso so table() e plot()
(ver Figura 6.4). Nesta seo, exemplificaremos como fazer anlise de
duas variveis categricas, verificando se diferentes religies atraem
igualmente homens e mulheres.
table(pesb$religiao, pesb$sexo)
#
#
Feminino Masculino
Ateu
Budista
Candombl
80
Catlica
Esprita kardecista
902
47
772
23
Evanglica no-pentecostal
66
42
Evanglica pentecostal
167
92
Judaica
30
19
No tem religio
57
75
NR
NS
13
12
Seisho-N-I, Messinica
Umbanda
Ateu
0.0
0.2
0.4
0.6
Masculino
Feminino
Sexo
0.8
1.0
Catlica
Esprita kardecista
NR
Religio
81
# |-------------------------|
# |
Contagem |
# |-------------------------|
#
# ==========================================
#
pesb$sexo
# pesb$rlg
Feminino
Masculino
Total
# -----------------------------------------# Evanglica
231
152
383
# -----------------------------------------# Catlica
872
811
1683
# -----------------------------------------# Nenhuma
54
88
142
# -----------------------------------------# Total
1157
1051
2208
# ==========================================
A funo crosstab() aceita vrios outros argumentos teis, mas eles tornam os
resultados mais complexos, exigindo maior conhecimento estatstico do leitor, e, por
isso, somente sero utilizados no Captulo 7.
82
Nenhuma
Masculino
Sexo
Feminino
Evanglica
Religio
83
10
15
Superior
No sup.
Feminino
Masculino
Sexo
6.5
A abordagem mais adequada para verificar a existncia de correlao entre duas variveis numricas a anlise de regresso, como
veremos no captulo 7. Se o pblico leitor no tiver conhecimento de
estatstica suficiente para interpretar uma tabela com os resultados
de uma anlise de regresso, o que podemos fazer produzir um grfico de disperso das duas variveis. Para exemplificar, verificaremos
a relao entre gasto de campanha e votao recebida. Utilizaremos
um subconjunto dos dados, excluindo os candidatos que no receberam nenhum voto. Assim como a varivel renda no captulo anterior
(ver Figura 5.4), as duas variveis tm distribuio mais prxima de
uma log-normal do que de uma normal. Por isso, em algumas anlises, utilizaremos o logaritmo das variveis, e na produo de grficos
poderemos utilizar o argumento log para informar se a escala do eixo
x e/ou do eixo y dever(o) ser logartmica(s).
Para produzir um grfico de disperso entre duas variveis numricas, basta utilizar a funo plot(), fornecendo as duas variveis
como argumento. A funo reconhecer que as duas variveis so numricas e chamar o mtodo adequado, como na Figura 6.7. Antes de
chamarmos a funo compmeans(), modificamos o parmetro grfico
scipen para evitar o uso de notao cientfica nos rtulos dos eixos do
grfico.3
3
84
options(scipen = 1000)
plot(sen$vgasto, sen$votos, log = "xy", xlab = "Gasto (R$)",
ylab = "Votao")
1000 10000
Votao
1000000
5000
50000
500000
5000000
Gasto (R$)
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 significncia estatstica. O que ainda podemos fazer nos limites da proposta deste captulo converter as variveis
em categricas e utilizar compmeans() e crosstab() para verificar 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 <- cut(sen$vgasto, c(0, 760000, 2000000, 100000000),
labels = c("Baixo", "Mdio", "Alto"),
ordered_result = TRUE)
sen$votac <- cut(sen$votos, c(0, 14000, 230000, 10000000),
labels = c("Baixa", "Mdia", "Alta"),
ordered_result = TRUE)
Criadas as novas variveis categricas, podemos agora usar compmeans(). A tabela produzida pode ser vista a seguir, assim como o
85
grfico resultante pode ser visto na Figura 6.8. O argumento log = "y"
torna logartmica a apresentao dos valores no eixo y.
vg <- compmeans(sen$votos, sen$gastos)
vg
# Valor mdio de "sen$votos" segundo "sen$gastos"
#
Mdia
# Baixo
12709
84
26287
# Mdio
269561
52
462881
1049986
66
1652811
417742 202
1069372
# Alto
# Total
N Desv. Pd.
1e+07
1e+05
1e+03
Votao
Baixo
Mdio
Alto
Gasto declarado
# |-------------------------|
# |
Contagem |
# |-------------------------|
#
# ==========================================
#
sen$votac
# sen$gastos
Baixa
Mdia
Alta
Total
86
# -----------------------------------------# Baixo
70
14
84
# -----------------------------------------# Mdio
13
26
13
52
# -----------------------------------------# Alto
15
47
66
# -----------------------------------------# Total
87
55
60
202
# ==========================================
Baixo
Mdio
Alto
Baixa
Votao
MdiaAlta
Gasto declarado
87
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 final (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 grfico,
dividimos o nmero de furtos por 1000 no momento de criar a srie
temporal.
fur <- c(241026, 276326, 291701, 293900, 321086, 332379,
384004, 393153)
lat <- c(451, 545, 722, 724, 653, 527, 540, 468)
ts.fur <- ts(fur / 1000, start = 1997, end = 2004)
ts.lat <- ts(lat, start = 1997, end = 2004)
88
400
500
600
Latrocnios
Furtos/1000
300
N de ocorrncias
700
CAPTULO 7
QUI-QUADRADO E
REGRESSO
7.1
QUI-QUADRADO
89
7.1. QUI-QUADRADO
90
# |-------------------------|
# |
Contagem |
# |
Valores esperados |
# |-------------------------|
#
# ===================================================
#
rendafam
# atitude
Baixa
Mdia
Alta
Total
401
211
50
329.1
240.4
92.5
662
99
78
19
97.4
71.2
27.4
196
553
480
227
626.4
457.5
176.1
1260
# --------------------------------------------------# Total
1053
769
296
2118
# ===================================================
#
# Estatsticas para todos os fatores da tabela
#
# Pearson's Chi-squared test
91
g.l. = 4
p = 1.237e-13
#
#
REGRESSO LINEAR
Min
1Q Median
# -4.696 -1.183
0.098
3Q
Max
1.449
4.044
#
# Coefficients:
#
# (Intercept)
# sen$log.vgasto
0.9829
-2.34
0.9486
0.0721
13.16
0.021 *
<2e-16 ***
0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
92
#
# Residual standard error: 1.85 on 200 degrees of freedom
# Multiple R-squared:
# F-statistic:
0.464,Adjusted R-squared:
0.461
p-value: <2e-16
93
16
14
12
10
10
12
14
16
94
#
# Residuals:
#
Min
-4.47
1Q Median
-1.21
0.10
3Q
Max
1.35
3.97
#
# Coefficients:
#
# (Intercept)
-2.2850
1.1166
-2.05
# log.vgasto
0.8284
0.0746
11.10
0.04208 *
< 2e-16 ***
# instrAlto
1.0212
0.2953
3.46
# idade
0.0351
0.0122
2.87
# est.civilDivorciado
-0.1741
0.3731
-0.47
0.64132
# est.civilSeparado
-0.6436
0.4675
-1.38
0.17020
# est.civilSolteiro
-0.6775
0.3983
-1.70
0.09054 .
# est.civilVivo
-1.2384
0.5962
-2.08
# sexoMasculino
-0.9068
0.3625
-2.50
0.03911 *
0.01320 *
0.00067 ***
0.00455 **
0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#
# Residual standard error: 1.74 on 193 degrees of freedom
# Multiple R-squared:
0.543,Adjusted R-squared:
0.524
p-value: <2e-16
95
[,1]
[,2]
[,3]
# 1 12.257
9.795
2.4612
# 2
9.810
0.1265
# 3 13.207 12.569
9.937
0.6386
# 4 13.742 13.584
0.1578
1.1435
Com a funo plot() podemos produzir vrios grficos de diagnstico do modelo. Na Figura 7.2, utilizamos o parmetro grfico
mfrow para exibir quatro grficos numa nica figura.2
plot(modelo2)
105
10
22 24
12
2
0
4 2
Residuals
Normal QQ
Standardized residuals
Residuals vs Fitted
14
159
105
22
Fitted values
0.5
10
Fitted values
12
14
2
1
1 0
Residuals vs Leverage
Standardized residuals
10522159
92
Cook's distance
1.5
1.0
0.0
Standardized residuals
Theoretical Quantiles
ScaleLocation
0.00
0.05
0.10
55
159
0.15
Leverage
2
Ver Seo 8.4 para detalhes sobre o uso da funo par() e digite ?plot.lm para
maiores informaes sobre os grficos.
96
7.3
data = sen)
#
# Residuals:
#
Min
1Q Median
# -4.628 -1.040
0.172
3Q
Max
1.360
4.329
#
# Coefficients:
#
# (Intercept)
# log.vgasto
-3.0875
1.0152
-3.04
0.8600
0.0724
11.88
# instrAlto
1.0305
0.2963
3.48
# idade
0.0333
0.0118
2.81
-0.6355
0.3490
-1.82
# sexoMasculino
0.00268 **
< 2e-16 ***
0.00062 ***
0.00544 **
0.07011 .
0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#
# Residual standard error: 1.76 on 197 degrees of freedom
# Multiple R-squared:
0.526,Adjusted R-squared:
0.516
p-value: <2e-16
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
97
#
# Residuals:
#
Min
1Q Median
# -4.505 -1.216
0.105
3Q
Max
1.329
4.019
#
# Coefficients:
#
# (Intercept)
# log.vgasto
-2.9812
1.0072
-2.96
0.8352
0.0727
11.49
# instrAlto
1.0522
0.2938
3.58
# idade
0.0330
0.0117
2.82
0.5538
0.2574
2.15
-0.7603
0.3506
-2.17
# casadoSim
# sexoMasculino
0.00346 **
< 2e-16 ***
0.00043 ***
0.00536 **
0.03265 *
0.03134 *
0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#
# Residual standard error: 1.74 on 196 degrees of freedom
# Multiple R-squared:
0.536,Adjusted R-squared:
7.4
0.525
p-value: <2e-16
REGRESSO LOGSTICA
98
data = sen)
#
# Deviance Residuals:
#
Min
1Q
Median
3Q
Max
# -1.5540
-0.5588
-0.2786
-0.0833
2.5112
#
# Coefficients:
#
# (Intercept) -18.4673
4.0218
-4.59
# log.vgasto
0.9835
0.2598
3.79
4.4e-06 ***
0.00015 ***
# idade
0.0442
0.0207
2.14
0.03250 *
0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#
# (Dispersion parameter for binomial family taken to be 1)
#
#
on 201
degrees of freedom
on 199
degrees of freedom
# AIC: 129.3
#
# Number of Fisher Scoring iterations: 6
35.57
# Gl
# Sig.
1.887e-08
0.2239
CAPTULO 8
GRFICOS
Neste captulo, veremos como modificar o comportamento padro
do R ao criar grficos e como adicionar novos elementos a grficos j
criados. Os grficos so criados por funes especficas, muitas das
quais j foram vistas nos captulos anteriores.
Aps a chamada funo principal, como plot(), boxplot() ou
hist(), o dispositivo do grfico continua aberto para receber novos
elementos, at que seja feita uma nova chamada a uma dessas funes ou que o dispositivo seja explicitamente fechado com a funo
dev.off(). Os trs procedimentos bsicos para produzir grficos com
caractersticas especiais so: (a) modificar parmetros globais seguidos
pelo R na criao de grficos antes da criao do grfico, (b) especificar
valores de argumentos da funo que ir gerar o grfico e (c) acrescentar novos elementos a grficos j criados. Na prtica, o procedimento
para produzir grficos consiste em:
1. Chamar a funo que ir produzir o grfico sem especificar muitos argumentos.
2. Se o grfico no ficar com qualidade satisfatria para ser includo
num relatrio de pesquisa, executar novamente a funo, agora
especificando os valores de um maior nmero de argumentos.
3. Se isso ainda no for suficiente para atingir o objetivo pretendido, modificar os parmetros globais da produo dos grficos
e executar a funo novamente.
99
100
8.1
Os argumentos mais comuns para a incluso de ttulos e rtulos nos grficos j foram utilizados nos captulos anteriores. Algumas
funes e alguns mtodos da funo plot() aceitam os argumentos
diretamente. Em outros casos, precisamos usar a funo title() para
8.2. CORES
101
CORES
Outra forma de especificar cores utilizando o cdigo HTML correspondente, ou seja, o smbolo # seguido dos valores vermelho, verde,
azul e (opcionalmente) opacidade, em notao hexadecimal, de 00 a
FF. Podemos utilizar outros programas, como gcolor2, gimp ou kcolorchooser, para criar ou capturar cores e obter seu cdigo HTML. No
exemplo abaixo, criamos mais uma cor e reunimos todas as cores criadas at agora num nico vetor:
uva <- "#AD4DA3"
salada <- c(vitamina, uva, goiaba, goiaba.semitrans)
102
Uma terceira forma de fazer referncia a uma cor pelo seu ndice
na palheta de cores do R, cujos valores podem ser obtidos chamandose a funo palette() sem nenhum argumento. Por padro, a palheta possui oito cores, mas podemos modific-la chamando a funo
palette() com um novo vetor de cores. Para voltar palheta padro,
passamos o argumento "default" para a funo:
palette()
# [1] "black"
"red"
# [7] "yellow"
"gray"
"green3"
"blue"
"cyan"
"magenta"
palette(salada)
palette()
# [1] "#DED4B5"
"#B3C44D"
"#AD4DA3"
"#F06966"
"#F0696680"
palette("default")
palette()
# [1] "black"
"red"
# [7] "yellow"
"gray"
"green3"
"blue"
"cyan"
"magenta"
Na maioria das vezes, o comportamento padro das funes grficas do R produz resultado satisfatrio, mas, em algumas circunstncias,
podemos precisar adicionar mais elementos aos grficos, como textos,
pontos ou desenhos. Nesta seo, a incluso desses elementos em grficos ser exemplificada pela produo do grfico da Figura 8.1, cuja
montagem ser explicada passo a passo.
103
2.0
1.5
grande
in
cl
in
0.5
ad
1.0
pequeno
0.0
esquerda
direita
0.0
0.5
10 11 12 13 14 15 16 17 18 19 20
1.0
1.5
2.0
104
105
8.4
PARMETROS GLOBAIS
Veja a ajuda da funo para formas alternativas de especificar a linha a ser plotada.
Um uso comum a adio da linha de regresso a um grfico de disperso entre duas
variveis numricas.
106
107
par("mar")
# [1] 5.1 4.1 4.1 2.1
tros grficos, convm salvar os valores atuais para facilitar a sua restaurao aps a produo do grfico que precisa de parmetros especiais.
Para isso, chamamos par() com o argumento no.readonly = TRUE:
antigopar <- par(no.readonly = TRUE)
par(mar = c(5.1, 4.1, 4.1, 2.1))
Algumas funes repassam para par() parmetros grficos passados para elas como argumentos, mas outras no. Assim, em alguns
casos, no necessrio modificar os parmetros globalmente apenas
para alterar o resultado de um grfico, mas em outros isso necessrio.
Alm disso, nem todos os parmetros podem ser modificados dessa
forma; alguns somente podem ser alterados pela funo par(). Para
sabermos se uma funo ou no capaz de alterar temporariamente os
parmetros globais da produo de grficos, temos duas alternativas:
ler a documentao de par() e da funo que produz o grfico ou usar
o mtodo da tentativa e erro (este , geralmente, o procedimento mais
rpido).
A seguir, um exemplo de grfico produzido aps manipulao dos
parmetros. A necessidade de manipular os parmetros decorrente
do fato de algumas das categorias da varivel religio, da PESB, terem
rtulos demasiadamente longos. Antes de fazer os grficos, vamos carregar o banco de dados e criar uma cpia da varivel que nos interessa:
load("pesb2002.RData")
relig <- pesb$q511
Agora, vamos fazer o grfico de duas formas diferentes. Na primeira, mais simples, vamos apenas fazer um grfico de barras horizontais. Os ajustes necessrios nos parmetros sero a largura da margem
esquerda e o tamanho da fonte utilizada nas anotaes do eixo y. O
resultado est na Figura 8.2.
108
Religio
Umbanda
SeishoNI, Messinica
Santo Daime, Esotrica, Outras
NS
NR
No tem religio
Mormon, Adventista, Testemunha de Jeov
Judaica
Evanglica pentecostal
Evanglica nopentecostal
Esprita kardecista
Catlica
Candombl
Budista
Ateu
0
500
1000
1500
O objetivo, na segunda verso do grfico, manter as barras verticais. A soluo mais simples seria aumentar a margem inferior e,
analogamente ao que fizemos no grfico anterior, posicionar, perpendicularmente ao eixo, as anotaes com os rtulos das categorias da
varivel. Mas, para facilitar a leitura dos rtulos, resolvemos posicionlos diagonalmente, como na Figura 8.3. Para obter o resultado esperado,
alm de redimensionar as margens, produzimos o grfico sem os nomes das barras (names = FALSE). Depois, usamos a funo text() para
acrescentar as anotaes do eixo x com a fonte reduzida (cex = 0.7), e
com vrios outros argumentos para obter o efeito desejado. Um dos
problemas que precisamos resolver foi o posicionamento de cada rtulo. O valor retornado pela funo plot(), nesse caso, o vetor com o
posicionamento no eixo x da extremidade esquerda das barras. Assim,
utilizamos o resultado da funo para posicionar os rtulos da barra
(somando 0,5 para compensar a largura das barras). Todos os rtulos
tm a mesma coordenada no eixo y, -100 (lembre-se que o R recicla
um vetor quantas vezes for necessrio; nesse caso, o valor -100 ser
repetido 15 vezes). Normalmente, a funo text() utilizada apenas
para acrescentar texto na regio interna dos grficos, e qualquer texto
109
que exceda essa regio truncado. Para que isso no ocorresse, usamos
o argumento xpd = TRUE. Tambm usamos os argumentos pos, para
alinhar todos os rtulos direita, e srt, para inclinar os rtulos.
par(mar = c(10.8, 2.1, 2.1, 0.1), cex = 0.7)
rotulos <- levels(relig)
bx <- plot(relig, main = "Religio", names = FALSE) + 0.5
text(bx, -100, labels = rotulos, pos = 2, cex = 0.7,
srt = 45, xpd = TRUE)
ut
I
ra
,M
s
es
si
n
ic
a
U
m
ba
nd
a
O
ric
a,
t
m
N
ho
is
e,
E
Se
ai
Sa
nt
ta
tis
M
or
on
,A
dv
en
so
o
N
te
,T
es
Ev
an
N
R
o
lig
ov
re
te
ha
de
Je
ta
m
un
ai
ca
Ju
d
ta
os
nt
pe
nt
pe
lic
g
n
a
ec
os
is
ec
ec
o
rit
p
Es
lic
Ev
an
ta
a
l
ic
rd
at
ka
m
bl
st
C
an
do
di
Bu
At
eu
500
1000
1500
Religio
Concluda a produo do grfico, pode ser conveniente reconfigurar os parmetros para os valores iniciais:
par(antigopar)
8.5. LEGENDAS
8.5
110
LEGENDAS
1.0
ttulo
g
q
r
s
t
u
v
0.5
0.0
0.5
j
k
l
m
o
p
1.0
0.6
linha 1
linha 2
0.8
a
b
1.0
c
d
e
f
1.2
1.4
CAPTULO 9
PRODUO DE
RELATRIOS
9.1
111
112
load("senado2006.RData")
Eleito No eleito
Feminino
Masculino
26
23
149
113
114
Como j comentado, para inserir grficos com qualidade satisfatria no LibreOffice Writer, existem muitas opes. Uma delas salvar
o grfico no formato svg. O primeiro argumento o nome do arquivo
que conter a figura. A largura (width) e a altura (height) do grfico so
expressas em polegadas. O grfico somente efetivamente gravado
em disco aps o comando dev.off() (resultados omitidos):
library(descr)
svg("civilXres.svg", height = 4, width = 6, onefile = FALSE)
par(xpd = TRUE)
crosstab(sen$resultado, sen$est.civil, las = 1, ylab = "Estado civil",
xlab = "Resultado")
dev.off()
9.4. R E MARKDOWN
115
9.4
R E MARKDOWN
Uma forma prtica de produzir relatrios de pesquisa com qualidade satisfatria pelo uso de arquivos do tipo Rmd, que combinam as
linguagens R e Markdown. Por serem arquivos de texto plano, podem
ser editados pelos mesmos editores utilizados para elaborar cdigo do
R, incluindo a possibilidade de enviar cdigo para o console, permitindo test-lo. Isso torna a produo do relatrio dinmica, simultnea
9.4. R E MARKDOWN
116
realizao da anlise dos dados. O cdigo do R usado para gerar figuras, tabelas e outros elementos do relatrio. O cdigo em linguagem
Markdown convertido em HTML e cdigo HTML existente no corpo
do texto ser preservado.
O cdigo do R deve ser precedido por uma linha no formato
```{r apelidodocodigo, opes}
x <- 1:10
x
```
[1]
9 10
9.4. R E MARKDOWN
117
n <- 1:100
x <- mean(n)
```
9.5. R E LATEX
118
R E LATEX
9.5. R E LATEX
119
<<exemplo>>=
x <- 1:10
x
@
CAPTULO 10
TPICOS EM
PROGRAMAO
10.1
MANIPULAO DE TEXTO
A funo paste() usada para concatenar strings. Os elementos fornecidos como argumentos sero convertidos em character se
necessrio:
load("senado2006.RData")
paste("O banco de dados tem", nrow(sen), "linhas.")
# [1] "O banco de dados tem 202 linhas."
121
"Serra 45"
"Marina 43"
Duas tarefas frequentemente importantes na manipulao de dados so a localizao, e edio de texto. Para localizar um texto ou um
nmero especficos, podemos usar a funo grep(), a qual retorna
o(s) ndice(s) de um vetor em que um determinado texto pode ser
encontrado. A funo recebe como argumentos o padro procurado e
um vetor com textos ou nmeros, como no exemplo a seguir:
palavras <- c("", "difcil", "achar", "uma", "agulha", "num",
"palheiro")
grep("agulha", palavras)
# [1] 5
Na busca e substituio de strings, podemos usar expresses regulares, ou seja, strings em que algumas sequncias de caracteres tm
significado especial, como "\n" que j usamos vrias vezes para produzir quebra de linha. A seguir, veremos mais alguns exemplos.
Os smbolos ^ e $ tm significado especial quando em expresses
regulares, significando, respectivamente, incio e final da string:
122
"zz"
No cdigo acima, o comando usando a funo grep() no identificou o segundo elemento de x como correspondendo expresso
regular porque as letras abc no eram as trs primeiras letras da string,
e o comando usando a funo sub() no fez a substituio no primeiro
elemento de x porque as ltimas letras no eram abc.
O smbolo . significa qualquer caractere, e, do conjunto de strings
de quatro letras abaixo, somente sero substitudas aquelas em que a
primeira letra for a e ltima for d:
x <- c("abcd", "aaaa", "aefd", "bbbb")
sub("a..d", "zzzz", x)
# [1] "zzzz" "aaaa" "zzzz" "bbbb"
""
"efd"
"bbbb"
sub("b.*", "", x)
# [1] "a"
10.2. FUNES
123
10.2
FUNES
Como j foi dito antes, um princpio que deve sempre ser seguido
quando se escreve um script ou cdigo de algum programa o de se
evitar repeties de cdigo. Sempre que houver a necessidade de se
repetir o mesmo cdigo em diferentes partes de um script, recomendvel a criao de uma funo que execute a tarefa desejada. Assim, se
for encontrado algum erro no cdigo, ser suficiente fazer a correo
num nico lugar. O cdigo do exemplo abaixo cria a funo hipotenusa(), que recebe como argumentos dois objetos, a e b (que devero
124
125
126
6 10
apply(b, 2, sum)
#
# 19 37
127
sapply(lista, mean)
#
# 3.00 6.25
No cdigo abaixo (resultados omitidos), usamos a funo sapply() para descobrir quais colunas de um data.frame produzido pela
funo read.spss() do pacote foreign contm categorias (levels) duplicadas. Esse um problema comum quando usamos um banco de
dados do SPSS preparado por terceiros, como, por exemplo, o banco
de dados do Estudo Eleitoral Brasileiro de 2002 disponvel no Consrcio
de Informaes Sociais.1 No caso do ESEB 2002, uma das colunas com
rtulos repetidos a Q5. Esta varivel contm os nomes dos municpios em que a pesquisa foi realizada, entre os quais, dois tm o mesmo
nome: Santa Rita.
eseb <- read.spss("BD_CIS_0012_vFinal.sav")
lbtb <- attr(eseb, "label.table")
dup <- sapply(lbtb, function(x) sum(duplicated(x)))
dup[dup > 0]
dup <- sapply(lbtb, function(x) sum(duplicated(names(x))))
dup[dup > 0]
q5lev <- levels(eseb$Q5)
q5lev[duplicated(q5lev)]
http://www.cis.org.br.
128
# 1.670 1.763
NA 1.763
# 1.665 1.763
129
load("senado2006.RData")
tapply(sen$votos, sen[, c("escola", "sexo")], mean)
#
sexo
# escola
Feminino Masculino
L e Escreve
NA
1416.0
834785
26924.5
NA
44556.9
7050
600.5
55509
159130.4
27828
465331.1
446720
529390.2
escola
sexo
# 1
# 2
# 3
Feminino
# 4
Feminino
# 5
# 6
vgasto
votos p.valido
28.1870
7050.0
0.0380
941250
55508.8
1.0917
125000
27827.5
0.7585
18.7605
30000
1416.0
0.0250
# 7
26924.5
0.9375
# 8
44556.9
2.1624
600.5
0.2020
# 9
L e Escreve Masculino
700000
# 10
9.4845
# 11
15.1171
# 12
14.9489
10.6.
130
10.6
Ocasionalmente, pode ser necessrio partir uma string em pedaos, o que pode ser feito com a funo strsplit(), que recebe como
argumentos a string a ser partida e uma string que ser utilizada para
identificar o separador. O resultado uma lista de strings. Imagine,
por exemplo, que obtivemos um texto contendo uma lista de nomes
de pessoas e suas respectivas idades e que queremos construir uma
matriz com duas colunas, uma para os nomes e outra para as idades.
O primeiro passo seria partir a string de modo a separar os nomes das
idades:
x <- c("Maria = 25", "Jos = 27", "Pedro = 3")
xs <- strsplit(x, " = ")
xs
# [[1]]
# [1] "Maria" "25"
#
# [[2]]
# [1] "Jos" "27"
#
# [[3]]
# [1] "Pedro" "3"
[,1]
[,2]
"27"
131
[,1]
[,2]
"27"
"Jos"
"27"
"Pedro" "3"
"Jos"
"27"
"Pedro" "3"
do.call("c", xs)
# [1] "Maria" "25"
10.7
"Pedro = 3"
132
i <- 1
fim <- 4
while(i < fim){
i <- i + 1
if(i < fim)
cat("Circulando...\n")
else
cat("Esta a ltima volta.\n")
}
# Circulando...
# Circulando...
# Esta a ltima volta.
Por ser mais compacto, o loop for deve ser usado quando sabemos com antecedncia o nmero de vezes que o cdigo dever ser
executado. Se essa informao no for conhecida, ser necessrio o
uso do loop while. ainda possvel usar os comandos next e break no
interior de loops para interromper a sua execuo e, respectivamente,
reiniciar o loop ou sair dele.
133
A FUNO SOURCE()
CAPTULO 11
MAPAS
Neste captulo, veremos como usar o R para criar mapas usando arquivos no formato Arcview, facilmente encontrveis na internet.1 Para
carregar um mapa no R preciso obter os arquivos com extenso shp,
shx e dbf, devendo-se passar o diretrio em que se encontram os arquivos e a raiz comum dos nomes dos arquivos como argumento para a
funo readOGR(), do pacote rgdal. A funo cria um objeto contendo
os polgonos cujos permetros correspondem s unidades geogrficas
do mapa. As coordenadas x e y dos polgonos tm os mesmos valores,
respectivamente, da longitude e da latitude dos pontos do mapa. O
objeto criado pela funo readOGR() tambm inclui um data.frame
com informaes adicionais, e o mapa pode ser desenhado com a funo plot(). No exemplo abaixo, criamos o objeto br contendo o mapa
do Brasil:
dir("mapa_BR")
# [1] "BRASIL.dbf" "BRASIL.shp" "BRASIL.shx"
library(rgdal)
br <- readOGR("mapa_BR", "BRASIL")
# OGR data source with driver: ESRI Shapefile
# Source: "mapa_BR", layer: "BRASIL"
# with 27 features and 3 fields
# Feature type: wkbPolygon with 2 dimensions
134
MAPAS
135
summary(br)
# Object of class SpatialPolygonsDataFrame
# Coordinates:
#
min
max
# x -73.84 -34.858
# y -33.77
5.383
# Is projected: NA
# proj4string : [NA]
# Data attributes:
#
UF
ESTADO
REGIAO
AC
: 1
Acre
: 1
CO:4
AL
: 1
Alagoas : 1
NE:9
AM
: 1
Amap<a0>: 1
NO:7
AP
: 1
Amazonas: 1
SE:4
BA
: 1
Bahia
SU:3
CE
: 1
Cear<a0>: 1
(Other):21
(Other) :21
: 1
O objeto br, criado com os comandos acima, uma lista de polgonos, e cada linha do data.frame contm informaes sobre um
dos polgonos da lista. Como podemos observar pelo resultado de summary(), o data.frame deste mapa contm trs variveis, UF, ESTADO e
REGIAO. No utilizaremos a varivel ESTADO do data.frame, mas o leitor interessado pode corrigir a codificao de caracteres dessa varivel
com a funo toUTF8(), do pacote descr:
library(descr)
br$ESTADO <- toUTF8(br$ESTADO, "IBM850")
MAPAS
136
FIGURA 11.1: Exemplo de mapa
Objetos desse tipo no aceitam o parmetro main quando produzindo um grfico. Por isso, tivemos que usar title() para adicionar o
ttulo principal.
O prximo mapa ser colorido de acordo com o IDH estadual
calculado pelo PNUD para o ano de 2005 (CEPAL; PNUD; OIT, 2008)
(coluna ano05). O primeiro passo para produzir o grfico ser carregar
um banco de dados com o IDH estadual:
idh <- read.table("IDH_Brasil.csv", sep = "\t", header = TRUE)
idh <- idh[, c("UF", "ano05")]
names(idh) <- c("UF", "idh05")
MAPAS
137
Finalmente, vamos criar, com a funo cut(), uma varivel categrica com faixas de valores de IDH, idhc, que ser usada para colorir o
mapa. Deixamos para a funo cut() a tarefa de determinar os pontos
de corte ao dividir o IDH em quatro intervalos:
br$idhc05 <- cut(br$idh05, 4)
levels(br$idhc05)
# [1] "(0.677,0.726]" "(0.726,0.776]" "(0.776,0.825]" "(0.825,0.874]"
Assim como no mapa anterior, na Figura 11.2 colorimos as Unidades de Federao usando os levels de uma varivel categrica como
nmeros das cores da palheta. Para o posicionamento da legenda,
usamos coordenadas geogrficas de um ponto localizado numa das
reas em branco do mapa. Os valores apresentados na legenda so o
resultado do comando levels(idhc), digitado acima.
palette(c("#779999", "#99bbbb", "#bbdddd", "#ddffff"))
plot(br, col = br$idhc05)
title("IDH dos Estados Brasileiros em 2005")
legend(-74, -18, bty = "n", fill = 4:1,
legend = levels(br$idhc05)[4:1])
MAPAS
138
FIGURA 11.2: Exemplo de mapa (II)
(0.825,0.874]
(0.776,0.825]
(0.726,0.776]
(0.677,0.726]
MAPAS
139
MA
CE
RN
PB
PI
PE
AL
SE
BA
CAPTULO 12
ANLISE DE REDES
SOCIAIS
141
a ligao usando apenas o smbolo - e, nesse caso, a rede ser nodirecional. No necessrio o uso de aspas nos nomes dos vrtices se
eles no contiverem espaos em branco. Para visualizar a rede, usamos
plot(), como ilustrado na Figura 12.1.
plot(g)
Carlos
Aline
Ana
Manoel
Paulo
Sandra
Helena
Maria
Francisco
Regina
Pedro
Cristina
142
em todos os sociogramas produzidos. A funo recebe como argumentos o objeto da classe igraph, o nome do atributo e o valor do atributo.
No exemplo anterior, estipulamos que o layout do grfico seria determinado pelas coordenadas dos vrtices definidas manualmente com
a funo tkplot().
No cdigo abaixo, primeiramente, chamamos a funo set.seed()
com um valor qualquer para evitar que os grficos produzidos por
nosso script tenham layouts diferentes cada vez que o script for executado. Isso ocorreria porque o algoritmo de produo de layout faz uso
de nmeros pseudoaleatrios. Ao usar a funo set.seed(), garantimos que os nmeros pseudoaleatrios sero produzidos sempre na
mesma sequncia.
set.seed(333)
g <- set.graph.attribute(g, "layout",
value = layout.fruchterman.reingold(g))
Outra alterao que faremos nos sociogramas seguintes ser colorir os vrtices de acordo com alguma caracterstica dos indivduos.
Na Figura 12.2, os vrtices esto coloridos de acordo com o grau de
proximidade e de intermediao dos indivduos na rede social. O grau
143
144
Proximidade
Intermediao
Regina
Regina
Cristina
Cristina
Pedro
Pedro
Francisco
Francisco
Paulo
Maria
Helena
Helena
Carlos
Ana
Manoel
Sandra
Paulo
Maria
Ana
Manoel
Sandra
Aline
Carlos
Aline
145
if(exists("alfa")){
alfa.min <- min(alfa)
if(alfa.min < 0)
alfa.min <- alfa.min * (-1)
<- alfa + alfa.min
alfa2
par(mfrow = c(1, 2), mar = c(0, 0, 1, 2) + 0.1, cex = 0.7, xpd = TRUE)
plot(g, vertex.color = cores.c, main = "Centralidade")
par(mar = c(0, 1, 1, 1) + 0.1)
if(exists("alfa"))
plot(g, vertex.color = cores.a, main = "Centralidade alfa")
Centralidade
Centralidade alfa
Regina
Regina
Cristina
Cristina
Pedro
Pedro
Francisco
Francisco
Paulo
Maria
Helena
Helena
Carlos
Aline
Ana
Manoel
Sandra
Paulo
Maria
Ana
Manoel
Sandra
Carlos
Aline
146
#
# [[2]]
# [1] 9 6 8
nomes[g.mc[[1]]]
# [1] "Ana"
"Paulo"
"Manoel"
147
Regina
Regina
Cristina
Cristina
Pedro
Pedro
Francisco
Francisco
Paulo
Maria
Helena
Helena
Carlos
Ana
Manoel
Sandra
Paulo
Maria
Ana
Manoel
Sandra
Aline
Carlos
Aline
mark.col = 6:4)
148
Regina
Regina
Cristina
Cristina
Pedro
Pedro
Francisco
Francisco
Paulo
Maria
Helena
Helena
Carlos
Ana
Manoel
Sandra
Paulo
Maria
Ana
Manoel
Sandra
Carlos
Aline
Aline
Depois de ter calculado vrias mtricas dos indivduos na rede social que nos serviu de exemplo e de ter identificado as comunidades s
quais pertencem os vrtices, podemos criar um data.frame contendo
todas essas variveis, como no cdigo abaixo:
gdf <- data.frame(nome = names(inter), inter, proxi, central, alfa,
wtc, sgc)
print(gdf, row.names = FALSE, digits = 3)
#
nome inter
Regina
0.0 0.00901
0 1.00
Francisco
3.5 0.00826
4 3.25
Maria
0.0 0.00758
3 6.04
Sandra
3.0 0.00909
2 3.71
Pedro
0.0 0.00901
0 1.00
Paulo
2.0 0.01429
1 1.50
Cristina
0.0 0.00901
0 1.00
Manoel
8.5 0.01000
3 3.12
Carlos
0.0 0.01087
1 1.75
149
Ana
0.0 0.01639
0 1.00
Aline
4.0 0.00901
2 4.42
Helena
0.0 0.00990
0 1.00
Se tivssemos outro data.frame com caractersticas dos indivduos constituintes da rede, poderamos combinar os dois bancos de
dados com a funo merge() e realizar novas anlises estatsticas, descritivas (como as vistas no Captulo 6) ou inferenciais (como as do
Captulo 7).
Alm de calcular mtricas dos vrtices, tambm pode ser necessrio calcular mtricas globais da rede, principalmente quando se
pretende comparar as propriedades de vrias redes. Entre essas propriedades, esto a razo entre o nmero de ligaes entre os vrtices
da rede e o nmero teoricamente possvel de ligaes (densidade), a
proporo de pares recprocos em relao a todos os pares de vrtices
entre os quais h alguma aresta (reciprocidade), a probabilidade de dois
vrtices quaisquer que so conectados ao mesmo vrtice estarem eles
prprios conectados (transitividade ou coeficiente de agrupamento) e o
nmero de agrupamentos. Esta ltima propriedade pode ser calculada
considerando ou no a reciprocidade das relaes:
d <- data.frame("Mtrica" = c("Densidade", "Reciprocidade",
"Transitividade",
"Coef. de agrupamento (fraco)",
"Coef. de agrupamento (forte)"),
"Valor" = c(graph.density(g), reciprocity(g),
transitivity(g),
no.clusters(g),
Mtrica
Densidade
Valor
0.121
Reciprocidade
0.125
Transitividade
0.171
1.000
150
GLOSSRIO
arrow: seta.
blue: azul.
bottom: cho.
choose: escolher.
cut: cortar.
data: dados.
device: dispositivo.
directory: diretrio, pasta.
end: fim.
foreign: estrangeiro.
frame: quadro.
green: verde.
header: cabealho.
head: cabea.
heat: calor.
height: altura.
hide: escoder.
label: rtulo.
left: esquerda.
length: comprimento.
level: nvel.
library: biblioteca.
load: carregar.
151
NDICE REMISSIVO
jpg, 114
:, 21
<-, 9, 21, 124
?, 7
??, 8
$, 35, 38
%, 53
|, 66
label, 70
levels, 65, 66, 71, 76, 102, 137
NA, 21, 6567, 125, 128, 129
next, 132
NULL, 67, 125
Arcview, 134
pdf, 114
PESB, 74
PNAD, 46, 53, 54
png, 114, 115
break, 132
class, 71
dbf, 134
dpi, 117
echo, 116
else, 125
eps, 114
FALSE, 14, 20, 29
fig.height, 117
fig.width, 117
for, 131, 132
HTML, 101
html, 117
if, 131
152
NDICE REMISSIVO
igraph, 140142
integer, 71
list, 3438, 41, 129
logical, 14, 20, 22, 25, 29
matrix, 33, 37, 38, 57, 126
numeric, 13, 20, 22, 26, 28
ordered, 14, 52
table, 57
ts, 87
R funes
abline, 92, 105
aggregate, 129, 130
alpha.centrality, 144
apply, 126
apropos, 8
args, 5, 7
as.character, 28, 52, 136, 138
as.Date, 52, 53
as.factor, 23, 28, 65
as.logical, 29
as.numeric, 28
as.ordered, 52
as.POSIXct, 53
as.undirected, 145
attach, 73, 93
attr, 41, 71
attributes, 71
axis, 109
betweenness, 143
boxplot, 62, 99, 100
c, 21, 30
cat, 112, 125, 131, 132
cbind, 32, 33, 68
cdplot, 79
class, 24, 36, 58
closeness, 143
colnames, 33
colors, 101
153
compmeans, 77, 78, 83, 84,
100
coordinates, 138
crosstab, 81, 84, 86, 89, 90,
114
cut, 67, 84, 137
data.frame, 38, 73
degree, 144
demo, 8
descr, 51, 61, 70
detach, 73
dev.off, 99, 105, 114, 115
dim, 58, 136
dir, 12, 17
do.call, 130, 131
dput, 17, 27, 48, 75
droplevels, 66
example, 8
exists, 144
factor, 23, 50, 65
file.choose, 40
file.head, 43, 44, 46
fread, 54
freq, 60, 61, 100
fromUTF8, 51
function, 124
fwf2csv, 54
gdata, 49
get.vertex.attribute, 142
getwd, 12, 17
glm, 97
graph.density, 149
graph.edgelist, 150
graph.formula, 140, 142
grep, 54, 121, 122
gsub, 121
head, 56
heat.colors, 143
NDICE REMISSIVO
help, 7
help.search, 8
help.start, 5
hist, 6264, 99
history, 17
if, 125
install.packages, 18, 19
interaction.plot, 82
is.na, 125
is.null, 125
knit, 116, 118, 119
knit2html, 117, 118
label, 70, 71
lapply, 126, 127
largest.cliques, 145, 146
legend, 87, 110, 137
length, 24, 58
levels, 17, 25, 77, 89, 93, 137
library, 18, 49, 51, 61, 75, 134
lines, 104
lm, 91, 93
load, 11, 12, 39, 59, 74, 82,
107, 111, 128
log, 6, 16, 64, 91
LogRegR2, 98
ls, 10, 17, 73
max, 26
mdb.get, 46
mean, 26, 128
median, 26
merge, 68, 136, 149
min, 26
mode, 24
mosaicplot, 81
names, 17, 24, 30, 48, 67, 75
ncol, 58
no.clusters, 149
nrow, 58
154
order, 59, 136
ordered, 52
palette, 102, 135, 137
par, 95, 105107, 109, 115,
148
paste, 120
paste0, 120
plot, 60, 61, 79, 83, 92, 95, 99,
100, 103, 107110, 134,
135, 137, 138, 141143,
145147
png, 115
points, 103, 138
polygon, 105
postscript, 114
predict, 94
print, 10, 12
q, 4
quantile, 26
quit, 4
rainbow, 138
rbind, 32, 33, 68
read.dta, 39
read.fwf, 47, 53, 54
read.spss, 40, 42, 54, 127
read.table, 42, 44, 51, 52, 54,
56, 136
read.xls, 45
readLines, 47, 51, 54
readOGR, 134
reciprocity, 149
recode, 66, 80, 82, 89, 93
rect, 105
rep, 22, 47, 103
reshape, 69
residuals, 94
rgb, 101
rownames, 33, 70
NDICE REMISSIVO
RSiteSearch, 8
sapply, 126, 127
save, 11, 39, 72
seq, 22, 103
sessionInfo, 9
set.graph.attribute, 142
set.seed, 142
set.vertex.attribute, 142
setwd, 6, 12, 13, 17, 40
sink, 112
source, 133
spinglass.community, 146,
147
spss.get, 70
sqrt, 16, 124
step, 96
str, 17, 26
strsplit, 130
sub, 121123
sum, 26
summary, 17, 25, 26, 38, 43,
51, 60, 61, 63, 70, 93, 134,
135
Sweave, 119
system, 47
table, 79, 89, 112
tail, 56, 57
tapply, 128130
text, 92, 103, 104, 108, 109,
138
title, 100, 101, 135137
tkplot, 141, 142
tkplot.getcoords, 141
tolower, 48
toUTF8, 47, 51, 135
transitivity, 149
trim, 49
try, 144
155
ts, 87
ts.plot, 87
unlist, 131
vector, 20
walktrap.community, 146
writeLines, 51, 54
R pacotes
data.table, 54
descr, 19, 43, 51, 54, 60, 75,
77, 81, 98, 100, 135
foreign, 40, 127
gdata, 45, 49
Hmisc, 46, 70, 71
igraph, 140, 149
knitr, 119
memisc, 66, 89
Rcmdr, 19
rgdal, 134
sqldf, 54
sav2dat.sh, 54
shp, 134
shx, 134
svg, 114
tex, 116
TRUE, 14
while, 131, 132
BIBLIOGRAFIA
ALMEIDA, Alberto Carlos. A cabea do brasileiro. Rio de Janeiro:
Record, 2007.
AQUINO, Jakson Alves de et al. descr: Descriptive statistics. [S.l.],
2014. R package version 1.0.3. Disponvel em: <https://github.com/jalvesaq/descr>.
BARNIER, Julien. R pour les sociologues. [S.l.], dez. 2008. Version
provisoire.
BIVAND, Roger; KEITT, Tim; ROWLINGSON, Barry. rgdal: bindings for
the geospatial data abstraction library. [S.l.], 2014. R package version
0.8-16. Disponvel em: <http://CRAN.R-project.org/package=rgdal>.
BOLOGNESI, Bruno; GOUVA, Jlio; MIRADE, Angel. Eleies
2006: candidatos ao poder legislativo no Brasil (Banco de
dados). In: Consrcio de Informaes Sociais. Curitiba: Ncleo de
Pesquisa em Sociologia Poltica Brasileira, 2007. Disponvel em:
<http://www.cis.org.br>. Acesso em: 12/082009.
CEPAL; PNUD; OIT. ndice de Desenvolvimento Humano (IDH),
Brasil, regies e estados, 1991-2005. In: CEPAL; PNUD; OIT
(Ed.). Emprego, desenvolvimento humano e trabalho decente:
a experincia brasileira recente. [s.n.], 2008. Disponvel em:
<http://www.cepal.org/brasil/noticias/noticias/3/34013/EmpregoDesenvHumanoTrabDecente.pdf>. Acesso em:
10/04/2009.
156
BIBLIOGRAFIA
157