Académique Documents
Professionnel Documents
Culture Documents
Introdu
c
ao ao R
2
Direitos de Copia @2010 por Letcia Mancini Martins. Todos os direitos reservados.
Este documento e gratuto; voce pode redistribu-lo e/ou modifica-lo dentro dos
termos da Licenca P
ublica Geral GNU como publicada pela Fundacao do Software
Livre (FSF); na versao 2 da Licenca, ou (na sua opniao) qualquer versao.
Este programa e distribuido na esperanca que possa ser u
til, mas SEM NENHUMA
a qualquer MERCADO
GARANTIA; sem uma garantia implicita de ADEQUAC
AO
EM PARTICULAR. Veja a Licenca P
ou APLICAC
AO
ublica Geral GNU para
maiores detalhes.
Voce deve ter recebido uma copia da Licenca P
ublica Geral GNU junto com este
programa, se nao, escreva para a Fundacao do Software Livre(FSF) Inc., 51 Franklin
St, Fifth Floor, Boston, MA 02110-1301 USA
Possveis versoes podem ser lancadas contendo informacoes adicionais a` medida que
os usuarios desta apostila vao tendo d
uvidas. Por isso, solicito a todo usuario que,
ao ter alguma d
uvida e/ou verificar a falta de algum topico importante ou erro nesta
apostila, relatar `a autora, cujo e-mail e leticia mancini@yahoo.com.br.
Ficha Catalogr
afica
Mancini-Martins, Letcia.
Tutorial R. Santo Andre, 2010. 65p
Iniciacao Cientfica - Universidade Federal do ABC. Centro de Matematica, Computacao
e Cognicao.
1. R-project 2. Estatstica 3. Tutorial 4. Software Livre I. Universidade Federal do ABC.
Centro de Matematica Computacao e Cognicao. II. Introducao ao R.
SUMARIO
Sum
ario
1 Introduc
ao
10
6.1
Metodo manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
6.2
Metodo automatico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
7 C
alculos Simples
11
8 Explorac
ao preliminar dos dados
18
8.1
18
8.2
19
8.3
19
8.4
Medidas Descritivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
8.5
Funcoes miscelaneas u
teis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
8.6
25
9 Comparac
ao de grupos de indivduos.
9.1
27
27
9.1.1
O teste qui-quadrado (X ) . . . . . . . . . . . . . . . . . . . . . . . . . .
27
9.1.2
30
9.1.3
V de Cramer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
9.1.4
Phi de Cramer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
9.2
O teste T Pareado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
9.3
36
9.4
36
9.5
Medidas de Diagnostico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
9.5.1
Curva ROC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
9.5.2
44
9.5.3
Regressao linear m
ultipla . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
9.5.4
Analise Discriminante . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
SUMARIO
10 Gr
aficos
52
52
54
55
10.4 Histograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
10.5 Boxplots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
61
INDICE REMISSIVO65
REFERENCIAS
BIBLIOGRAFICAS64
62
1 Introduc
ao
Introduc
ao
A Estatstica esta presente em todas as areas da ciencia que envolvam a coleta e analise
http://cran.br.r-project.org
http://r-project.org/mail
Consulte o r-help
Dalgaard P (2002) Introductory Statistics with R. Springer, New York, ISBN 0-387-95475-9.
Fox J (2002) An R and S-PLUS Companion to Applied Regression. Sage Publications,
ISBN 0-761-92280-6 (softcover) ou 0-761-92279-2 (hardcover)
Comandos de ajuda do R
> help.start()
inicia documentacao na forma de arquivos html visualizados no seu browser
> help(sqrt)
inicia uma janela de ajuda sobre topico
Em alguns casos, o sinal de + ira surgir no lugar do prompt. Isso significa que algum comando
esta faltando. Neste tutorial os comandos serao precedidos de >, e em alguns momentos de +
para facilitar a familiaridade com a plataforma. Nao digite nenhum dos dois sinais na plataforma.
Os comandos digitados aparecerao em vermelho e a resposta da R aparecera em azul. Apos
digitar algum comando tecle enter para que ele seja executado.
As funcoes sempre sao acompanhadas de parenteses como, por exemplo, help() que abre a
ajuda da plataforma. Os parametros que o usuario deseja utilizar na funcao devem ser escritos
dentro dos parenteses.
10
espaco de trabalho.
funcoes principais que estao disponveis quando iniciamos o programa; os pacotes recomendados
que sao instalados com o R-base mas nao sao carregados automaticamente e para utiliza-los e
necessario usar a funcao require(pacote); e os pacotes de contruibuicao que nao sao instalados
com o R-base mas podem ser baixados pela internet. A instalacao desses ultimos pode ser feita
manualmente ou automaticamente.
Antes de instalar qualquer pacotes, voce verificar se ele esta instalado. Todos os pacotes
instalados em um computador podem ser vistos utilizando o comando abaixo:
> library()
Alem disso, voce pode utilizar a funcao require() para verificar que aquele determinado
pacote esta instalado.
Exemplo de pacote que esta instalado:
> require(MASS)
Carregando pacotes exigidos:
MASS
Warning message:
pacote MASS foi compilado na vers~
ao do R 2.9.2
Exemplo de pacote que nao esta instalado:
> require(Hmisc)
Carregando pacotes exigidos:
Hmisc
Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return
= TRUE, :
6.1
n~
ao h
a nenhum pacote chamado Hmisc
M
etodo manual
6.2
M
etodo autom
atico
11
Por exemplo, vamos instalar o pacote Rocr que e necessario para fazer curvas Roc na R.
Na pagina citada anterior clique na letra R. Procure na lista pelo nome do pacote ROCRe
clique nele. No pagina do pacote voce tera acesso a informacoes como abaixo:
Version (versao): 1.0-4 Depends (pacotes que ele depende): gplots, methods Published (data
de publicacao): 2009-12-14 Author (autor): Tobias Sing, Oliver Sander, Niko Beerenwinkel,
Thomas Lengauer Maintainer (mantenedor): Tobias Sing <tobias.sing at mpi-sb.mpg.de>
Em downloads, procure o arquivo para o seu sistema operacional e baixe o arquivo.
Na R, clique no menu pacotes e depois em instalar pacotes a partir de arquivos zips locais.
Selecione o arquivo que voce baixou e a R ira instala-lo. Para utiliza-lo agora e so digitar
library(ROCR) ou require (ROCR) antes de utilizar o pacote.
6.2
M
etodo autom
atico
C
alculos Simples
Utilizando a linha de comando de R podemos realizar calculos algebricos simples. Observe
os exemplos abaixo.
Voce pode somar,
> 1 + 1
[1] 2
subtrair,
> 14 - 6
[1] 8
multiplicar,
> 3 * 4
[1] 12
Introducao ao R - Universidade Federal do ABC
7 C
alculos Simples
12
dividir,
> 47/11
[1] 4.27
e tambem realizar calculos mais complexos como potenciacao,
> 2^6
[1] 64
ou entao, o seno de um angulo:
> sin(5)
[1] -0.959
Atencao! Todos os valores devem ser escritos em radianos e nao em graus. Lembre-se de que
2 equilavem a 360.
Outras possveis funcoes trigonometricas sao:
> cos(x)
calcula o cosseno de um angulo
> cos(x)
> tan(x)
> acos(x)
> asin(x)
> atan(x)
> cosh(x)
> sinh(x)
> tanh(x)
syntax error
Ex.2
> 2.3 * 2
[1] 4.6
Introducao ao R - Universidade Federal do ABC
7 C
alculos Simples
13
Voce pode nomear um resultado ou valor qualquer a fim de utiliza-lo em outros calculos.
Isso pode ser feito utilizando tres formas diferentes de comando:
Nome <- Valor
> x <- 2
> x
[1] 2
Valor -> Nome > 2 -> x
> x
[1] 2
Nome = Valor
> x = 2 * 2
> x
[1] 4
Todo tipo de calculo pode ser feito utilizando esse comando.
Voce pode designar um nome para um valor e utiliza-lo em um calculo simples.
> x <- 2
> x * 3 + 4
[1] 10
E pode guardar um novo valor na mesma variavel.
> x <- x + 1
> x
[1] 3
Outras funcoes e comandos essenciais:
Raiz quadrada
> sqrt(49)
[1] 7
Log em qualquer base
Introducao ao R - Universidade Federal do ABC
7 C
alculos Simples
14
> a = 1
> b = 13
> f = function(x) ((x^2 - x)/2)
> integrate(f, a, b)
324 with absolute error < 3.6e-12
7 C
alculos Simples
15
Voce pode criar uma matriz utilizando a funcao matrix(). Esse comando tem os seguintes
argumentos:
x
conjunto de n
umero que compoem a matriz
nrow
ncol
byrow
> matriz
Coluna1 Coluna2 Coluna3
Linha1
Linha2
Linha3
Voce tambem pode criar uma matriz e atribuir valores individualmente, por exemplo:
> A = matrix(0, 3, 6)
O valor 0 equivale aos valores que no exemplo anterior era uma lista de valores, o n
umero
de linhas e 3 e o n
umero de colunas e 6. Inicialmente a matriz fica da seguinte forma:
> A
[,1] [,2] [,3] [,4] [,5] [,6]
[1,]
[2,]
[3,]
Agora voce pode atribuir valores quaisquer a` matriz, sendo que A[1,2], significa o elemento
da primeira linha e segunda coluna da matriz A.
> A[1, 1] = 72
> A[1, 2] = 28
> A[1, 3] = 36
> A[1, 4] = 41
> A[1, 5] = 23
> A[2, 1] = 30
Introducao ao R - Universidade Federal do ABC
7 C
alculos Simples
16
> A[2, 2] = 51
> A[2, 3] = 47
> A[2, 4] = 30
> A[2, 5] = 42
Voce tambem pode realizar contas com os fatores da matriz como abaixo:
> A[1, 6] = A[1, 1] + A[1, 2] + A[1, 3] + A[1, 4] + A[1, 5]
> A[2, 6] = A[2, 1] + A[2, 2] + A[2, 3] + A[2, 4] + A[2, 5]
> A[3, 1] = A[1, 1] + A[2, 1]
> A[3, 2] = A[1, 2] + A[2, 2]
> A[3, 3] = A[1, 3] + A[2, 3]
> A[3, 4] = A[1, 4] + A[2, 4]
> A[3, 5] = A[1, 5] + A[2, 5]
> A[3, 6] = A[1, 6] + A[2, 6]
> A
[,1] [,2] [,3] [,4] [,5] [,6]
[1,]
72
28
36
41
23
200
[2,]
30
51
47
30
42
200
[3,]
102
79
83
71
65
400
Voce pode usar tambem rotinas de repeticao para realizar um mesmo calculo varias vezes:
> x = 0
> for (cont in 1:8) {
+
x <- x + 1
+ }
> x
[1] 8
O comando for, repete um mesmo calculo quantas vezes voce desejar. Neste caso ele ira
repetir 8 vezes o ato de somar uma unidade. A variavel cont e um contador que o programa
usa pra marcar quantas vezes ele precisa fazer um calculo. O contador deste caso utiliza a
sequencia numerica de 1 ate 8.
Entao para aqueles que nao estao familiarizados com programacao aqui esta uma traducao
deste comando:
para (cont de 1 ate 8) fazer calculo
Basicamente, o programa fez x = 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
A sequencia utilizada dentro da rotina for tambem e um comando e voce pode utiliza-lo.
Essa e a sequencia de 0 ate dez.
Introducao ao R - Universidade Federal do ABC
7 C
alculos Simples
17
> 0:10
[1]
9 10
8 10 12 14 16 18 20
-8
-6
-4
-2
10
e ate multiplica-las.
> a * b
[1]
9 16 21 24 25 24 21 16
Alem disso, duas sequencias podem ser juntadas e armazenadas em uma terceira. Para isso
significa concatenar (juntar).
usaremos c(), o S cT
> a <- 0:10
> b <- 50:70
Observe essa funcao. Estamos concatenando primeiro a sequencia a e depois a sequencia b
em uma sequencia que chamamos de m.
8 Explorac
ao preliminar dos dados
18
> m = c(a, b)
> m
[1]
9 10 50 51 52 53 54 55 56 57 58 59 60 61 62 63
[26] 64 65 66 67 68 69 70
Podemos fazer tambem o contrario e formar uma sequencia nova, concatenando primeiro b
e depois a.
> n = c(b, a)
> n
[1] 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
[26]
9 10
Explorac
ao preliminar dos dados
8.1
O codigo a seguir tem como objetivo mudar o diretorio que a plataforma usa para buscar
os arquivos.
O codigo precedido pelo smbolo # e um comentario que voce pode adicionar ao codigo a
fim de explicar o que cada parte do codigo significa.
#MUDANCA
DE DIRETORIO
Esse comando mostra ao usuario o diretorio em que a plataforma ira trabalhar.
> getwd()
[1] "C:/Documents and Settings/Acer/Meus documentos/_Ufabc_/Projetos/Sweave"
Aqui coloca-se o conte
udo do comando em uma variavel.
> wdir <- getwd()
O comando abaixo guarda como novo diretorio a ser utilizado neste trabalho, a pasta cujo
caminho o usuario colocar entre as apas.
> setwd("C:/Documents and Settings/Acer/Meus documentos/")
Voce pode usar o comando abaixo novamente para conferir se o novo diretorio foi salvo.
> getwd()
[1] "C:/Documents and Settings/Acer/Meus documentos"
Introducao ao R - Universidade Federal do ABC
8.2
8.2
19
DISPONIVEL
AINDA NAO
8.3
Transforma
c
ao e manipulac
ao de dados
A funcao read.table() le um arquivo de uma tabela (ou planilha) no formato *.txt (salvo
em um editor de texto como por exemplo o Wordpad ou Bloco de Notas).
No exemplo abaixo, a tabela lida foi salva na variavel dados.
dados=read.table("pesquisa8.txt", header=TRUE, row.names=1)
Parametros dentro da funcao podem ser modificados com o objetivo de alterar a forma
como o programa le o arquivo. Como por exemplo:
header=TRUE significa que a primeira linha contem os nomes das colunas
row.names=1
significa que a primeira coluna contem os nomes das fileiras
No exemplo abaixo, o programa le a tabela e guarda a tabela na variavel dados.
> dados = read.table("pesquisa8.txt", header = TRUE)
Ao digitar a variavel dados, toda a tabela lida sera mostrada ao usuario. Ja utilizando
o nome da variavel depois do smbolo $ e depois o nome de uma coluna da tabela e possvel
mostrar somente a referida coluna, como mostra abaixo. Os n
umeros entre colchetes indicam
o ndice do primeiro valor que cada linha mostra.
> dados$O2
[1]
[26]
[51]
[76]
[101]
[126]
1 42
Antes de salvar uma planilha em txt, lembre-se de substituir as vrgulas por pontos utilizando o menu Editar < Substituir.
A funcao table() identifica os diferentes termos da coluna e conta quantas observacoes de
cada ocorrem. No caso abaixo: 3 pessoas responderam 0, 146 pessoas respoderam 1 e 1 pessoa
respondeu 42.
> table(dados$O2)
0
42
3 146
8.4
Medidas Descritivas
8.4
20
Medidas Descritivas
Mean (Media),
1st. Qu (3 Quartil), valor que divide os dados em 75% menores e 25% maiores.
Max. (Maximo),
e a maior observacao realizada.
Observe o exemplo abaixo, onde calculou-se um resumo da idade dos entrevistados.
> summary(dados$Q2I)
Min. 1st Qu.
16.0
Median
19.0
23.5
Max.
32.1
84.0
47.8
Essas medidas tambem podem ser calculadas separadamente atraves dos comandos:
> min(dados$Q2I)
[1] 16
> max(dados$Q2I)
[1] 84
> mean(dados$Q2I)
[1] 32.1
> median(dados$Q2I)
[1] 23.5
moda? 1 quartil 3 quartil
Outras medidas descritivas que podem ser calculadas sao;
> var(x) Variancia
> sd(x)
Desvio Padrao
8.5
Func
oes miscel
aneas u
teis
8.5
21
Fun
c
oes miscel
aneas u
teis
Voce pode verificar os objetos existentes na area de trabalho utilizando a funcao a seguir:
> ls()
[1] "a"
"A"
"a.vert"
"a.x"
"anova"
[6] "b"
"B"
"b.x"
"c"
"c.x"
[11] "col"
"cont"
"d"
"d.x"
"d1"
[16] "dados"
"dados2"
"def.par"
"escola0"
"escola1"
[21] "escola2"
"escola3"
"escola4"
"escola5"
"escola6"
[26] "escola7"
"ex"
"f"
"freq"
"fumo"
[31] "h"
"homem"
"i"
"idade"
"k"
[36] "L"
"leg"
"m"
"M"
"m.read"
[41] "mat"
"mat1"
"matriz"
"mm"
"modelo"
[46] "mulher"
"n"
"N"
"perf"
"phi"
[51] "pred"
"read"
"read1"
"resposta"
"reta1"
[56] "reta2"
"ROCR.simple" "rp"
"rs"
"sum.plus.2"
[61] "t"
"tab"
"title"
"v"
"val"
[66] "vcramer"
"wdir"
"x"
"X"
"x.data"
[71] "y"
"z"
"Z"
"z1"
Voce pode tambem remover objetos que nao serao mais utilizados com seguinte a funcao:
> rm(x, y)
Voce pode verificar que tipo de componentes tem cada variavel utilizando a funcao mode()
> a.x = c("A", "B", "C", "D")
> b.x = c("A", 1, "B", 1)
> c.x = c(1, 2, 3, 4)
> d.x = c("sol", "lua", "noite", "dia")
> mode(a.x)
[1] "character"
> mode(b.x)
[1] "character"
> mode(c.x)
Introducao ao R - Universidade Federal do ABC
8.5
Func
oes miscel
aneas u
teis
22
[1] "numeric"
> mode(d.x)
[1] "character"
Voce tambem pode verificar se uma variavel e um fator ou e numerica utiliazando as funcoes
abaixo.
> rp = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4)
> rp <- factor(rp)
> rs = 1:10
> is.factor(rp)
[1] TRUE
> is.numeric(rs)
[1] TRUE
Voce pode calcular o valor absoluto de um objeto utilizando a funcao abs().
A funcao lines() e uma funcao que adequa linhas aos graficos de dispersao, podendo ser
utilizada para unir pontos.
Observe os exemplos abaixo, para utilizar a funcao spline() e necessario carregar o pacote
stats.
> require(stats)
> require(graphics)
> x <- -9:9
> plot(x, abs(x)^2, col = "red")
> lines(spline(x, abs(x)^2 + (10), n = 101), col = "green")
> lines(spline(x, abs(x)^2, n = 101), col = "blue")
> require(stats)
> require(graphics)
> x <- -9:9
> plot(x, abs(x)^2, col = "red")
> lines(spline(x, abs(x)^2 + (10), n = 101), col = "green")
> lines(spline(x, abs(x)^2, n = 101), col = "blue")
Func
oes miscel
aneas u
teis
80
8.5
23
60
40
abs(x)^2
20
> search()
[1] ".GlobalEnv"
"package:ROCR"
"package:gplots"
[4] "package:grid"
"package:caTools"
"package:bitops"
[7] "package:gdata"
"package:gtools"
"package:MASS"
[10] "package:xtable"
"package:stats"
"package:graphics"
"package:datasets"
[16] "package:methods"
"package:base"
"Autoloads"
8.5
Func
oes miscel
aneas u
teis
24
> attach(dados)
The following object(s) are masked from package:base :
T
> search()
[1] ".GlobalEnv"
"dados"
"package:ROCR"
[4] "package:gplots"
"package:grid"
"package:caTools"
[7] "package:bitops"
"package:gdata"
"package:gtools"
[10] "package:MASS"
"package:xtable"
"package:stats"
[13] "package:graphics"
"package:grDevices" "package:utils"
[16] "package:datasets"
"package:methods"
"Autoloads"
[19] "package:base"
Note como a digitacao fica mais rapida e pratica:
> mean(Q2I)
[1] 32.1
> table(Q24)
Q24
0
34 12
2 26 76
> summary(Hist
orico)
Min. 1st Qu.
0.00
1.00
Median
3.00
7.00
Max.
22.00
> detach(dados)
pt calcula uma cauda so
par() exemplo o que isso faz?
8.6
Func
oes Apply e Tapply
25
> require(grDevices)
> plot(1:12, type = "b", main = "fg : axes, ticks and box in gray",
+
on.exit(par(old.par))
invisible()
+ }
> ex()
8.6
Fun
c
oes Apply e Tapply
A partir de uma matriz podemos usar a funcao apply () para somar os itens de uma coluna
ou linha da matriz. Os argumentos dessa funcao sao:
mat1 nome da matriz que sera utilizada
1
sum operacoes basicas que podem ser utilizadas como sum (soma) e mean (media)
Definimos um vetor contendo todos os elementos da matriz, ordenados por coluna.
> mat = c(9, 6, 8, 9, 6, 3, 5, 6, 5, 2, 4, 5, 4, 1, 3, 4)
Definimos entao uma matriz que contem os elementos do vetor mat.
> mat1 = matrix(mat, 4, 4)
> mat1
[,1] [,2] [,3] [,4]
[1,]
[2,]
[3,]
[4,]
No caso abaixo a funcao apply() foi utilizada para encontrar a soma dos elementos das
linhas.
> apply(mat1, 1, sum)
[1] 24 12 20 24
Desta vez, calculou-se a soma dos elementos das colunas.
> apply(mat1, 2, sum)
8.6
Func
oes Apply e Tapply
26
[1] 32 20 16 12
Pode-se utilizar tambem uma funcao definida pelo usuario dentro da funcao apply().
> sum.plus.2 <- function(x) {
+
sum(x) + 2
+ }
> apply(mat1, 1, sum.plus.2)
[1] 26 14 22 26
Onde sum.plus.2 e o nome de uma funcao que soma os elementos de x e adiciona o valor 2.
A funcao tambem pode ser definida dentro da funcao apply() como no exemplo abaixo:
> apply(mat1, 1, function(x) sum(x) + 2)
[1] 26 14 22 26
Pode-se tambem generalizar uma funcao adicionando um n
umero qualquer a soma. Neste
exemplo adicionamos 1 a media das linhas.
> apply(mat1, 1, function(x, y) sum(x) + y, y = 1)
[1] 25 13 21 25
Neste caso a funcao tem duas variaveis, a funcao soma os elementos de x e depois adiciona
o elemrnto y, que neste caso tem valor 1.
A funcao tapply(), como a apply() trabalha com matrizes, porem neste caso calcula
operacoes entre dados com variaveis categoricas.
> tapply(dados$Renda, dados$Q26, mean)
0
0 16900 20400
1 16722 22074
2 20867 21957
3 18592 26333
4 24700 32600
Introducao ao R - Universidade Federal do ABC
9 Comparac
ao de grupos de indivduos.
27
Desta vez a funcao calculou a media dos entrevistas de acordo com a quantidade de livros
lidos em 2009 e o sexo.
> tab <- tapply(dados$Renda, list(dados$Q26, dados$Q1), mean)
> tab <- data.frame(tab)
> names(tab) = c("Feminino", "Masculino")
> row.names(tab) = c("Nenhum", "No m
aximo 2", "Entre tr^
es e cinco",
+
> tab
Feminino Masculino
Nenhum
16900
20400
No m
aximo 2
16722
22074
Entre tr^
es e cinco
20867
21957
18592
26333
Mais de oito
24700
32600
Comparac
ao de grupos de indivduos.
9.1
An
alise de dados utilizando tabelas de conting
encia
9.1.1
O teste qui-quadrado (X 2 )
Primeiramente, vamos ler a tabela e utilizar a funcao tapply() para contar os elementos
que acertaram ou erraram uma questao de conhecimento geral de acordo com o sexo.
> dados = read.table("pesquisa8.txt", header = TRUE)
> tapply(dados$Q1, dados$Q34, table)
$0
0
61 39
$1
0
27 23
Vamos colocar os valores em um vetor chamado a.
> a = c(61, 27, 39, 23)
Introducao ao R - Universidade Federal do ABC
9.1
An
alise de dados utilizando tabelas de conting
encia
28
Criaremos uma matriz b de tamanho 2x2, cujos elementos sao os componentes do vetor a.
> b = matrix(a, 2, 2)
> b
[,1] [,2]
[1,]
61
39
[2,]
27
23
Vamos rodar o teste qui-quadrado sem correcao de Yates, onde b e a matriz com os dados
o programa faz a correcao de Yates para
e o parametro correct e booleano e true e o default Uo teste.
> chisq.test(b, correct = FALSE)
Pearsons Chi-squared test
data:
9.1
An
alise de dados utilizando tabelas de conting
encia
29
Pode-se fazer tambem teste Qui-quadrado para diferencas de probabilidade, como a quantidade de pessoas de cada genero no nosso teste.
> table(dados$Q1)
0
88 62
> c = c(88, 62)
> chisq.test(c)
Chi-squared test for given probabilities
data:
100
50
48 17
5 32 48
Introducao ao R - Universidade Federal do ABC
9.1
An
alise de dados utilizando tabelas de conting
encia
30
30
30
Raramente
Nunca
30
30
30
> chisq.test(resposta)
Chi-squared test for given probabilities
data:
resposta
Este teste e bem parecido com o Qui-quadrado. Precisaremos de uma matriz ou tabela.
Neste caso, vamos iniciar montando uma tabela no prompt com dados de um teste clnico.
> a = c(5, 0, 1, 3)
> x = matrix(a, 2, 2)
> x
[,1] [,2]
[1,]
[2,]
> B = data.frame(x)
> names(B) = c("Presente", "Ausente")
> B
Presente Ausente
1
Rea
ca
~o -
3
Introducao ao R - Universidade Federal do ABC
9.1
An
alise de dados utilizando tabelas de conting
encia
31
p-value = 0.04762
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.694
Inf
sample estimates:
odds ratio
Inf
9.1.3
V de Cramer
Nao existe, ate o momento, uma funcao que realize o calculo do V de Crammer automaticamente, entao vamos calcula-lo utilizando funcoes basicas da R.
Vamos primeiramente contar quantas pessoas de cada sexo responderam certo ou errado
uma questao de conhecimentos gerais.
> tapply(dados$Q1, dados$Q34, table)
$0
0
61 39
$1
0
27 23
Criaremos um vetor a com os valores, e uma matriz b que contem os valores do vetor.
> a = c(61, 27, 39, 23)
> b = matrix(a, 2, 2)
> b
[,1] [,2]
[1,]
61
39
[2,]
27
23
Introducao ao R - Universidade Federal do ABC
9.1
An
alise de dados utilizando tabelas de conting
encia
32
50
9.1
An
alise de dados utilizando tabelas de conting
encia
33
ncol(b)) - 1))
> vcramer
X-squared
0.0340
9.1.4
Phi de Cramer
9.1
An
alise de dados utilizando tabelas de conting
encia
5
3
$2
0
6 22 14
1 17 11 23
$3
0 1 2 3 4
1 2 3 1 2
$4
1
1, 11, 2, 0, 7, 2, 23, 3, 3, 7, 0, 5, 0, 0, 0, 0, 4, 2, 0,
1, 0, 5)
> n = matrix(m, 5, 8)
> n
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]
[2,]
[3,]
22
14
[4,]
[5,]
17
11
23
3 60 11 66
7 11 43 27 34 18
34
9.2
O teste T Pareado
35
[1] 152
> k = chisq.test(n)
> chisq.test(n, correct = TRUE)$expected
[,1]
[,2]
[,3]
[,4]
[,5]
[,6]
[,7]
[,8]
3.395
2.132
0.849
0.533
3.112
1.954
1))
> vcramer
X-squared
11.9
> v = (((73.256)^2)/(150) * (4))^0.5
> phi = sqrt(((k$statistic)^2)/(sum(apply(n, 1, sum))))
> phi
X-squared
5.94
9.2
O teste T Pareado
Primeiramente vamos abrir arquivo com os dados que serao utilizados, conforme explicado
anteriormente.
> dados = read.table("pesquisa8.txt", header = TRUE)
Vamos realizar o teste utilizando o comando t.test(), cujos parametros sao:
dados$Q1
parametro x
dados$Celebridade
parametro y
pared=TRUE
argumento booleano que define a paridade. O default e FALSE.
Como esse exemplo e pareado, entao o comando sera:
9.3
36
8.520
A sada do teste mostra a estatstica (t = -17.7123), o p-valor (p-value < 2.2e-16), a media
da componente x (0.4133333) e da componente y (8.5200000). Neste caso, a diferenca entre as
medias dos dois grupos e diferente de zero.
9.3
Analogamente ao Teste T pareado, vamos abrir um arquivo com os dados e entao utilizar o
comando t.test(). Uma vez que o teste e para duas amostras independentes, devemos utilizar
o parametro booleano pared como FALSE ou simplesmente nao utiliza-lo (default).
> dados2 = read.table("teste_t.txt", header = TRUE)
> t.test(dados2$A, dados2$B)
Welch Two Sample t-test
data:
2.380
sample estimates:
mean of x mean of y
5.13
9.4
4.26
An
alise de Vari
ancia (Anova) ou teste F
Ate agora, trabalhamos com testes com ate duas amostras. Ha situacoes porem, em que
e necessario fazer comparacoes entre mais de dois grupos. Para esses casos, pode-se utilizar a
Analise de Variancia, conhecida como ANOVA.
9.4
An
alise de Vari
ancia (Anova) ou teste F
37
78 78 79 77
88 78 73 69
87 83 79 75
88 81 75 70
83 78 77 74
82 81 78 83
81 81 80 80
80 82 78 75
80 76 83 76
10 89 76 84 75
Vamos criar um vetor com fatores de 1 a 4 que identifiquem os valores de A, precisamos entao
de 10 vezes cada valor. Utilizaremos a funcao gl().
> L = gl(4, 10)
> L
[1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4
[39] 4 4
Levels: 1 2 3 4
Sera criado um vetor N que contem os valores de A, que pode ser vista como uma conversao
de matriz para vetor.
9.4
An
alise de Vari
ancia (Anova) ou teste F
L
38
1 80
18 2 82
27 3 80
36 4 83
1 78
10 1 89
19 2 76
28 3 78
37 4 80
1 88
11 2 78
20 2 76
29 3 83
38 4 75
1 87
12 2 78
21 3 79
30 3 84
39 4 76
1 88
13 2 83
22 3 73
31 4 77
40 4 75
1 83
14 2 81
23 3 79
32 4 69
1 82
15 2 78
24 3 75
33 4 75
1 81
16 2 81
25 3 77
34 4 70
1 80
17 2 81
26 3 78
35 4 74
342
456
36
342
114
36
456
13
Pr(>F)
--Signif. codes:
0
S***
S 0.001
S**
S 0.01
S*
S 0.05
S.
S 0.1
S
S 1
O resultado da tabela de Anova, mostrou que as diferencas entre as medias sao altamente
significativa(s). Conclui-se entao que ha uma diferenca entre os grupos, porem podemos verificar
entre quais pares de grupos as diferencas sao significantes utilizando o teste Tukey HSD.
> TukeyHSD(X)
Introducao ao R - Universidade Federal do ABC
9.4
An
alise de Vari
ancia (Anova) ou teste F
39
lwr
upr p adj
2-1 -4.2
-8.48
0.0848 0.056
3-1 -5.0
-5.08
3.4848 0.958
4-2 -4.0
-8.28
0.2848 0.075
4-3 -3.2
-7.48
1.0848 0.203
Faremos agora um diagrama de dispersao com os resultados o teste TukeyHSD(), que pode
ser visto no grafico abaixo.
> plot(TukeyHSD(X, ordered = TRUE))
12
13
23
14
24
34
10
9.4
An
alise de Vari
ancia (Anova) ou teste F
40
Pode-se perceber atraves na figura acima?? que existe diferencas significativas entre as duplas 1-3 e 1-4.
Exemplo 2. Neste exemplo chamaremos o conjunto de dados de Z.
> mat = c(87, 90, 67, 99, 686, 18, 92, 46, 38, 65, 426, 35, 52,
+
44, 455, 45, 617, 83, 94, 53, 572, 716, 89, 63, 58, 69, 80,
56, 34, 21, 54, 78, 90, 25, 48, 252, 27, 38, 45, 62, 92,
> mat
[1]
87
90
67
[20]
53 572 716
[39]
45
62
99 686
18
92
46
38
65 426
35
52
44 455
45 617
83
94
89
58
69
80
56
34
54
78
90
48 252
27
38
63
92 252 450
21
25
> length(mat)
[1] 48
> Z = matrix(mat, 16, 3, dimnames = list(c(NULL), c("A", "B", "C")))
> X
Call:
aov(formula = N ~ L)
Terms:
L Residuals
Sum of Squares
Deg. of Freedom
342
456
36
9.4
An
alise de Vari
ancia (Anova) ou teste F
[1]
87
90
67
[20]
53 572 716
[39]
45
62
41
99 686
18
92
46
38
65 426
35
52
44 455
45 617
83
94
89
58
69
80
56
34
54
78
90
48 252
27
38
53
30 2
21
40 3
62
92
63
92 252 450
21
25
20 2
65
87
11 1 426
21 2 572
31 2
54
41 3
90
12 1
35
22 2 716
32 2
78
42 3 252
67
13 1
52
23 2
89
33 3
90
43 3 450
99
14 1
44
24 2
63
34 3
25
44 3
1 686
15 1 455
25 2
58
35 3
48
45 3 122
18
16 1
45
26 2
69
36 3 252
46 3 957
92
17 2 617
27 2
80
37 3
27
47 3 750
46
18 2
83
28 2
56
38 3
38
48 3 892
38
19 2
94
29 2
34
39 3
45
113478
2950178
45
56739
45 2950178
65560
0.87
0.43
54
9.4
An
alise de Vari
ancia (Anova) ou teste F
42
> TukeyHSD(anova)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = M ~ L)
$L
diff
2-1
32
31
21
200
100
100
200
300
9.5
Medidas de Diagn
ostico
9.5
9.5.1
43
Medidas de Diagn
ostico
Curva ROC
Para fazer curva ROC no R, voce tera que baixar o pacote Rocr que precisa de outros
pacotes para funcionar. Baixe os seguinte pacotes: Rocr, gplots, bitops, caTools, gdata e
gtools. Verifique como baixar e instalar pacotes no R na secao
> library(ROCR)
> data(ROCR.simple)
> pred <- prediction(ROCR.simple$predictions, ROCR.simple$labels)
> perf <- performance(pred, measure = "tpr", x.measure = "fpr")
> plot(perf, col = rainbow(10))
0.6
0.4
0.2
0.0
0.8
1.0
0.0
0.2
0.4
0.6
0.8
1.0
9.5
Medidas de Diagn
ostico
9.5.2
44
Regress
ao linear simples
idade and h
1Q Median
3Q
Max
2.077 13.445
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
0.6042
0.7434
0.81
0.42
idade
0.1205
0.0204
5.91
2.3e-08 ***
--Signif. codes:
0
S***
S 0.001
S**
S 0.01
S*
S 0.05
S.
S 0.1
S
S 1
p-value: 2.31e-08
9.5
Medidas de Diagn
ostico
45
646
646
Residuals 148
2740
19
Pr(>F)
--Signif. codes:
0
S***
S 0.001
S**
S 0.01
S*
S 0.05
S.
S 0.1
S
S 1
Agora plotaremos o grafico. E entao, uma reta de regressao podera ser adicionada ao
grafico:
> plot(idade, h, xlab = "Idade", ylab = "Acertos", main = "Acertos por Idade",
+
col = "blue")
9.5
Medidas de Diagn
ostico
46
20
15
10
Acertos
20
30
40
50
60
70
80
Idade
Voce tambem pode adcionar a reta utilizando a funcao abaixo e adicionar um texto contendo
a funcao de regressao.
> plot(idade, h, xlab = "Idade", ylab = "Acertos", main = "Acertos por Idade",
+
col = "blue")
9.5
Medidas de Diagn
ostico
47
20
15
10
Acertos
20
30
40
50
60
70
80
Idade
Exemplo 2. No exemplo abaixo, vamos ler uma tabela que esta online e adicionar duas
retas de regressao ao grafico de dispersao dos dados. A primeira segue o metodo dos mnimos
quadrados enquanto a segunda segue o Least Median Squares(lmsreg) que e um metodo de
ajuste de reta que e robusto, pois tenta minimizar alguma funcao dos resduos ao quadrado
ordenados. (4)
header = TRUE)
9.5
Medidas de Diagn
ostico
48
140
120
100
fumo$imorte
80
60
70
80
90
100
110
120
130
fumo$ifumo
9.5.3
Regress
ao linear m
ultipla
1Q Median
3Q
Max
2.051 11.992
Coefficients:
Estimate Std. Error t value Pr(>|t|)
Introducao ao R - Universidade Federal do ABC
9.5
Medidas de Diagn
ostico
49
(Intercept) -1.68e+00
9.60e-01
-1.75
0.08155 .
idade
1.26e-01
1.97e-02
6.38
2.1e-09 ***
dados$Renda
1.05e-04
2.93e-05
3.58
0.00047 ***
--Signif. codes:
0
S***
S 0.001
S**
S 0.01
S*
S 0.05
S.
S 0.1
S
S 1
p-value: 3.83e-10
> anova(modelo)
Analysis of Variance Table
Response: h
Df Sum Sq Mean Sq F value
Pr(>F)
idade
646
646
dados$Renda
219
219
147
2521
17
Residuals
---
Signif. codes:
0
S***
S 0.001
S**
S 0.01
S*
S 0.05
S.
S 0.1
S
S 1
9.5
Medidas de Diagn
ostico
50
1.5
1.0
0.5
10
10
Fitted values
Normal QQ
Residuals vs Leverage
Fitted values
107
142
107
70142
3
2
1
0
2
107
142
70
0.0
Standardized residuals
Standardized residuals
142
70
ScaleLocation
107
Standardized residuals
5
0
10
Residuals
10
Residuals vs Fitted
Cook's distance144
0.00
Theoretical Quantiles
0.02
0.04
0.06
0.08
Leverage
Apos utilizar a funcao layout com a qual pode-se plotar n graficos em um so arquivo, deve-se
utilizar a funcao abaixo para retornar ao default.
valores preditos
residuals(fit)
resduos
anova(fit)
tabela anova
vcov(fit)
matriz de covariancia
influence(fit)
diagnostico da regressao
9.5.4
An
alise Discriminante
9.5
Medidas de Diagn
ostico
51
uma das tabelas e sera utilizada na analise abaixo. O exemplo abaixo foi retirado do topico de
ajuda do R sobre Linear Discrimant Analysis.
29 23 23
> z <- lda(Sp ~ ., x.data, prior = c(1, 1, 1)/3, subset = y)
> predict(z, x.data[-y, ])$class
[1] s s s s s s s s s s s s s s s s s s s s s s s s s s s c c c c c c c c c c c
[39] c c c v c c c c c c v v v v v v v v v v v v v v v v c v v v v v v v v v v
Levels: c s v
> (z1 <- update(z, . ~ . - Petal.W.))
Call:
lda(Sp ~ Sepal.L. + Sepal.W. + Petal.L., data = x.data, prior = c(1,
1, 1)/3, subset = y)
Prior probabilities of groups:
c
6.06
2.88
4.36
5.00
3.40
1.44
6.47
2.91
5.51
LD2
Sepal.L.
1.345 -1.400
Sepal.W.
0.934
3.207
Petal.L. -3.667
0.929
10 Gr
aficos
52
Proportion of trace:
LD1
LD2
0.998 0.002
10
Gr
aficos
10.1
Par
ametros gerais
breaks= 20
xlim = range(0,100)
ylim= range(0,60)
xlab=Nome do eixo X
ylab=Nome do eixo Y
init.angle = 45
width = 480
height = 480
units = px
bg=transparent
A legenda e
leg
pch=15
10.1
Par
ametros gerais
53
> plot(1, 1, xlim = c(1, 5.5), ylim = c(0, 7), type = "n", ann = FALSE)
> text(1:5, rep(6, 5), labels = c(0:4), cex = 1:5, col = 1:5)
> points(1:5, rep(5, 5), cex = 1:5, col = 1:5, pch = 0:4)
> text((1:5) + 0.4, rep(5, 5), cex = 0.6, (0:4))
> points(1:5, rep(4, 5), cex = 2, pch = (5:9))
> text((1:5) + 0.4, rep(4, 5), cex = 0.6, (5:9))
> points(1:5, rep(3, 5), cex = 2, pch = (10:14))
> text((1:5) + 0.4, rep(3, 5), cex = 0.6, (10:14))
> points(1:5, rep(2, 5), cex = 2, pch = (15:19))
> text((1:5) + 0.4, rep(2, 5), cex = 0.6, (15:19))
> points((1:6) * 0.8 + 0.2, rep(1, 6), cex = 2, pch = (20:25))
10
11
12
13
14
16
17
15
20
21
22
18
23
19
25
24
"violet"))
Introducao ao R - Universidade Federal do ABC
10.2
Gr
afico de setores(ou de pizza)
54
O texto deve ser inserido utilizando a funcao text(). Cujos parametros basicos sao:
0,
localizacao em x do texto
-0.95
localizacao em y do texto
10.2
Gr
afico de setores(ou de pizza)
O comando para grafico de setores e pie(). Observe que no exemplo abaixo, determinamos
a variavel freq como sendo uma conurbacao dos n
umeros 88 e 62. Nomeamos essa conurbacao
atraves do comando names() que nomeia os componentes da variavel freq. Enfim utilizamos a
funcao pie(), o parametro main e o parametro col.
10.3
Gr
afico de barras
55
Sexo
Mulheres
Homens
texto
10.3
Gr
afico de barras
O grafico de barras ou de colunas pode ser realizado usando a funcao barplot(). Neste
caso foi utilizado as funcoes c() e legend(), explicadas anteriormente.
> col = c("orange", "violet")
> barplot(table(dados$Q1), main = "Sexo", ylim = range(0, 100),
+
col = col)
10.4
Histograma
56
100
Sexo
Legenda
20
40
60
80
Feminino
Masculino
Atencao! Lembre-se de que a funcao barplot() deve ser utilizada sempre com a funcao
table().
10.4
Histograma
O grafico de Histograma e muito utilizado e pode ser feito atraves do comando hist()
como no exemplo abaixo:
> hist(dados$Renda, main = "Indice de Renda", xlab = "Indice de Renda (R$)",
+
10.4
Histograma
57
20
15
10
0
Quantidade de Indivduos
25
30
Histogram of dados$Renda
10000
20000
30000
40000
50000
Note que o histograma ficou desregular, porem utilizando o parametro breaks podemos
torna-lo mais condizente com o formato de um histograma.
> hist(dados$Renda, breaks = 5, main = "Histograma do Indice de Renda",
+
xlab = "Indice de Renda (R$)", ylab = "Quantidade de Indiv
duos")
10.5
Boxplots
58
30
20
10
0
Quantidade de Indivduos
40
10000
20000
30000
40000
50000
10.5
Boxplots
10.5
Boxplots
59
70
60
30
40
10
20
Horas
50
Caso voce nao queira que os outliers aparecam no grafico pode adicionar o parametro como
FALSE.
> boxplot(dados$Q18, outline = FALSE, main = "Quantidade de Horas de Internet",
+
10.5
Boxplots
60
10
20
Horas
30
40
Outro exemplo, fazendo uma comparacao entre boxplots utilizando como argumento mais
elementos. Neste caso, os dados referem-se a quantidade de acertos em um teste de conhecimento separados por faixa de escolaridade:
> boxplot(escola0$Q2934soma, escola1$Q2934soma, escola2$Q2934soma,
+
ylab = "Intelectualidade")
10.6
Gr
afico de dispers
ao
61
6
4
0
Intelectualidade
10
Escolaridades
10.6
Gr
afico de dispers
ao
principais sao:
Main
Sub
Ttulo do grafico
Subttulo do grafico
Fonte do subttulo
Col.main
Cor do ttulo
Col.sub
Cor do subttulo
10.7
Exportando o gr
afico.
62
1.2
1.0
0.8
0.6
0.2
0.4
Coeficiente de Concentrao
1.4
Ttulo
10
15
20
10.7
Exportando o gr
afico.
bg = "white")
> dev.off()
png:pie(Q1).png
2
Introducao ao R - Universidade Federal do ABC
10.7
Exportando o gr
afico.
63
REFERENCIAS
64
Refer
encias
1 EHLERS, R. S. Introducao `a Estatstica. Universidade Federal do Parana: Departamento
de Estatstica. 2002.
2 BUSSAB, W. O.; MORETTIN, P. A. Estatstica Basica. 5.. ed. Sao Paulo: Saraiva, 2002.
3 RIPLEY, B. D. The R-Project in the Statistical Computing. Workshop na Universidade de
Glasgow (EUA). maio 2001.
4 LANDIM, F. M. P. F. Analise exploratoria dos dados. Instituto de Matematica. Departamento de Metodos Estatsticos - (DME). Disponvel em http://www.im.ufrj.br/ flavia/aed06/mad114r9.ppt. Acessado em 13 de Julho de 2010.
INDICE REMISSIVO
65
Indice Remissivo
Analise Discriminante, 50
Mudanca de Diretorio, 18
Apply, 25
Multiplicacao, 11
Caminho de Procura, 23
Pacote, 10
Concatenar, 17
Phi de Cramer, 33
Curva ROC, 43
Potenciacao, 12
Exponencial, 14
Raiz Quadrada, 13
Regressao Linear M
ultipla, 48
Fator, 22
Funcoes Trigonometicas, 12
cosseno, 12
Sequencia, 16
seno, 12
Soma, 11
tangente, 12
Subtracao, 11
Graficos, 52
Tapply, 26
Barras, 55
Teste Anova, 36
Boxplot, 58
Dispersao, 61
Teste F, 36
Exportar o Grafico, 62
teste Qui-quadrado (X 2 ), 27
Histograma, 56
Teste T Nao-Pareado, 36
Legenda, 52
Teste T Pareado, 35
Parametros, 52
V de Cramer, 31
Pizza, 54
Valor Absoluto, 22
Setores, 54
Texto, 52
Integral, 14
Leitura de dados, 19
Logaritmo, 13
Matriz, 15
Medidas Descritivas, 20
Desvio Padrao, 20
Mediana, 20
Maximo, 20
Media, 20
Mnimo, 20
Variancia, 20