You are on page 1of 95

UNIVERSIDADE FEDERAL DO CEAR

CENTRO DE CINCIAS
DEPARTAMENTO DE ESTATSTICA E MATEMTICA
APLICADA

CURSO DE R

Professora
Ana Maria Souza de Araujo
Aluno
Jos Roberto Silva dos Santos

Fortaleza, Dezembro de 2009

Sumrio
1 Introduo

2 Tipos de Objetos

1.1 Como utilizar o R . . . . . . . . . . . . . . . . . . . . . . . . .


1.2 Pacotes Libraries . . . . . . . . . . . . . . . . . . . . . . . . .
2.1
2.2
2.3
2.4
2.5
2.6
2.7

Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Data-frames . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Importao de dados . . . . . . . . . . . . . . . . . . . . . . .
2.7.1 A funo read.table() . . . . . . . . . . . . . . . . . . .
2.7.2 Importando planilhas do Microsoft Excel (Arquivos xls)

3 Estatstica Descritiva

3.1 Rotinas Grcas . . . . . . . . . . . .


3.1.1 Funes grcas de alto nvel .
3.1.2 Funes grcas de baixo nvel
3.1.3 Funes grcas interativas . .
3.2 Parmetros grcos. A funo par() . .
3.3 Descrevendo um conjunto de dados . .
3.3.1 Descrio Univariada . . . . . .
3.3.2 Descrio Bivariada . . . . . . .
3.3.3 Alguns grcos mais elaborados

4 Probabilidade e Inferncia

4.1 Controle de uxo e denio de funes


4.1.1 Execuo condicional . . . . . .
4.1.2 Ciclos . . . . . . . . . . . . . .
4.1.3 Denindo funes . . . . . . . .
2

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

4
5

6
9
13
16
17
18
18
19
21

22

22
22
23
23
23
29
32
41
48

53

53
53
54
55

SUMRIO

4.2 Distribuies de Probabilidade . . . . . . . . . .


4.2.1 Distribuio Normal . . . . . . . . . . .
4.2.2 Distribuio t-Student . . . . . . . . . .
4.2.3 F-Snedecor . . . . . . . . . . . . . . . .
4.2.4 Distribuio Gama . . . . . . . . . . . .
4.2.5 Distribuio Binomial . . . . . . . . . .
4.2.6 Distribuio de Poisson . . . . . . . . . .
4.3 Inferncia . . . . . . . . . . . . . . . . . . . . .
4.3.1 Teorema Central do Limite . . . . . . . .
4.3.2 Distribuies Amostrais . . . . . . . . .
4.3.3 Estimao de mxima verossimilhana .
4.3.4 Intervalos de Conana . . . . . . . . . .
4.3.5 Testes de Hipteses . . . . . . . . . . . .
.1 Apndice Software R no Curso de Estatstica da
Referncias Bibliogrcas . . . . . . . . . . . . . . .

. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
UFC
. . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

56
57
60
61
63
67
69
72
72
75
79
84
89
94
95

Captulo 1
Introduo
R uma linguagem e tambm um ambiente para clculos estatsticos e grcos. Semelhante a linguagem e ambiente S, R oferece uma ampla variedade de
metodologias estatsticas (anlise descritiva, modelagem linear e no-linear,
testes estatsticos paramtricos e no-paramtricos, anlise de sries temporais,...) alm de um vasto ferramental grco. Este distribudo livremente
sob os termos da Free Software Foundation's GNU General Public License
em forma de cdigo fonte. Compila e executa em uma ampla variedade de
plataformas UNIX e sistemas similares (incluindo FreeBSD e Linux), Windows e MacOS.

1.1 Como utilizar o R


O R est disponvel para download no site http://www.r-project.org/. Aps
a instalao inicie o R (isso pode ser feito utilizando o cone que ser criado
na rea de trabalho do seu computador) e veja que ser aberta a seguinte
tela:
Este o ambiente R que possui uma janela denominada console. Para limpar
o contedo que aparece na tela do console basta combinar as teclas "Ctrl"e
"L". Nesta janela possvel digitar e executar comandos, porm, a melhor
forma de se editar comandos usando o editor de script, disponvel a partir
da verso 2.1.1. Para ativar o editor, basta ir at a barra de menus e clicar
sequencialmente em: Arquivo e Novo script. No ambiente R as janelas
podem ser organizadas por ttulo (uma ao lado da outra) ou em forma de
cascata. Para isso, basta ir at o menu Janelas e escolher uma dessas opes.
Para executar comandos no script, deixe o cursor na linha de comandos desejada e combine as teclas "Ctrl"e "R"; no caso de comandos ocupando vrias
linhas, selecione todas as desejadas e aps isso faa a mesma combinao de
4

CAPTULO 1.

INTRODUO

Figura 1.1: Tela inicial do R


teclas.

1.2 Pacotes Libraries


Ao instalar o R, este vem com uma quantidade padro de ferramentas que esto na forma de pacotes, por exemplo, os pacotes "stats"e "base"que contm
funes bsicas como plot(), mean(), matrix() entre outras, so exemplos de pacotes padres do R. No entanto, o usurio no precisa limitar-se
somente a estes, ou seja, possvel instalar mais pacotes sempre que for
necessrio. O R conta com inmeros colaboradores no mundo inteiro que
criam e disponibilizam estes pacotes. Estas contribuies podem ser adquiridas, na forma de arquivos "zip", diretamente da home page citada na subseo anterior. Ou tambm, podem ser instaladas diretamente do ambiente
R, bastando para isso, que o computador do usurio esteja conectado internet.

Captulo 2
Tipos de Objetos
No R, a manipulao de dados feita atravs de objetos, sob os quais esto
denidas uma srie de comandos que permitem, entre outras, operaes de
aritmtica, armazenamento de dados, descrio e anlise. Os objetos bsicos
do R so dos tipos: vetores, matrizes, arrays, data-frames, listas e funes. Os
quatro primeiros tipos, so objetos que armazenam dados diferindo apenas
pela forma de armazenamento e operao destes. J os objetos do tipo
funo, sempre recebem um "input" e produzem um "output".

2.1 Vetores
No R, a atribuio de um valor a um objeto feita utilizando o smbolo "=",
por exemplo:
> x1=2
>x1
[1] 2

Na primeira linha deste comando estamos atribuindo o valor numrico 2 ao


objeto x1, na segunda linha pede-se para mostrar o valor de x1,e na terceira
linha exibido o valor de x1. Para separar comandos em uma mesma linha
deve-se usar ";" por exemplo, o cdigo acima poderia ser escrito da seguinte
forma:
> x1=2;x1
[1] 2

Agora vamos examinar os seguintes comandos:


6

CAPTULO 2.

TIPOS DE OBJETOS

> x2=c(1,2,3);x2
[1] 1 2 3
> x3=1:10;x3
[1] 1 2 3

6 7

9 10

> x4=seq(0,1,by=0.1);x4
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
> x5=rep(1,3);x5
[1] 1 1 1
> x6=rep(c(1,2),c(3,5));x6
[1] 1 1 1 2 2 2 2 2

Essas so diferentes formas de denir um vetor. Vejamos. O vetor x2 foi


denido usando o comando "c" que concatena os valores que esto entre
parnteses. Para x3, foi utilizado um comando que gera sequncias, o smbolo
":" indica que o vetor ser preenchido com valores de 1 a 10. Outra forma
de gerar sequncias utilizando a funo "seq", sendo que nesta podemos
escolher o valor de incremento, que especicado no argumento by=. Para o
exemplo acima vemos que x4 foi preenchido com uma sequncia iniciando em
0 e terminando em 1 com incremento de 0, 1. Por ltimo, temos os vetores
x5 e x6 que foram denidos usando a funo "rep", muito til para criao
de vetores com elementos repetidos. No primeiro argumento 1 da funo
deve ser informado o elemento que ser repetido e no segundo argumento
informamos o nmero de vezes que este ser repetido. No vetor x5 temos o
nmero 1 repetido 3 vezes e, note que, tambm podemos usar vetores nos
argumentos da funo rep. o que foi feito para denir x6. Neste caso, o
primeiro vetor deve conter os elementos que se deseja repetir, e o segundo
ir conter o nmero de repeties de cada elemento do primeiro. possvel
selecionar elementos de um vetor usando colchetes, por exemplo:
> x4[x4>0.5]
[1] 0.6 0.7 0.8 0.9 1.0

Aqui foi utilizado o operador lgico > para selecionar os elementos de x4


maiores do que 0,5.
> x4[3]
1 Os

argumentos de uma funo devem ser sempre separados por vrgula

CAPTULO 2.

TIPOS DE OBJETOS

[1] 0.2
> x4[-3]
[1] 0.0 0.1 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
> x4[1:3]
[1] 0.0 0.1 0.2

Nos comandos acima, primeiro selecionado o terceiro elemento de x4 (a


posio dos elementos contada a partir de 1), depois foi utilizado o operador
de subtrao para excluir o terceiro elemento de x4 e por ltimo estamos
selecionando os trs primeiros elementos de x4. Note que a linguagem R
bastante intuitiva, por exemplo, imagine se nosso interesse fosse excluir
mais de um elemento de x4 de uma s vez, seria razovel pensar no seguinte
comando:
> x4[-(1:3)]
[1] 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

que est excluindo os elementos 1, 2 e 3 de x4.

Operaes com vetores: H diversas operaes numricas denidas sobre


vetores. Vejamos algumas.
> x2+2
[1] 3 4 5
> x2+3:5
[1] 4 6 8
> x2*3
[1] 3 6 9
> x2^(1:3)
[1] 1 4 27
> x5/x2
[1] 1.0000000 0.5000000 0.3333333
> round(x5/x2,1)
[1] 1.0 0.5 0.3

CAPTULO 2.

TIPOS DE OBJETOS

Vemos que no primeiro comando estamos somando 2 a todos elementos do


vetor x2. Em seguida, somamos cada elemento de x2 com cada elemento
do vetor (3,4,5). No terceiro comando, multiplicamos cada elemento de x2
por 3. Logo depois, elevamos o primeiro elemento de x2 a 1, o segundo a 2
e o terceiro a 3. No ltimo comando introduzimos a funo round() onde
o primeiro argumento desta um valor ou vetor numrico, e o segundo o
nmero de casas decimais que se deseja no valor ou valores.

Vetores de caracteres: Tambm podemos atribuir caracteres a um objeto,


por exemplo:

> x7=c("fulano","ciclano","beltrano");x7
[1] "fulano" "ciclano" "beltrano"
> x8=c("a",x2);x8
[1] "a" "1" "2" "3"
> is.numeric(x8)
[1] FALSE
> is.character(x8)
[1] TRUE

Os caracteres devem estar sempre entre aspas. Caso no estejam, o R ir


process-los como objeto. Observe que, para criar o vetor x8, concatenamos
x2 com o caractere "a", ou seja, tnhamos um vetor que era numrico e lhe foi
acrescentado um caractere. Porm o vetor x8 no possui elemento numrico
algum, o que foi vericado com a funo is.numeric(), que informa ao
usurio a natureza do objeto testado. Para x8 a funo retornou o valor
lgico FALSE, indicando que este no numrico. Isso devido ao fato de
que, no R, objetos do tipo vetor s aceitam elementos de um nico tipo
(caractere ou numrico). Mais adiante iremos ver um objeto que permite
elementos de mais de um tipo.

2.2 Matrizes
Matrizes so objetos que possuem as mesmas propriedades dos vetores, diferindo
apenas na dimenso. Uma das formas de criar uma matriz no R utilizando
a funo abaixo:
matrix(um vetor, nrow =nmero de linhas, ncol =nmero de colunas,
byrow = FALSE,...)

CAPTULO 2.

TIPOS DE OBJETOS

10

Esta funo recebe um vetor e o organiza em uma matriz conforme indicado


no argumento byrow. Se byrow=FALSE2 o vetor ser organizado por colunas
da matriz, seno byrow=TRUE (que signica por linha = verdade), ou seja, o
vetor ser organizado por linhas. Vejamos um exemplo:
> m1=matrix(1:9,nc=3);m1
[,1] [,2] [,3]
[1,]
1
4
7
[2,]
2
5
8
[3,]
3
6
9

Veja que suciente escrever apenas as duas primeiras letras dos argumentos
(ao invs de ncol basta digitar nc) e tambm, basta informar o nmero de
linhas ou colunas, uma vez que estes devem ser sempre mltiplos do total de
elementos da matriz. Vamos agora denir uma outra matriz usando o mesmo
vetor que foi usado na anterior, porm, vamos agora orden-lo por linha.
> m2=matrix(1:9,nc=3,byrow=T);m2
[,1] [,2] [,3]
[1,]
1
2
3
[2,]
4
5
6
[3,]
7
8
9

Uma outra maneira de denir uma matriz usando a funo cbind, que serve
para concatenar vetores, por exemplo:
> m3=cbind(1:5,6:10,11:15);m3
[,1] [,2] [,3]
[1,]
1
6 11
[2,]
2
7 12
[3,]
3
8 13
[4,]
4
9 14
[5,]
5 10
15

Podemos usar esta funo para concatenarmos quantos vetores quisermos, e


estes correspondero s colunas da matriz que est sendo criada.

Seleo de elementos: Assim como foi visto na seo anterior, tambm

podemos selecionar elementos de uma matriz utilizando colchetes agora na


forma: [ , ] onde antes da vrgula indica(m)-se a(s) linhas e depois a(s)
colunas. Por exemplo:
2 Este

a opo default, ou seja, se nada for especicado este ser a opo utilizada

CAPTULO 2.

TIPOS DE OBJETOS

11

> m3[1,2]
[1] 6
> m3[,2]
[1] 6 7

9 10

> m3[2,]
[1] 2 7 12
> m3[-2,]
[,1] [,2] [,3]
[1,]
1
6 11
[2,]
3
8 13
[3,]
4
9 14
[4,]
5 10
15
> m3[4:5,1:2]
[,1] [,2]
[1,]
4
9
[2,]
5 10

No primeiro comando estamos selecionando o elemento que est na primeira


linha e segunda coluna de m3. No segundo selecionamos apenas a segunda
coluna. No terceiro selecionada a segunda linha. E no quarto comando
estamos excluindo a segunda linha de m3 e por ltimo selecionamos uma submatriz constituda de alguns elementos das linhas 4 e 5 e das colunas 1 e 2
de m3.

Operaes com matrizes: Existem vrias operaes denidas sob matrizes. Vejamos algumas atravs de exemplos.
> m1+m2
[,1] [,2] [,3]
[1,]
2
6 10
[2,]
6 10
14
[3,] 10
14 18
> m1*m2
[,1] [,2] [,3]
[1,]
1
8 21
[2,]
8 25
48
[3,] 21
48 81

CAPTULO 2.

TIPOS DE OBJETOS

12

> t(m3)
[,1] [,2] [,3] [,4] [,5]
[1,]
1
2
3
4
5
[2,]
6
7
8
9
10
[3,] 11
12 13
14 15
> m3%*%m2
[,1]
[1,] 102
[2,] 114
[3,] 126
[4,] 138
[5,] 150

[,2]
120
135
150
165
180

[,3]
138
156
174
192
210

> t(m2)%*%m2
[,1] [,2] [,3]
[1,] 66
78 90
[2,] 78
93 108
[3,] 90 108 126

Nos dois primeiros comandos temos adio e multiplicao das matrizes m1


e m2 elemento a elemento. No terceiro comando foi utilizado a funo t()
que faz transposio de matrizes. O produto matricial feito utilizando %*%.
No exemplo temos o produto matricial de m3 com m2. Por ltimo temos o
produto matricial da transposta de m2 com m2. Esta operao conhecida
como produto cruzado e no R existe uma funo especca para realiz-la.
Basta fazer:
> crossprod(m2)
[,1] [,2] [,3]
[1,] 66
78 90
[2,] 78
93 108
[3,] 90 108 126

Podemos destacar tambm as funes det(), solve() e eigen() que retornam, respectivamente, o determinante, a inversa e os auto-valores e autovetores de uma matriz. Vejamos um exemplo:
> m4=matrix(c(6,5,4,1,3,0,2,-1,1),nc=3);m4
[,1] [,2] [,3]
[1,]
6
1
2
[2,]
5
3 -1

CAPTULO 2.

[3,]

TIPOS DE OBJETOS

13

> det(m4)
[1] -15
> solve(m4)
[,1]
[,2]
[,3]
[1,] -0.2 0.06666667 0.4666667
[2,] 0.6 0.13333333 -1.0666667
[3,] 0.8 -0.26666667 -0.8666667
> eigen(m4)
$values
[1] 8.021597

2.676943 -0.698540

$vectors

[,1]
[,2]
[,3]
[1,] -0.6895898 0.1176905 -0.3086003
[2,] -0.6083940 -0.9525448 0.6136865
[3,] -0.3928393 0.2807263 0.7267425

2.3 Arrays
Array a generalizao de uma matriz, uma vez que neste tipo de objeto
podemos denir bem mais do que duas dimenses. No R denimos um array
usando a funo array() que tem a seguinte forma:
array(vetor_de_dados, vetor_de_dimenses) Por exemplo:
> ar1=array(1:20,c(3,3,2));ar1
, , 1
[,1] [,2] [,3]
[1,]
1
4
7
[2,]
2
5
8
[3,]
3
6
9
, , 2
[1,]

[,1] [,2] [,3]


10
13 16

CAPTULO 2.

[2,]
[3,]

11
12

14

TIPOS DE OBJETOS

14
15

17
18

Neste caso estamos trabalhando com trs dimenses. como se tivssemos


uma matriz formada por duas submatrizes, conforme a estrutura abaixo:

1 4 7
2 5 8
3 6 9
10 13 16
11 14 17
12 15 18

Vamos agora inserir mais uma dimenso neste array. Basta fazer:
> ar2=array(1:20,c(3,2,2,2));ar2
, , 1, 1
[,1] [,2]
[1,]
1
4
[2,]
2
5
[3,]
3
6
, , 2, 1
[1,]
[2,]
[3,]

[,1] [,2]
7 10
8 11
9 12

, , 1, 2
[,1] [,2]
[1,] 13
16
[2,] 14
17
[3,] 15
18
, , 2, 2
[,1] [,2]
[1,] 19
2

CAPTULO 2.

[2,]
[3,]

20
1

TIPOS DE OBJETOS

15

3
4

Agora temos uma estrutura do tipo:

1 4 13 16
2 5 14 17

3 6 15 18

7 10 19 2

8 11 20 3
9 12 1 4

A seleo de elementos de um array semelhante a seleo de elementos de


uma matriz, veja alguns exemplos:
> ar2[,,1,1]
[,1] [,2]
[1,]
1
4
[2,]
2
5
[3,]
3
6
> ar2[,,1,2]
[,1] [,2]
[1,] 13
16
[2,] 14
17
[3,] 15
18
> ar2[,,2,1]
[,1] [,2]
[1,]
7 10
[2,]
8 11
[3,]
9 12
> ar2[,,2,2]
[,1] [,2]
[1,] 19
2
[2,] 20
3
[3,]
1
4

Note que, estamos selecionando todas as submatrizes 3 2 do array ar2. R


possui vrios bancos de dados internos, dentre eles temos o banco de dados
UCBAdmissions, que um array. Para v-lo basta digitar UCBAdmissions
desta forma e executar.

CAPTULO 2.

TIPOS DE OBJETOS

16

2.4 Data-frames
Data-frames so objetos que podem armazenar elementos de mais de um
tipo, diferentemente de vetores matrizes e arrays, que foram todos os seus
elementos a serem de um mesmo tipo. Sua estrutura semelhante a de uma
matriz, sendo que, aqui todas as colunas so tratadas individualmente. A
funo usada para criar data-frames data.frame(). Segue um exemplo:
> d1=data.frame(individuo=x7,altura=c(1.65,1.70,1.80));d1
individuo altura
1
fulano 1.65
2 ciclano
1.70
3 beltrano 1.80

Podemos ver que a primeira coluna de d1 formada por caracteres e a segunda constituda por valores numricos. Vale observar que, dentro de cada
coluna de um data-frame continua-se tendo a restrio dos elementos serem
do mesmo tipo. O tratamento individual apenas entre as colunas. Um data
frame pode ser tratado como uma matriz. Assim a seleo de elementos
feita da mesma forma. Por exemplo:
> d1[2,2]
[1] 1.7
> d1[,2]
[1] 1.65 1.70 1.80

A seleo de uma coluna de um data-frame tambm feita utilizando o


smbolo $ da seguinte forma:
> d1$altura
[1] 1.65 1.70 1.80

Podemos tratar as colunas de um data-frame como se fossem objetos, para


isso basta utilizar a funo attach(), aplicando-a em d1:
> attach(d1)
> altura
[1] 1.65 1.70 1.80
> individuo
[1] "fulano"

"ciclano"

"beltrano"

Ou seja, ao se fazer attach(d1) R criou o objeto altura e individuo.

CAPTULO 2.

TIPOS DE OBJETOS

17

2.5 Listas
Lista uma coleo de objetos, ou seja, podemos organizar vrios objetos de
tamanho e/ou tipos diferentes em uma lista. A funo usada para criar uma
lista list(). Vejamos um exemplo:
> l1=list(A=1:10,B="caractere",C=matrix(1:4,nc=2));l1
$A
[1] 1 2 3 4 5 6 7 8 9 10
$B
[1] "caractere"
$C

[,1] [,2]
[1,]
1
3
[2,]
2
4

Aqui temos uma lista formada por trs objetos de tipos e tamanhos diferentes.
Primeiro temos um vetor numrico, depois temos um caractere e por ltimo
temos uma matriz. H duas maneiras de selecionar elementos de uma lista.
A primeira usando colchetes simples [ ]. Neste caso o elemento selecionado
ainda ser uma lista. A segunda usando colchetes duplos [[ ]] e neste caso,
ser retornado o objeto que est na posio indicada da lista. Exemplo:
> l1[2]
$B
[1] "caractere"
>
> l1[[2]]
[1] "caractere"
>
> is.character(l1[2])
[1] FALSE
>
> is.character(l1[[2]])
[1] TRUE

CAPTULO 2.

TIPOS DE OBJETOS

18

2.6 Funes
Como j citado anteriormente, no R funes so tambm objetos. Estas
possuem uma lista de argumentos cujos valores, quando no padronizados,
devem ser informados pelo usurio (input). O retorno (output) fornecido
pelas funes pode ser um objeto de qualquer classe, ou um valor de qualquer
natureza ( caracter, numrico, etc). No R, a maioria das funes so escritas
com a prpria linguagem R. Para estas, possvel visualizar seu contedo
digitando o nome da funo desejada, por exemplo:
> matrix
function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
{
data <- as.vector(data)
if (missing(nrow))
nrow <- ceiling(length(data)/ncol)
else if (missing(ncol))
ncol <- ceiling(length(data)/nrow)
.Internal(matrix(data, nrow, ncol, byrow, dimnames))
}
<environment: namespace:base>

No caso das funes que no so escritas em linguagem R3 , como o caso de


min, max, lines etc, no possvel visualizar o contedo diretamente. Para
estas, preciso examinar os arquivos do cdigo fonte do R. Podemos obter
ajuda sobre qualquer funo do R utilizando o smbolo "?". Por exemplo,
para obter informaes sobre a funo matrix, basta digitar ?matrix e o
help do R ser disponibilizado. No R, possvel criar funes (isto ser visto
mais adiante) e tambm modicar as funes escritas em linguagem R j
existentes. Para isto, basta utilizar o comando: fix(nome_da_funo), que
cria um novo "script" com o contedo da funo desejada pronta para edio.

2.7 Importao de dados


Como foi visto nas subsees anteriores, no R a entrada de dados pode ser
feita diretamente na forma de vetores, matrizes, etc. No entanto, possvel
obter dados externos provenientes de outros programas. Vejamos ento como
fazer isso.
3 Em

geral as funes so escritas em linguagem C

CAPTULO 2.

TIPOS DE OBJETOS

19

2.7.1 A funo read.table()


Esta funo permite importar dados nos formatos txt (AscII) e csv (separado
por vrgulas). Sua sintaxe descrita abaixo:
read.table(file, header = FALSE, sep = "",dec=".", ...)

Aqui as reticncias foram colocadas para indicar que h mais argumentos


nesta funo. Os demais argumentos podem ser vistos acessando a ajuda do
R usando o comando: ?read.table. Abaixo esto descritos os principais
argumentos da funo read.table.
file: onde deve ser informado o diretrio onde est gravado o ar-

quivo, tambm o nome e a extenso do mesmo (txt ou csv), tudo entre


aspas. Aconselha-se ao usurio denir um nico diretrio de trabalho
onde devem estar gravados todos os arquivos a serem importados. Para
denir um diretrio padro, basta seguir os seguintes passos: no console, v at a barra de menus e clique sequencialmente em Arquivo e
Mudar dir... (mudar diretrio). Aps isso, aparecer uma caixa de
dilogo pedindo para informar o diretrio desejado. Se isso for feito,
ento basta informar o nome do arquivo com a extenso, pois o R j
ir procur-lo no diretrio que foi denido. Tambm podemos ler um
arquivo diretamente da internet para isso, ao invs de um diretrio,
informaremos agora a URL onde est o arquivo.

header: Se igual a TRUE a primeira linha do banco do dados ser assumida como rtulo das variveis. Se igual a FALSE os dados sero lidos

a partir da primeira linha.

sep: Informa ao R qual o separador de campos e valores que est sendo

usado no arquivo a ser importado. Para arquivos csv usado ponto e


vrgula (;).

dec: Informa ao R qual o separador de decimais que est sendo usado


no arquivo. O default do R dec=. portanto se no banco de dados

a ser importado estiver sendo usado outro separador de decimais, este


dever ser informado aqui.

Exemplos:
1. Importando um banco de dados no formato txt, com rtulos

na primeira linha e com vrgula como separador de decimais.

CAPTULO 2.

TIPOS DE OBJETOS

20

> read.table("E:/Monitoria/Aula de R/consumo dirio de protena.txt"


,header=T,dec=",")
1
2
3

pais Carne Porco_aves Ovos Leite Peixe Cereais


Albnia 10.1
1.4 0.5
8.9 0.2
42.3
ustria 8.9
14.0 4.3 19.9
2.1
28.0
Blgica_Luxemb. 13.5
9.3 4.1 17.5 4.5
26.6

Aqui vemos o comando usado para a importao e abaixo esto as trs


primeiras linhas e sete primeiras colunas do banco de dados. Note que
aqui estamos informando o caminho que deve ser seguido para encontrar
o arquivo, se j tivssemos denido um diretrio padro, bastaria fazer:
> read.table("consumo dirio de protena.txt",header=T,dec=",")

Para obter o mesmo resultado.


2. Importando um banco de dados em formato csv, com rtulos

na primeira linha, sem casas decimais e com diretrio padro


denido

> read.table("dados - livro aberto-fechado.csv",header=T,sep=";")


mec.f vet.f alg.a ana.a est.a
1
77
82
67
67
81
2
63
78
80
70
81
3
75
73
71
66
81

Em arquivos csv, os campos so separados por ponto e vrgula, por isso


a necessidade de fazer sep=; como visto no comando acima.
3. Importando um banco de dados txt diretamente da Internet
read.table("http://www.ime.usp.br/~pam/D-IBV")

CAPTULO 2.

TIPOS DE OBJETOS

21

2.7.2 Importando planilhas do Microsoft Excel (Arquivos


xls)
muito comum o uso de planilhas eletrnicas para confeco de banco de
dados. Por isso imagina-se que a maioria dos usurios de R possua seus
bancos de dados em formato xls. claro que estes arquivos podem ser convertidos em formato txt ou csv (que uma das opes de formato do Excel) e
trazidos para o R usando a funo read.table() conforme visto na subseo
anterior. Porm, pode ser mais cmodo para o usurio trabalhar diretamente
com seus arquivos xls, sem precisar gerar outros. Para importar arquivos em
formato xls preciso, primeiramente, baixar o pacote RODBC. Suponha que
desejamos importar os dados que esto em um arquivo chamado Planilha.xls
na aba Plan1. Ento devemos usar o seguinte grupo de comandos:
require(RODBC)
xlscon=odbcConnectExcel("Planilha.xls")
dados1=sqlFetch(xlscon, "Plan1")
odbcClose(xlscon)
dados1

Na primeira linha de comandos estamos fazendo a requisio do pacote RODBC


usando a funo require(). Aps isso criamos o objeto xlscon usando
a funo odbcConnectExcel, que abre a conexo do R com o Excel. Na
terceira linha de comandos estamos criando o objeto dados1, que receber
os dados desejados. Para isso utilizada a funo sqlFecth que recebe como
argumentos o objeto xlscon e o nome da planilha onde esto os dados (no
caso Plan1). Na quarta linha de comandos, usamos a funo odbcClose, que
usada para fechar a conexo com o Excel. E por ltimo pedimos para o R
ler o contedo do objeto dados1 que ir conter o banco de dados desejado.

Captulo 3
Estatstica Descritiva
No R, temos um grande nmero de funes para a anlise descritiva de dados. Resumos estatsticos, bem como distribuies de frequncias, clculo de
correlaes etc, so facilmente obtidos com o uso dos comandos adequados.
Alm disso, tem-se aqui um vasto ferramental para a representao grca
de dados. As rotinas grcas de R, so um dos principais atrativos desse
software, por conta da grande exibilidade e versatilidade que estas oferecem
ao usurio. Portanto, antes de prosseguirmos com a anlise descritiva de
dados iremos apresentar as principais funes grcas disponveis no R, uma
vez que doravante neste texto, estas sero bastante utilizadas.

3.1 Rotinas Grcas


Os comandos para criao de grcos podem ser agrupados em trs categorias:
Funes grcas de alto nvel, que criam novos grcos na janela gr-

ca, denindo os eixos, etiquetas, ttulos, etc.

Funes de baixo nvel, que permitem adicionar novas informaes a

grcos j criados, tal como novos dados, linhas, etiquetas.

Funes grcas interativas, que permitem adicionar ou remover intera-

tivamente informao aos grcos existentes, utilizando um dispositivo


apontador, como por exemplo o mouse.

3.1.1 Funes grcas de alto nvel


Este tipo de funo grca gera um grco a partir dos dados que so informados como argumento para a funo. A principal funo dessa categoria
22

CAPTULO 3.

ESTATSTICA DESCRITIVA

23

a funo plot() cuja descrio : plot(x,y,...): x e y so vetores de


dados e as reticncias indica que podem ser includos mais parmetros (ver
mais adiante os argumentos da funo par).

3.1.2 Funes grcas de baixo nvel


Algumas vezes pode acontecer das funes grcas de alto nvel no produzirem exatamente o grco pretendido. Neste caso, os comandos de baixo
nvel podem ser usados para adicionar alguma informao adicional ( tal
como pontos, linhas ou texto) ao grco atual. As funes de baixo nvel
mais usadas so descritas abaixo: points(x,y)
lines(x,y) Acrescenta pontos ou linhas ao grco atual.
text(x,y, etiquetas,...): Acrescenta texto aos pontos (x, y). Geralmente, etiquetas um vetor de valores inteiros ou de caracteres.
abline(a,b)
abline(h=y)
abline(v=x)

O primeiro comando acrescenta uma reta com declive b e ordenada na origem


a ao grco atual. A opo h = y representa uma linha altura y ; a opo
v = x representa uma linha vertical no ponto de abcissa x.

3.1.3 Funes grcas interativas


So funes que permitem extrair ou adicionar informao a um grco utilizando o mouse. A principal delas a funo locator():
locator(n,type): Permite ao usurio selecionar regies do grco usando
o boto esquerdo do mouse at que se tenha selecionado um mximo de n
(por default, n=512) pontos, ou at pressionar o boto direito para terminar
a seleo.

3.2 Parmetros grcos. A funo par()


A funo par() usada para modicar, de forma permanente, a lista dos
parmetros grcos do dispositivo grco atual. A maioria dos parmetros
da funo par() podem ser usadas diretamente como parmetros adicionais
das funes grcas. Isso permite alterar apenas uma rotina grca especca (alterao provisria). Vamos ento descrever a funo par().
A funo par possui a seguinte sintaxe:

CAPTULO 3.

ESTATSTICA DESCRITIVA

24

par(<nome do argumento >=<valor >, no.readonly=FALSE)

Segue abaixo a descrio de seus argumentos:


no.readonly: Argumento lgico. Se especicado igual a TRUE e no

houver outros argumentos na funo, ento ser retornado uma lista


com os parmetros grcos que poderam ser ajustados em uma chamada
subsequente de "par".

adj: O valor de adj determina a forma que o texto (Strings) ser

justicados.

1. 0 para justicar o texto esquerda


2. 0,5 para centralizar o texto
3. 1 para justicar o texto direita
permitido tambm qualquer valor no intervalo [0,1] e em muitos dispositivos tambm funcionam valores fora deste intervalo. Para a funo
text temos a seguinte forma: adj=c(x, y) onde x e y determinam, respectivamente, a justicao e a direo do texto.
ann: Argumento lgico. Se especicado FALSE ento, para funes

grcas de alto nvel, os rtulos dos eixos so retirados.

ask: Argumento lgico. Se TRUE solicita ao usurio um input antes

que uma nova gura seja plotada.

bg: Especica a cor a ser usada no fundo dos grcos. Ver mais adiante

a especicao das cores.

bty: Uma cadeia de caracteres que determina o tipo de caixa que ser

traada ao redor dos grcos. Se for especicado um dos seguintes


caracteres (entre aspas): "o", "l", "7", "c", "u", "]", a caixa resultante
se assemelha-r a forma da correspondente letra maiscula. O valor
"n"(entre aspas) suprime a caixa.

cex: Valor numrico que dene a scala do texto e dos smbolos grcos

em relao ao valor padro.

cex.axis: Especica a ampliao a ser utilizada para a notao sobre

os eixos em relao ao valor atual.

cex.lab: Especica a ampliao a ser usada nos ttulos dos eixos x e


y em relao ao valor atual.

CAPTULO 3.

ESTATSTICA DESCRITIVA

25

cex.main: Especica a ampliao a ser usada nos ttulos principais dos

grcos em relao ao valor atual.

cex.sub: Especica a ampliao a ser usada nos subttulos em relao

ao valor atual.

cin: R.O.; Tamanho do caractere (largura, altura) em polegadas.


col: Para especicar as cores dos smbolos a serem plotados. As

cores podem ser especicadas das seguintes formas: con uma cadeia
de caracteres dando o nome da cor (em ingls) entre aspas, por exemplo "blue". Uma lista de possveis cores pode ser obtida com a funo
colors. Outra maneira de especicar cores em termos de componentes RGB com uma cadeia da forma "#RRGGBB"onde cada um
dos pares RR, GG, BB consiste em dgitos hexadecimais com valores na
faixa 00 a FF. As cores tambm podem ser especicadas por um ndice
de uma pequena tabela de cores que compatvel com S. Tambm as
funes rgb, hsv, gray e rainbow proporcionam formas adicionais
de gerar cores.

col.axis: Usado para especicar a cor das notaes sobre os eixos


col.lab: Usado para especicar a cor a ser usada nos ttulos dos eixos

X"e "Y".

col.main: Cor a ser usada nos ttulos principais dos grcos.


col.sub: Cor a ser usada nos subttulos.
cra: R.O.; Tamanho do caractere (largura, altura) em "pixels".
crt: Um valor numrico para especicar em graus como devem ser

rotacionados os caracteres individuais. Devem ser usados apenas valores mltiplos de 90.

csi: R.O.; Especica a altura em polegadas dos caracteres.


cxy: R.O.; Retorna um vetor do tipo (largura, altura) com o tamanho

padro dos caracteres do grco.

din: R.O.; Dimenses do dispositivo em polegadas.


err: (No implementado; R no avisa quando pontos fora da regio

grca no so plotados.) Para o grau de relatrio de erro desejado.

CAPTULO 3.

ESTATSTICA DESCRITIVA

26

fg: Especica a cor a ser usada no primeiro plano dos grcos. Esta a

cor padro usada em objetos como eixos e caixas ao redor dos grcos.

fig: Um vetor numrico da forma c(x1, x2, y1, y2) que d as coorde-

nadas da regio da gura na regio de apresentao do dispositivo.

fin: Um vetor numrico da forma c(x, y) que especica o tamanho da

regio da gura em polegadas.

font: Um nmero inteiro que especica a fonte a ser usada no texto,

de modo que:
-

1 corresponde a
2 corresponde a
3 corresponde a
4 corresponde a

texto simples
texto em negrito
texto em itlico e
texto em itlico-negrito

font.axis: Usado para especicar o tipo de letra a ser utilizada nas

notaes sobre os eixos.

font.lab: Usado para especicar o tipo de letra a ser usada nos ttulos

dos eixos.

font.main: Tipo de letra a ser usada nos ttulos principais dos grcos.
font.sub: Especica o tipo de fonte a ser usada nos subttulos dos

grcos.

gamma: Para a correo gamma, ver hsv(...,gamma) mas adiante.


lab: Um vetor numrico da forma c(x, y, len), o qual modica a forma

de notao dos eixos. Os valores de x e y especicam o nmero aproximado de marcas de escala nos eixos x e y, respectivamente, len especica o tamanho das notaes sobre os eixos, no entanto, atualmente
ainda no est implementado. O valor padro de lab c(5, 5, 7).

las: Um nmero em {0,1,2,3} com o qual se especica o estilo da

notao dos eixos:

- 0: sempre paralelo ao eixo (valor padro);


- 1: sempre horizontal;
- 2: sempre perpendicular ao eixo;

CAPTULO 3.

ESTATSTICA DESCRITIVA

27

- 3: sempre vertical. Note que a rotao de cadeias de caracteres ou


de caracteres individuais ( via par(srt=...)) no afeta os rtulos
dos eixos.
lty: Usado para especicar o tipo de linha. Os tipos so especicados

com um nmero inteiro

lwd: Um nmero inteiro para determinar a largura da linha. o valor

padro 1.

mai: Um vetor numrico da forma c(abaixo, esquerda, acima, direita)

que d os tamanhos das margens especicados em polegadas.

mar: Um vetor numrico da forma c(abaixo, esquerda, acima, dire-

ita) a partir do qual especicamos o nmero de linhas entre as margens do dispositivo grco e as margens da gura. O valor padro
c(5,4,4,2)+0.1.

mex: Possui a mesma nalidade do argumento mar (expandir ou con-

trair a gura) a diferena e que ao invs de um vetor, usa-se um nico


valor numrico. Para um bom funcionamento deste argumento use
valores no intervalo (0, 3].

mfcol, mfrow: Um vetor da forma c(nl, nc). As guras seguintes

apareceram em um nico dispositivo grco como se fossem elementos


de uma matriz nl nc, ordenadas por coluna (se for utilizado mfcol)
ou por linha (se for utilizado mfrow). Alternativas a este argumento
so as funes layout(...) e split.screen(...).

mfg: Um vetor numrico da forma c(i, j) onde i e j indicam qual

gura (considerando cada gura como um elemento de uma matriz) ser


plotada em continuao a ltima plotagem. A matriz de guras deve ser
previamente ajustada por par(mfcol=c(...)) ou par(mfrow=c(...)).

mgp: Um vetor da forma c(t, n, e) especicando a distncia ( em unidades

"mex") dos ttulos dos eixos, notaes dos eixos e eixos, respectivamente, margem da gura. O valor padro c(3, 1, 0).

mkh: Especica a altura em polegadas dos smbolos a serem plotados


quando o valor de pch um inteiro. Atualmente este completamente

ignorado.

new: Argumento lgico. O valor padro FALSE, se for especicado


como TRUE o comando grco de alto nvel seguinte no limpar a

janela atual, sobrepondo a nova gura gura anterior.

CAPTULO 3.

ESTATSTICA DESCRITIVA

28

oma: Um vetor da forma c(abaixo, esquerda, acima, direita) que d o

tamanho das margens exteriores em linhas de texto.

omd: Um vetor da forma c(x1,x2,y1,y2) usado para especicar outras

margens a regio interna da gura em NDC (normalized device coordinates), isto , como frao (em [0,1]) da regio do dispositivo grco.

omi: Um vetor da forma c(abaixo, esquerda, acima, direita)para es-

pecicar o tamanho das margens exteriores em polegadas.

pch: Pode ser um nmero inteiro ou um caractere a ser usado como


padro em grcos de pontos. Possveis valores de pch so especicados
no documento de ajuda da funo points.
pin: Especica as dimenses do grco atual (largura, altura), em

polegadas.

plt: Um vetor da forma c(x1, x2, y1, y2) que d as coordenadas da

regio grca como frao da regio da gura atual.

ps: Um inteiro que determina o tamanho das notaes e ttulos dos

eixos.

pty: Um caractere entre aspas para especicar o tipo de regio grca

a ser usada:

- "S"gera uma regio grca quadrada;


- "m"gera uma regio grca mxima.
smo: (no-implementada) Rotao em graus de uma cadeia de cara-

cteres.

tck: Usado para especicar a longitude dos marcadores de escala como

uma frao do menor valor entre a largura e altura da regio grca.


Se tck=1, sero inseridas linhas de grade no grco. O valor padro
tck=NA e este equivalente a tcl=-0.5.

tcl: A longitude dos marcadores de escala como uma frao da altura


de uma linha de texto. O valor padro 0.5.
type: Um caractere entre aspas que determina o tipo de grco a ser

plotado. Possveis valores deste argumento esto descritos no documento de ajuda da funo plot.

CAPTULO 3.

ESTATSTICA DESCRITIVA

29

usr: Um vetor da forma c(x1, x2, y1, y2) que d os extremos das co-

ordenadas da regio grca. Quando uma escala logartmica estiver


sendo usada, ento o x-limite ser
10 ^ par("usr")[1:2]

. Do mesmo modo para o eixo y .


xaxp: Um vetor da forma c(x1, x2, n) que determina as coordenadas

dos marcadores de escala e o nmero de intervalos entre estes no eixo


x.

xaxs: O estilo de clculo de intervalo de eixo para o eixo x. Seus

possveis (entre aspas) so:


- "r", regular,

Observaes:
1. Argumentos R.O (Read-only) so usados apenas para consultas.
2. Os seguinte argumentos juntamente com os argumentos do tipo R.O,
s podem ser ajustados com a chamada de par():
"ask",
"g","n",
"lheight",
"mai", "mar", "mex", "mfcol", "mfrow", "mfg",
"new",
"oma", "omd", "omi",
"pin", "plt", "ps", "pty",
"usr",
"xlog", "ylog"

3.3 Descrevendo um conjunto de dados


Para iniciar a descrio de um conjunto de dados fundamental sabermos
quais so os tipos de variveis disponveis. As variveis so classicadas do
seguinte modo:

CAPTULO 3.

ESTATSTICA DESCRITIVA

30

quantitativas
- discretas
- contnuas

qualitativas
- ordinais
- nominais

Em nosso estudo vamos considerar os dados da Tabela 1, que so oriundos


de uma pesquisa antropomtrica realizada com mulheres acima de 60 anos
(Pinheiro et.al, 2008).
Pela Tabela 1 podemos ver que dispomos de variveis qualitativas, como
o caso de "Categoria", e tambm de variveis quantitativas, o caso de
"Idade". Caso se queira entrar com os dados diretamente no R, o objeto
adequado ao armazenamento um data-frame. O usurio pode digitar os
dados usando o editor do R, que semelhante a uma planilha eletrnica.
Segue ento os comandos necessrios:
PA=edit(data.frame())

Aqui estamos denido o objeto PA que o data-frame contendo os dados.


Aps digitado, se houver necessidade de alguma alterao nos dados isso
pode ser feito usando a funo fix() do seguinte modo:
fix(PA)

Precisamos tambm do comando attach(PA) para trabalharmos com as colunas do objeto como variveis. Vamos examinar ento as seis primeiras
linhas do objeto PA:
> PA[1:6,]
Categoria Idade Peso Altura IMC Classe_IMC Cintura Quadril
RCQ Closse
1
Ativa
61 58.2
154 24.5
normal
87
109 0.80
MR
2 Sedentria
69 63.0
152 27.3 sobrepeso
89
104 0.86
GR
3 Sedentria
61 70.1
158 28.1 sobrepeso
106
123 0.86
GR
4 Sedentria
71 73.2
156 30.1 sobrepeso
110
122 0.90
GR
5
Ativa
63 58.6
152 25.4 sobrepeso
99
121 0.82
MR
6 Sedentria
71 77.0
160 30.1 sobrepeso
125
132 0.95
GR

Note que trocamos os nomes das variveis, isso porque espaos no so caracteres vlidos para nomear objetos, e alm disso, um objeto com o nome de
Altura(cm), por exemplo, seria entendido como funo. As variveis qualitativas devem ser do tipo fator. Devemos ento redenir estas variveis usando
a funo factor(). Por exemplo, para a varivel Categoria temos:

CAPTULO 3.

31

ESTATSTICA DESCRITIVA

Tabela 3.1: Pesquisa antropomtrica realizada em mulheres idosas acima de


60 anos que receberam atendimento no Hospital do Idoso em Dezembro de
2008
Categoria

Idade

Ativa
Sedentria
Sedentria
Sedentria
Ativa
Sedentria
Sedentria
Sedentria
Ativa
Sedentria
Sedentria
Sedentria
Sedentria
Sedentria
Sedentria
Ativa
Ativa
Ativa
Ativa
Ativa
Ativa
Ativa
Ativa
Ativa
Ativa
Ativa
Ativa
Ativa
Ativa
Ativa
Ativa
Ativa
Sedentria
Sedentria
Sedentria
Sedentria
Sedentria
Sedentria
Sedentria
Ativa
Sedentria
Sedentria
Sedentria
Sedentria

61
69
61
71
63
71
72
68
66
69
72
67
63
66
63
63
67
71
63
60
69
64
63
66
71
64
70
63
66
64
69
69
64
63
72
73
68
71
72
69
68
68
73
79

Peso
(Kg)
58,2
63,0
70,1
73,2
58,6
77,0
76,2
59,8
64,3
52,1
62,0
52,1
58,0
55,0
50,1
57,9
56,2
68,6
51,0
53,4
61,3
53,2
54,6
56,2
60,3
54,7
60,0
51,3
50,0
49,8
55,2
58,2
51,6
62,7
75,6
65,2
61,8
64,3
59,2
63,4
66,0
61,7
68,2
60,1

Altura
(cm)
154,0
152,0
158,0
156,0
152,0
160,0
165,0
160,0
155,0
151,0
156,0
151,0
157,0
154,0
157,0
160,0
152,0
159,0
150,0
150,0
154,0
158,0
150,0
152,0
156,0
158,0
160,0
154,0
153,0
150,0
156,0
160,0
156,5
153,0
165,0
154,0
152,0
150,0
153,0
163,0
160,0
158,0
155,0
160,0

IMC
24,5
27,3
28,1
30,1
25,4
30,1
28
23,4
26,8
22,8
25,5
22,8
23,5
23,2
20,3
22,6
24,3
27,1
22,7
23,7
25,8
21,3
24,3
24,3
24,8
21,9
23,4
21,6
21,4
22,1
22,7
22,7
21,1
26,8
27,8
27,5
26,7
28,6
25,3
23,9
25,8
24,7
28,4
23,5

Classe
IMC
normal
sobrepeso
sobrepeso
sobrepeso
sobrepeso
sobrepeso
sobrepeso
normal
sobrepeso
normal
sobrepeso
normal
normal
normal
normal
normal
normal
sobrepeso
normal
normal
sobrepeso
normal
normal
normal
normal
normal
normal
normal
normal
normal
normal
normal
normal
sobrepeso
sobrepeso
sobrepeso
sobrepeso
sobrepeso
sobrepeso
normal
sobrepeso
normal
sobrepeso
normal

Cintura
(cm)
87
89
106
110
99
125
115
85
100
74
90
76
80
78
72
78
76
106
71
76
89
73
80
84
82
76
81
76
76
72
81
78
76
90
98
96
82
78
73
93
90
90
107
92

Quadril
(cm)
109
104
123
122
121
132
125
103
120
83
111
90
102
96
81
90
95
117
83
89
106
86
108
110
99
95
104
89
87
106
98
90
87
103
110
110
93
89
82
120
117
116
120
110

RCQ
0,80
0,86
0,86
0,90
0,82
0,95
0,92
0,83
0,83
0,89
0,81
0,84
0,78
0,81
0,89
0,87
0,80
0,91
0,86
0,85
0,84
0,85
0,74
0,76
0,83
0,80
0,78
0,85
0,87
0,68
0,83
0,87
0,87
0,87
0,89
0,87
0,88
0,88
0,89
0,78
0,77
0,78
0,89
0,84

Classe RCQ
KCQ
MR
GR
GR
GR
MR
GR
GR
MR
MR
GR
MR
MR
MR
MR
GR
GR
MR
GR
GR
MR
MR
MR
PR
PR
MR
MR
MR
MR
GR
PR
MR
GR
GR
GR
GR
GR
GR
GR
GR
MR
PR
MR
GR
MR

CAPTULO 3.

ESTATSTICA DESCRITIVA

32

> Categoria=factor(Categoria)
> Categoria[1:10]
[1] Ativa Sedentria Sedentria Sedentria Ativa Sedentria
[7] Sedentria Sedentria Ativa Sedentria
Levels: Ativa Sedentria

O mesmo deve ser feito para as demais variveis qualitativas. Poderamos


tambm entrar com estes dados atravs da importao de um arquivo externo, como foi visto na subseo 2.2. Neste caso, no h necessidade de
redenir as variveis qualitativas como fator, pois as funes de importao
de dados j o fazem automaticamente, desde que os valores destas sejam
caracteres.

3.3.1 Descrio Univariada


Consiste em classicar, apresentar (atravs de grcos e/ou tabelas) e resumir
(atravs de medidas) cada uma das variveis em estudo de forma individual.
Vejamos agora as principais representaes e medidas para cada tipo de varivel.

Varivel qualitativa
Vamos escolher a varivel Categoria para ilustrao. Podemos obter uma
tabela de frequncias simples e relativas, um grco de setores ou de colunas e
a "moda"como medida resumo. As frequncias simples e relativas so obtidas
da seguinte forma:
> Cat.freq=table(Categoria)
> Cat.freq
Categoria
Ativa Sedentria
22
23
>Cat.prop=prop.table(Cat.freq)
>Cat.prop
Categoria
Ativa Sedentria
0.4888889 0.5111111

Se quisermos o percentual basta fazer:


> Cat.perc=100*Cat.prop
> Cat.perc

CAPTULO 3.

ESTATSTICA DESCRITIVA

33

Categoria
Ativa Sedentria
48.88889 51.11111

Uma das maneiras de se obter a moda utilizando a funo Mode() do pacote


"prettyR".
> #Carregar pacote
> require(prettyR)
> Cat.mo=Mode(Categoria)
> Cat.mo
[1] "Sedentria"

Neste mesmo pacote h uma funo que nos permite obter todas as informaes acima com um nico comando. Vejamos:
> describe.factor(Categoria)
Factor
Ativa Sedentria
x
22
23
Percent
48.89
51.11
mode = Sedentria Valid n = 45

Onde os valores de x so as frequncias simples, Percent retorna os percentuais e mode a moda. Vamos obter agora um grco de barras e um em
setores.
> barplot(Cat.freq)
> barplot(Cat.freq,col="blue",space=0.8,ylab="nmero de mulheres",ylim=c(0,25))

O resultado exibido nas guras 2 e 3. Note que no segundo comando


trocamos a cor das colunas, aumentamos o espao entre estas, adicionamos
um ttulo ao eixo y e aumentamos o seu limite. Vamos agora gerar um grco
de setores.
> pie(Cat.freq)
> text(locator(2),c("48,89%","51,11%"),font=2)

Veja que usamos a funo de baixo nvel text() combinada com a funo
interativa locator() para poder inserir os percentuais em cada setor do grco.

CAPTULO 3.

ESTATSTICA DESCRITIVA

Figura 3.1: Grco de barras


para a varivel Categoria com
padro do R

34

Figura 3.2: Grco de barras


para a varivel Categoria com
alguns ajustes

Varivel quantitativa discreta


Para este tipo de variveis temos uma maior variedade de representaes
grcas e tambm de medidas resumo. Vamos tomar ento a varivel Idade
como exemplo. Podemos, da mesma forma que zemos para as variveis
qualitativas, obter tabelas de frequncias absoluta e relativas.
> Ida.freq=table(Idade)
> Ida.freq
Idade
60 61 63 64 66 67 68 69 70 71 72
2 2 8 4 4 2 4 6 1 5 4
> Ida.prop=prop.table(Ida.freq)
> Ida.prop
Idade
60
61
63
0.04444444 0.04444444 0.17777778
68
69
70
0.08888889 0.13333333 0.02222222
79
0.02222222
> Ida.perc=100*Ida.prop
> Ida.perc
Idade

73 79
2 1

64
66
67
0.08888889 0.08888889 0.04444444
71
72
73
0.11111111 0.08888889 0.04444444

CAPTULO 3.

ESTATSTICA DESCRITIVA

35

Figura 3.3: Grco em setores para a varivel Categoria


60
4.444444
69
13.333333

61
63
64
66
67
4.444444 17.777778 8.888889 8.888889 4.444444
70
71
72
73
79
2.222222 11.111111 8.888889 4.444444 2.222222

68
8.888889

Podemos obter vrias medidas resumo para esta varivel, abaixo segue algumas delas. Para os coecientes de assimetria e curtose necessrio instalar
o pacote agricolae:
> #Mdia
> Ida.media=mean(Idade);Ida.media
[1] 67.2
> #Mediana
> Ida.mediana=median(Idade);Ida.mediana
[1] 68
> #Moda
> Ida.mo=Mode(Idade);Ida.mo
[1] "63"
> #Decis
> Ida.decis=quantile(Idade,probs = seq(0, 1, 0.1));Ida.decis
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
60 63
63 64
66 68 69
69 71 72
79
> #Quartis

CAPTULO 3.

ESTATSTICA DESCRITIVA

36

> Ida.quartis=quantile(Idade,probs = seq(0, 1, 0.25));Ida.quartis


0% 25% 50% 75% 100%
60 63
68 71
79
> #Os dez primeiros percentis
> Ida.percentis=quantile(Idade,probs = seq(0, 1, 0.01))
> Ida.percentis[1:10]
0%
1%
2%
3%
4%
5%
6%
7%
8%
9%
60.00 60.00 60.00 60.32 60.76 61.00 61.00 61.16 62.04 62.92
> #Varincia
> Ida.var=var(Idade);Ida.var
[1] 17.48182
> #Desvio-padro
> Ida.dp=sd(Idade);Ida.dp
[1] 4.181126
> #Distncia interquartil
> Ida.dq=Ida.quartis[4]-Ida.quartis[2];Ida.dq
75%
8
> #Desvio mdio
> Ida.dm=sum(abs(Idade-mean(Idade)))/length(Idade);Ida.dm
[1] 3.484444
> #Coeficiente de variao
> Ida.cv=Ida.dp/Ida.media;Ida.cv
[1] 0.06221914
> #Assimetria
> require(agricolae)
> Ida.ass=skewness(Idade);Ida.ass
[1] 0.2782522
> # Distribuio assimtrica direita
> #Curtose
> Ida.cur=kurtosis(Idade);Ida.cur
[1] -0.1312109
> #Distribuio leptocrtica

As frequncias absolutas de uma varivel discreta podem ser representada


gracamente da seguinte forma:
>plot(Ida.freq,ylab="nmero de mulheres")

Uma outra representao atravs de um grco boxplot :


>boxplot(Idade,ylab="Idade")

CAPTULO 3.

37

ESTATSTICA DESCRITIVA

Podemos obter algumas medidas de uma s vez utilizando a funo summary().


> summary(Idade)
Min. 1st Qu. Median
60.0
63.0
68.0

Mean 3rd Qu.


67.2
71.0

Max.
79.0

Figura 3.4: Grco de frequncias absolutas da varivel Idade

Figura 3.5: Grco Boxplot da varivel Idade

CAPTULO 3.

ESTATSTICA DESCRITIVA

38

Varivel quantitativa contnua


Para obtermos representaes semelhantes s anteriores neste tipo de varivel, devemos inicialmente dividi-las em classes de tamanhos iguais. Desta
forma, ao invs de termos uma tabela de frequncias simples ou relativas
para cada valor observado, teremos as frequncias para cada classe. No R,
podemos denir classes em uma varivel usando a funo cut(). Vamos ento, primeiramente, examinar esta funo:
Sintaxe:
cut(x,breaks,...), onde:
x a varivel que se deseja separar e breaks um vetor contendo os pontos de cortes. Esses pontos de cortes iro corresponder aos limites inferior
e superior de cada classe. Uma maneira simples de denir o vetor breaks
utilizando a funo seq(), por exemplo, para a varivel Peso:
> seq(min(Peso),max(Peso),l=8)
[1] 49.80000 53.68571 57.57143 61.45714 65.34286 69.22857 73.11429 77.00000

Ou seja, estamos separando a varivel Peso em 8 partes, vejamos como ca


ento a tabela de frequncias simples.
>
>
>
>
>
>
>
1
2
3
4
5
6
7

Peso.freq=table(cut(Peso,seq(min(Peso),max(Peso),l=8)))
Peso.prop=prop.table(Peso.freq)
Peso.perc=100*Peso.prop
Peso.df=data.frame(Peso.freq,Peso.prop,Peso.perc)
Peso.cl=Peso.df[,-c(3,5)]
colnames(Peso.cl)=c("Peso","Freq simples","Freq relativa","Percentual")
Peso.cl
Peso Freq simples Freq relativa Percentual
(49.8,53.7]
9
0.20454545 20.454545
(53.7,57.6]
6
0.13636364 13.636364
(57.6,61.5]
12
0.27272727 27.272727
(61.5,65.3]
9
0.20454545 20.454545
(65.3,69.2]
3
0.06818182 6.818182
(69.2,73.1]
1
0.02272727 2.272727
(73.1,77]
4
0.09090909 9.090909

Veja que aqui j concatenamos em uma mesma tabela as frequncias simples,


relativa e os percentuais. As medidas resumo no diferem daquelas mostradas
para o caso discreto. Vejamos ento:
> #Mdia
> peso.media=mean(Peso);peso.media

CAPTULO 3.

ESTATSTICA DESCRITIVA

39

[1] 59.99111
> #Mediana
> peso.mediana=median(Peso);peso.mediana
[1] 59.2
> #Moda
> peso.mo=Mode(Peso);peso.mo
[1] "58.2"
> #Decis
> peso.decis=quantile(Peso,probs = seq(0, 1, 0.1));peso.decis
0% 10%
20% 30%
40% 50% 60%
70% 80%
90% 100%
49.80 51.42 53.36 55.40 58.12 59.20 60.70 62.56 64.48 69.50 77.00
> #Quartis
> peso.quartis=quantile(Peso,probs = seq(0, 1, 0.25));peso.quartis
0% 25% 50% 75% 100%
49.8 54.7 59.2 63.4 77.0
> #Os dez primeiros percentis
> peso.percentis=quantile(Peso,probs = seq(0, 1, 0.01))
> peso.percentis[1:10]
0%
1%
2%
3%
4%
5%
6%
7%
8%
9%
49.800 49.888 49.976 50.032 50.076 50.280 50.676 51.024 51.156 51.288
> #Varincia
> peso.var=var(Peso);peso.var
[1] 51.15674
> #Desvio-padro
> peso.dp=sd(Peso);peso.dp
[1] 7.152394
> #Distncia interquartil
> peso.dq=peso.quartis[4]-peso.quartis[2];peso.dq
75%
8.7
> #Desvio mdio
> peso.dm=sum(abs(Peso-mean(Peso)))/length(Peso);peso.dm
[1] 5.563852
> #Coeficiente de variao
> peso.cv=peso.dp/peso.media;peso.cv
[1] 0.1192242
> #Assimetria
> require(agricolae)
> peso.ass=skewness(Peso);peso.ass
[1] 0.7067071
> # Distribuio assimtrica direita

CAPTULO 3.

40

ESTATSTICA DESCRITIVA

> #Curtose
> peso.cur=kurtosis(Peso);peso.cur
[1] 0.05477938
> #Distribuio leptocrtica
> summary(Peso)
Min. 1st Qu. Median
Mean 3rd Qu.
49.80 54.70
59.20 59.99
63.40

Max.
77.00

A representao grca feita especicamente, atravs de histogramas que


um grco de colunas contguas, com bases proporcionais aos intervalos das
classes e a rea de cada retngulo proporcional respectiva frequncia. No
R, usamos a funo hist(), para gerar um histograma. Vejamos ento o
relativo varivel Peso.
> hist(Peso,ylab="Frequncia",main="")

Figura 3.6: Histograma da varivel Peso


Outra forma de representarmos variveis contnuas atravs do diagrama
Ramos-e-Folhas. A funo utilizada stem(). Por exemplo, um Ramo-eFolha para a varivel IMC obtido da seguinte forma:

CAPTULO 3.

ESTATSTICA DESCRITIVA

41

> stem(IMC)
The decimal point is at the |
20
21
22
23
24
25
26
27
28
29
30

|
|
|
|
|
|
|
|
|
|
|

3
13469
1677788
24455799
333578
34588
788
1358
0146
11

3.3.2 Descrio Bivariada


Frequentemente estamos interessados em analisar o comportamento conjunto
de duas ou mais variveis, no intuito de encontrar possveis relaes entre
estas. Assim como foi visto no caso univariado, as tcnicas de anlise dependero dos tipos de variveis envolvidas. Considerando duas variveis,
podemos ter as seguintes situaes:
(a) as duas variveis so qualitativas;
(b) as duas variveis so quantitativas; e
(c) uma varivel qualitativa e outra quantitativa.

Qualitativa vs Qualitativa
Neste caso a representao tabular ser feita por meio de uma tabela de
dupla entrada onde cada elemento desta representa a frequncia observada
das realizaes simultneas das duas variveis em estudo. Vamos tomar como
exemplo as variveis Categoria e Classe IMC. Como vimos no caso univariado
a tabela de frequncias absolutas dada pela funo table():
> cat.cimc.tab=table(Categoria,Classe_IMC);cat.cimc.tab
Classe_IMC
Categoria
normal sobrepeso
Ativa
18
4
Sedentria
9
14

CAPTULO 3.

ESTATSTICA DESCRITIVA

42

No caso de frequncias relativas, existem trs possibilidades de expressarmos


a proporo de cada casela:
(a) em relao ao total geral;
(b) em relao ao total de cada linha;
(c) ou em relao ao total de cada coluna.
Vejamos ento como obter essas trs representaes:
> #Prop. em relao ao total geral
>
> cat.cimc.tab/sum(cat.cimc.tab)
Classe_IMC
Categoria
normal sobrepeso
Ativa
0.40000000 0.08888889
Sedentria 0.20000000 0.31111111
>
> #Prop. em relao ao total de cada linha
>
> prop.table(cat.cimc.tab,mar=1)
Classe_IMC
Categoria
normal sobrepeso
Ativa
0.8181818 0.1818182
Sedentria 0.3913043 0.6086957
>
> #Prop. em relao ao total de cada coluna
>
> prop.table(cat.cimc.tab,mar=2)
Classe_IMC
Categoria
normal sobrepeso
Ativa
0.6666667 0.2222222
Sedentria 0.3333333 0.7777778

Primeiro dividimos cada elemento da tabela pelo total geral, obtendo assim a
primeira representao. Note que para obtermos as propores com relao s
linhas e colunas, foi utilizado o argumento mar=1 e mar=2, respectivamente.
A representao grca pode ser feita atravs de grcos de barras como
ilustra a gura 7.
> barplot(cat.cimc.tab,legend=T)
> barplot(cat.cimc.tab,legend=T,beside=T)

CAPTULO 3.

ESTATSTICA DESCRITIVA

43

Figura 3.7: Grcos do cruzamento entre as variveis Categoria e Classe IMC


A associao entre duas variveis qualitativas avaliada atravs da estatstica
chi-quadrado dada por:
2 =

k
X
(oi ei )2
i=1

ei

onde oi e ei so, respectivamente, frequncias observadas e esperadas nas k


posies da tabela de dupla entrada. Outras medidas derivadas desta so o
coeciente de contingncia C e o coeciente de contingncia modicado T :
s
C=

2
2 + n

T =

C
[(t 1)/t]2

onde n o nmero de observaes e t o mnimo entre linhas e colunas da


tabela. Vamos ver ento como obter estas medidas.
> #Teste de associao
> summary(cat.cimc.tab)
Number of cases in table: 45
Number of factors: 2
Test for independence of all factors:
Chisq = 8.538, df = 1, p-value = 0.003479
> #Vendo os valores de summary(cat.cimc.tab)
> names(summary(cat.cimc.tab))
[1] "n.vars"
"n.cases"
"statistic" "parameter" "approx.ok" "p.value"
[7] "call"

CAPTULO 3.

ESTATSTICA DESCRITIVA

44

> #Estatstica qui-quadrado


> est.chi=summary(cat.cimc.tab)$stat;est.chi
[1] 8.53755
> #Coeficiente de contingncia
> n=summary(cat.cimc.tab)$n.ca;n
[1] 45
> C=sqrt(est.chi/(est.chi+n));C
[1] 0.399335
> #Coeficiente de contigncia modificado
> t=min(dim(cat.cimc.tab));t
[1] 2
> T=C/((t-1)/t)^2;T
[1] 1.59734

Quantitativa vs Qualitativa
Nesta situao comum analisarmos como se comporta a varivel quantitativa em cada nvel da varivel qualitativa. Vamos tomar ento as variveis
RCQ e Classe_RCQ para exemplicar este conceito. Inicialmente iremos obter
uma tabela de frequncias simples, para isso vamos agrupar a varivel RCQ
em trs classes:
>
>
>
>

#Separando a varivel RCQ


RCQ.cl=cut(RCQ,seq(min(RCQ),max(RCQ),l=4))
#Obtendo a tabela de frequncia simples
RCQ.CRCQ.tb=table(Classe_RCQ,RCQ.cl);RCQ.CRCQ.tb
RCQ.cl
Classe_RCQ (0.68,0.77] (0.77,0.86] (0.86,0.95]
GR
0
3
17
MR
0
20
0
PR
4
0
0

As tabelas de frequncias relativas so obtidas da seguinte forma:


> RCQ.CRCQ.tb/sum(RCQ.CRCQ.tb)
RCQ.cl
Classe_RCQ (0.68,0.77] (0.77,0.86] (0.86,0.95]
GR 0.00000000 0.06818182 0.38636364
MR 0.00000000 0.45454545 0.00000000
PR 0.09090909 0.00000000 0.00000000

CAPTULO 3.

ESTATSTICA DESCRITIVA

45

> prop.table(RCQ.CRCQ.tb,mar=1)
RCQ.cl
Classe_RCQ (0.68,0.77] (0.77,0.86] (0.86,0.95]
GR
0.00
0.15
0.85
MR
0.00
1.00
0.00
RCQ.cl
Classe_RCQ (0.68,0.77] (0.77,0.86] (0.86,0.95]
GR 0.0000000
0.1304348 1.0000000
MR 0.0000000
0.8695652 0.0000000
PR 1.0000000
0.0000000 0.0000000

Uma possvel representao grca deste cruzamento seria um boxplot onde


no eixo y teremos a varivel quantitativa, no caso, RCQ e no eixo x os nveis
da varivel qualitativa, no caso, Classe_RCQ.
> boxplot(RCQ~Classe_RCQ,ylab="RCQ",xlab="Classe RCQ")

Figura 3.8: RCQ explicada por Classe RCQ


Podemos obter todos medidas descritivas vistas anteriormente, no entanto,
iremos resumir a varivel quantitativa em cada nvel da varivel qualitativa.
No R, isso pode ser feito utilizando a funo tapply():
> #Mdias
> tapply(RCQ,Classe_RCQ,mean)
GR
MR
PR
0.8845 0.8175 0.7380

CAPTULO 3.

ESTATSTICA DESCRITIVA

46

> #Medianas
> tapply(RCQ,Classe_RCQ,median)
GR
MR
PR
0.880 0.825 0.740
> #Quantis
> tapply(RCQ,Classe_RCQ,quantile)
$GR
0% 25% 50% 75% 100%
0.86 0.87 0.88 0.89 0.95
$MR
0% 25%
50% 75% 100%
0.780 0.800 0.825 0.840 0.850
$PR
0% 25% 50% 75% 100%
0.68 0.74 0.74 0.76 0.77
> #Varincias
> tapply(RCQ,Classe_RCQ,var)
GR
MR
PR
0.0005102632 0.0006302632 0.0012200000
> #Desvios-padro
> tapply(RCQ,Classe_RCQ,sd)
GR
MR
PR
0.02258901 0.02510504 0.03492850

Quantitativa vs Quantitativa
Quando as variveis envolvidas so ambas do tipo quantitativo, procedemos
de forma similar ao que havia sendo feito. Para obter uma tabela de frequncias, por exemplo, devemos agrupar as variveis em classes. Vejamos
um exemplo utilizando as variveis Peso e IMC. Vamos inicialmente agrupar
cada uma em duas classes.
>
>
>
>
>

#Agrupando as var. em duas classes


peso.cl=cut(Peso,seq(min(Peso),max(Peso),l=3))
IMC.cl=cut(IMC,seq(min(IMC),max(IMC),l=3))
#Frequncias simples
pe.imc.tb=table(peso.cl,IMC.cl);pe.imc.tb
IMC.cl

CAPTULO 3.

ESTATSTICA DESCRITIVA

47

peso.cl
(20.3,25.2] (25.2,30.1]
(49.8,63.4]
25
7
(63.4,77]
0
11

As tabelas com de frequncias relativas so obtidas da mesma que obtivemos


para os casos anteriores. Recomenda-se ao leitor faz-lo como exerccio. Um
dispositivo muito til para representar e se vericar a associao entre duas
variveis quantitativas o grco de disperso. Vejamos um exemplo:
> plot(Peso,IMC)

Figura 3.9: Grco de disperso Peso vs IMC


Para quanticar a correlao entre duas variveis quantitativas devemos usar
algum coeciente de correlao. A funo cor() oferece trs opes de coecientes, tendo como padro o coeciente de correlao linear de Pearson.
> #Coeficiente de correlao de Pearson
> cor(Peso,IMC)
[1] 0.8983048
> #Coeficiente de correlao de Kendall
> cor(Peso,IMC,method="kendall")
[1] 0.7414632
> #Coeficiente de correlao de Spearman
> cor(Peso,IMC,method="spearman")
[1] 0.9019382

CAPTULO 3.

ESTATSTICA DESCRITIVA

48

3.3.3 Alguns grcos mais elaborados


Em complemento ao que foi feito nas subsees anteriores, exploraremos mais
um pouco os recursos grcos. Iremos acrescentar mais algumas informaes
aos grcos mostrados anteriormente.

Grco de setores com sombra: Vamos gerar o mesmo grco de setores


feito anteriormente, agora com um efeito de sombra.
>
>
+
+
+
+
+
+
+
+
+
+
+
+
>
>

#Definir a funo pizza.sombra


pizza.sombra=function (...) {
pie(...)
#criando a regio que dar o efeito de sombra
op=par(new=T)
a=seq(0,2*pi,length=100)
for (i in (256:64)/256) {
r=0.8-0.1*(1-i)
polygon(0.1+r*cos(a), -0.2+r*sin(a), border=NA, col=rgb(i,i,i))
}
par(new=T)
pie(...)
par(op)
}
#Aplicando varivel Categoria
pizza.sombra(Cat.freq)

Grco de disperso com boxplots marginais


Neste grco, alm de visualizar o comportamento conjunto das variveis,
visualizamos tambm o comportamento individual atravs dos boxplots.
>
>
>
+
+
>
>
>
>
+
+

op=par()
#Criar a diviso desejada para o dispositivo
layout( matrix( c(2,1,0,3), 2, 2, byrow=T ),
c(1,6), c(4,1),
)
#Definir as margens da primeira figura
par(mar=c(1,1,5,2))
#Gerar o grfico de disperso
plot(Peso~IMC,
xlab='', ylab='',
las = 1)

CAPTULO 3.

>
>
>
>
>
>
>
>
>
>
>
>

ESTATSTICA DESCRITIVA

49

#Definir as margens da segunda figura


par(mar=c(1,2,5,1))
#Plotar o boxplot marginal no eixo y
boxplot(Peso, axes=F,border=4)
title(ylab='Peso (Kg)', line=0)
#Definir as margens da terceira figura
par(mar=c(5,1,1,2))
#Plotar o boxplot marginal no eixo y
boxplot(IMC, horizontal=T, axes=F,border=4)
title(xlab='IMC (Kg/m2)', line=1)
par(op)

Grco de disperso com histogramas marginais


Neste grco ao invs de acrescentarmos boxplots nas margens da gura,
vamos acrescentar histogramas.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

#Definir os histogramas marginais


xhist=hist(IMC,plot=F)
yhist=hist(Peso,plot=F)
top <- max(c(xhist$counts, yhist$counts))
b<-matrix(c(2,0,1,3),2,2,byrow=TRUE)
#Criar a diviso desejada para o dispositivo
nf <- layout(b, widths=c(3,1), heights=c(1,3), respect=TRUE)
#Definir as margens da primeira figura
par(mar=c(4,4,1,1))
#Plotar o grfico de disperso
plot(Peso,IMC)
#Definir as margens da segunda figura
par(mar=c(0,4,1,1))
#Plotar o histograma marginal no eixo x

CAPTULO 3.

>
+
>
>
>
>
>
>
>
>
+

ESTATSTICA DESCRITIVA

barplot(xhist$counts,axes=FALSE, ylim=c(0, top), space=0,


col=1, density=20, angle=-45)
#Definir as margens da terceira figura
par(mar=c(4,0,1,1))
#Plotar o histograma marginal no eixo y
barplot(yhist$counts, axes=FALSE, xlim=c(0, top),space=0,
col=1, density=20, angle=-45,horiz=TRUE)

Figura 3.10: Grco em setores com efeito de sombra

50

CAPTULO 3.

ESTATSTICA DESCRITIVA

Figura 3.11: Grco de disperso com boxplots marginais

Figura 3.12: Grco de disperso com histogramas marginais

51

CAPTULO 3.

ESTATSTICA DESCRITIVA

52

Note que, nos histogramas marginais acrescentamos linhas como preenchimento. Isso foi feito utilizando o argumento density que dene o nmero de
linhas a serem plotadas e angle, que dene o anglo de inclinao das linhas.

Captulo 4
Probabilidade e Inferncia
O objetivo deste captulo mostrar de que forma podemos utilizar o R para
trabalhar com distribuies de probabilidade, gerar amostras aleatrias, estimar parmetros de uma populao, etc. conveniente, antes de iniciarmos
este estudo, aprendermos como denir nossas prprias funes. Note que, na
subseo 3.3.3 j utilizamos este recurso. Falaremos tambm sobre ordens de
controle, j que estas so habitualmente usadas na construo de funes.

4.1 Controle de uxo e denio de funes


Assim como em qualquer outra linguagem de programao, a linguagem R
possui vrias instrues destinadas a alterar a sequncia normal de execuo
dos comandos. Vejamos ento algumas.

4.1.1 Execuo condicional


Instrues condicionais permitem ao usurio executar vrias alternativas dependendo se uma condio for satisfeita. A forma da instruo condicional
a seguinte:
if (expres_1) expres_2 else expres_3

onde o resultado de expres_1 deve ser um valor lgico; se este verdadeiro(T ou


TRUE), calculada a expresso expres_2; caso contrrio, e se a instruo
contm a expresso else, ser executada a expresso expres_3. Essas expresses geralmente so construdas com o uso de operadores. Abaixo podemos ver a descrio dos operadores bsicos da linguagem R.

53

CAPTULO 4.

PROBABILIDADE E INFERNCIA

54

1. Operadores Lgicos:
! : Indica negao
& e && : Indica o argumento lgico (AND ou E). O primeiro se

aplica a todos os elementos de um vetor, e o segundo aplica-se a


vetores de comprimento unitrio.
| e || : Indica o argumento lgico (OR ou OU).
2. Operadores Relacionais:
< : Menor
> : Maior
<= : Menor igual
>= : Maior igual
== : Igual
!= : Diferente

3. Operadores Aritmticos
+ : Soma
- : Diferena
* : Produto
/ : Diviso
x%%y : Indica o resto da diviso de x por y
x %/% y : Indica a diviso inteira de x por y
%*% : Multiplicao matricial
%x% : Produto de Kronecker

4.1.2 Ciclos
Ciclos no R so implementados com as ordens for(), repeat() e while().
Os ciclos do tipo for so da seguinte forma:
> for (nome in expres_1) expres_2

onde nome representa uma varivel de controle das interaes; expres_1


um vetor (geralmente uma sequncia do tipo 1 : n, em que n um nmero
natural), e expres_2 uma expresso, frequentemente agrupada, em cujas

CAPTULO 4.

PROBABILIDADE E INFERNCIA

55

sub-expresses pode aparecer a varivel de controle; esta expresso calculada repetidamente medida que a varivel de controle nome percorre os
valores da expres_1. O exemplo a seguir ilustra este procedimento.
> a=c(1,2,3,4)
> b=c(5,6,7,8)
> c=numeric(length(a))
> for(i in 1:4){
+ c[i]=a[i]+b[i]
+ }
>
> c
[1] 6 8 10 12

Aqui o for utilizado para percorrer os vetores a e b somando cada um de


seus elementos e criando assim o vetor c. Outras estruturas de ciclos so:
> repeat expresso

> while (condio) expresso

Vamos repetir o exemplo anterior utilizando while


> d=numeric(length(a))
> i=1
> while(i<=4){
+ d[i]=a[i]+b[i]
+ i=i+1
+ }
> d
[1] 6 8 10 12

4.1.3 Denindo funes


Como j referido neste texto, R permite a criao de objetos do tipo function,
que so funes que permitem generalizar e encapsular procedimentos, o que
torna mais simples e prtica a posterior utilizao destes. Desta forma, a
linguagem R ganha considervel poder e elegncia. Uma funo denida
com a seguinte declarao:
> Nome_da_Funo=function(arg1, arg2, ...) expresso

A nova funo geralmente chamada da seguinte forma:

CAPTULO 4.

PROBABILIDADE E INFERNCIA

56

Nome_da_Funo=function(arg1, arg2, ...)

e pode ser utilizada em qualquer altura do cdigo. Vamos ilustrar o uso deste
recurso atravs de um exemplo simples. Neste criamos a funo fatorial
que retorna o fatorial de um nmero natural.
> fatorial=function(n){
+ fat=1
+ {
+
if (n==0)
+
return(fat)
+
else{
+
for (i in 1:n){
+
fat=fat*(n-(n-i))
+
}
+
}
+ }
+
+ return(fat)
+ }
>
> fatorial(5)
[1] 120

4.2 Distribuies de Probabilidade


O R dispe de uma srie de funcionalidades que permitem operaes com
distribuies de probabilidade. Aqui vamos resumir algumas delas, com o
objetivo de ilustrar o uso destas funes. As operaes bsicas com distribuies de probabilidade so: clculo de densidade de probabilidade, clculo de probabilidade acumulada, obteno de quantis e gerao de nmeros
aleatrios. No R estas operaes so representadas, respectivamente, pelas
letras: d, p, q e r. Para as funes precedidas de d e p o primeiro argumento
sempre um quantil. Nas funes precedidas de q o primeiro argumento diz
respeito a uma probabilidade. E nos comandos precedidos de r o primeiro
argumento especica o tamanho da amostra aleatria a ser gerada. Por
exemplo, para gerar nmeros aleatrios da distribuio exponencial devemos
usar a funo rexp(), ou seja, devemos escrever o prexo da distribuio
precedido da letra que indica a operao desejada. O usurio pode consultar
a ajuda do R para ver os prexos de vrias distribuies de probabilidade.

CAPTULO 4.

PROBABILIDADE E INFERNCIA

57

4.2.1 Distribuio Normal


A distribuio normal referenciada no R pelo prexo norm. Os argumentos padro das funes referentes distribuio normal assumem a normal
padro N ( = 0, 2 = 1). Vejamos ento algumas operaes bsicas.
> dnorm(0)
[1] 0.3989423
> pnorm(0)
[1] 0.5
> qnorm(0.5)
[1] 0
> set.seed(12)
> rnorm(10)
[1] -1.4805676 1.5771695 -0.9567445 -0.9200052 -1.9976421 -0.2722960
[7] -0.3153487 -0.6282552 -0.1064639 0.4280148

Com o primeiro comando calculamos f (0) em seguida F (0) = P (X 0).


O comando qnorm(0.5) retorna o valor de q ,tal que, P (X 0, 5) = q , o
que corresponde a mediana da distribuio. Note que antes do comando de
gerao de nmeros aleatrios, usamos a funo set.seed(). Esta associa
a amostra aleatria gerada a um nmero (no nosso exemplo foi utilizado
12). Portanto, a mesma amostra aleatria poder ser obtida vrias vezes. Se
este no for utilizado, a cada repetio do comando de gerao de nmeros
aleatrios uma novos nmeros seram gerados. Podemos repetir estas operaes com qualquer distribuio normal, bastando para isso, dar valor aos
argumentos mu e sd, onde so especicados, respectivamente, a mdia e o
desvio padro. Para ver a descrio completa dos argumentos, basta executar: ?Normal. Vejamos ento para uma N ( = 100, 2 = 100).
> dnorm(90,100,10)
[1] 0.02419707
> pnorm(90,100,10)
[1] 0.1586553
> qnorm(0.5,100,10)
[1] 100
> set.seed(13)
> rnorm(10,100,10)
[1] 105.54327 97.19728 117.75163 101.87320 111.42526 104.15526 112.29507
[8] 102.36680 96.34617 111.05144

Vamos ilustrar gracamente a probabilidade P (N (100, 100) 90) = 0, 159.


Isso pode ser feito utilizando a funo polygon().

CAPTULO 4.

PROBABILIDADE E INFERNCIA

58

> curve(dnorm(x,100,10),70,130,ylab="f (x)")


> polygon(c(60,seq(60,90,l=30),90),
+ c(0,dnorm(seq(60,90,l=30),100,10),0),density=10)

Figura 4.1: Representao grca da P (N (100, 100) 90)


Vejamos a representao grca de algumas funes de densidade e de distribuio da normal.
>
>
>
>
>
>
>
>
>
>

#Funes densidade
curve(dnorm(x,100,50),-50,250,ylab="f(x)")
curve(dnorm(x,80,50),-50,250,ylab="f(x)",add=T,lty=2)
curve(dnorm(x,100,80),-50,250,ylab="f(x)",add=T,lty=3)
legend("topright",c("N(100,50)","N(80,50)","N(100,80)"),lty=1:3)
#Funes de distribuio
curve(pnorm(x,100,50),-50,250,ylab="F(x)")
curve(pnorm(x,80,50),-50,250,ylab="F(x)",add=T,lty=2)
curve(pnorm(x,100,80),-50,250,ylab="F(x)",add=T,lty=3)
legend("topleft",c("N(100,50)","N(80,50)","N(100,80)"),lty=1:3)

As distribuies simtricas (como o caso da distribuio normal) tm a


seguinte propriedade M d = X = M0 , ou seja, a sua mediana, mdia e
moda so iguais. Am de ilustrar esta propriedade vamos construir uma
funo que retorne a moda de uma distribuio normal. Para encontrar o
argumento que maximiza a funo usaremos a funo opitmize(). Esta
examina uma funo em um determinado intervalo, retornando o valor mnimo ou mximo, desta. Para mais detalhes da funo opitimize() execute
?opitimize. Segue ento a funo Moda_Normal().

CAPTULO 4.

PROBABILIDADE E INFERNCIA

59

Figura 4.2: Algumas funes de densidade e funes de distribuio da distribuio Normal


>
+
+
+
+

Moda_Normal=function(mu,dp){
fn=function(x){dnorm(x,mean=mu,sd=dp)}
op=optimize(fn,c(mu-3*dp,mu+3*dp),maximum=T)
return(round(op$maximum,1))
}

Esta funo recebe como argumentos a mdia (mu) e o desvio padro (dp) da
distribuio normal especicada. Vejamos ento alguns exemplos:
> Moda_Normal(0,1)
[1] 0
> Moda_Normal(10,1)
[1] 10
> Moda_Normal(100,10)
[1] 100
> Moda_Normal(200,40)
[1] 200

Como podemos ver a moda da distribuio normal coincide com a sua mdia.
O leitor pode conrmar, como exerccio, que os valores acima so tambm
as medianas destas normais.

CAPTULO 4.

PROBABILIDADE E INFERNCIA

60

4.2.2 Distribuio t-Student


No R a distribuio t-Student referenciada pelo prexo t. Para ver a descrio completa dos argumentos, basta executar ?TDist. Vejamos algumas
operaes bsicas para uma t-Student com 1 grau de liberdade.
> dt(0,1)
[1] 0.3183099
> pt(0,1)
[1] 0.5
> qt(0.5,1)
[1] 6.123032e-17
> set.seed(14)
> rt(10,1)
[1] -0.34515990 1.55183402 -0.26067314 -0.33269113 0.43430630
[6] 0.09066324 -1.79590300 -0.75266496 1.07633328 -3.11066112

O segundo argumento das funes especica o grau de liberdade da distribuio t. A distribuio t-Student se aproxima da distribuio normal
quando o grau de liberdade aumenta. Na Figura 16 ilustramos essa propriedade.
#Densidades t
curve(dnorm(x),-4,4,ylab="f(x)",lty=2)
curve(dt(x,1),-4,4,add=T,col=2)
curve(dt(x,3),-4,4,add=T,col=3)
curve(dt(x,8),-4,4,add=T,col=4)
curve(dt(x,15),-4,4,add=T,col=5)
legend("topleft",c("N (0,1)","t (1)","t (3)",
"t (8)","t (15)"),col=1:5,lty=c(2,1,1,1,1))
#Funes de distribuio t
curve(pnorm(x),-4,4,ylab="F(x)",lty=2)
curve(pt(x,1),-4,4,add=T,col=2)
curve(pt(x,3),-4,4,add=T,col=3)
curve(pt(x,8),-4,4,add=T,col=4)
curve(pt(x,15),-4,4,add=T,col=5)
legend("topleft",c("N (0,1)","t (1)",
"t (3)","t (8)","t (15)"),col=1:5,lty=c(2,1,1,1,1))

Da mesma forma que foi feito para a distribuio normal, vamos implementar
uma funo que retorne a moda distribuio t. Vamos chamar esta funo
de Moda_t().

CAPTULO 4.

PROBABILIDADE E INFERNCIA

61

Figura 4.3: Comparativo entre a distribuio t-Student e a distribuio normal


> Moda_t=function(gl){
+ fn=function(x){dt(x,df=gl)}
+ op=optimize(fn,c(-3,3),maximum=T)
+ return(round(op$maximum,1))
+ }
>
> Moda_t(1)
[1] 0
> Moda_t(5)
[1] 0
> Moda_t(10)
[1] 0
> Moda_t(30)
[1] 0

Podemos ver que a moda da distribuio t-Student sempre igual a zero.

4.2.3 F-Snedecor
A distribuio F-Snedecor referenciada por f e a descrio dos seus argumentos pode ser vista executando ?FDist. Vejamos ento alguns exemplos.

CAPTULO 4.

PROBABILIDADE E INFERNCIA

62

> df(3,1,2)
[1] 0.05163978
> pf(3,1,2)
[1] 0.7745967
> qf(0.5,1,2)
[1] 0.6666667
> set.seed(15)
> rf(10,1,2)
[1] 0.3860004526 2.4215853368 4.1941878357 0.5356487440 0.2069921455
[6] 0.4694068847 0.0003382301 2.9451130609 0.2473070646 0.3069481961

O segundo e terceiro argumentos das funes especicam os graus de liberdade da distribuio F. Na Figura 17 temos os grcos da funo de densidade
e da funo de distribuio para algumas combinaes de graus de liberdade.
>
>
>
>
>
>
>
+
>
>
>
>
>
>
>
+

#Densidades F
curve(df(x,1,2),0,10,ylab="f(x)")
curve(df(x,2,5),0,10,add=T,col=2)
curve(df(x,4,5),0,10,add=T,col=3)
curve(df(x,8,6),0,10,add=T,col=4)
curve(df(x,15,10),0,10,add=T,col=5)
legend("topright",c("F (1,2)","F (2,5)","F (4,5)",
"F (8,6)","F (15,10)"),col=1:5,lty=1)
#Funes de distribuio F
curve(pf(x,1,2),0,10,ylab="F(x)",ylim=c(0,1))
curve(pf(x,2,5),0,10,add=T,col=2)
curve(pf(x,4,5),0,10,add=T,col=3)
curve(pf(x,8,6),0,10,add=T,col=4)
curve(pf(x,15,10),0,10,add=T,col=5)
legend("bottomright",c("F (1,2)","F (2,5)","F (4,5)",
"F (8,6)","F (15,10)"),col=1:5,lty=1)

A moda da distribuio F obtida com a funo abaixo:


> Moda_F=function(gl1,gl2){
+ ff=function(x){df(x,df1=gl1,df2=gl2)}
+ op=optimize(ff,c(0,10),maximum=T)
+ return(round(op$maximum,1))
+ }
> Moda_F(2,2)
[1] 0
> Moda_F(10,2)

CAPTULO 4.

PROBABILIDADE E INFERNCIA

63

Figura 4.4: Algumas funes de densidade e de distribuio F-Snedecor


[1] 0.4
> Moda_F(8,8)
[1] 0.6
> Moda_F(16,5)
[1] 0.6

O leitor pode vericar que a moda da distribuio F-Snedecor dada por:


gl1 2 gl2
gl1 gl2 + 2

para gl1 > 2

4.2.4 Distribuio Gama


A referncia da distribuio gama no R gamma. Esta distribuio possui como casos particulares a distribuio exponencial e a distribuio quiquadrado. Para a descrio completa dos argumentos basta executar ?GammaDist.
Segue abaixo algumas operaes bsicas.
> dgamma(3,3,2)
[1] 0.08923508
> pgamma(3,3,2)
[1] 0.9380312
> qgamma(0.5,3,2)

CAPTULO 4.

PROBABILIDADE E INFERNCIA

64

[1] 1.337030
> set.seed(16)
> rgamma(10,3,2)
[1] 1.6550091 1.1528434 0.8909968 2.3221277 0.9071140 1.6007216
[8] 0.7543756 1.7441700 3.1368359 1.3400572

Para distribuio gama temos dois tipos de parametrizao. Na primeira, que


chamaremos de parametrizao 1, a sua funo de densidade a seguinte:
f (x) =

1
()

x
x1 exp ( )1l(0,) (t)

onde, o parmetro de forma e o parmetro de escala so especicados, respectivamente pelos argumentos shape e scale. J na outra parametrizao,
que chamaremos de parametrizao 2, temos a seguinte funo de densidade:
f (x) =

1
()

x1 exp (x)1l(0,) (t)

onde, = 1/ especicado pelo parmetro rate. Alguns grcos da funo


de densidade da distribuio gama para os dois tipos de parametrizao podem ser vistos na Figura 18.
>
+
>
>
>
>
+
>
+
>
>
>
>
+

curve(dgamma(x,shape=1,scale=2),0,20,ylab="f (x)",
main="Parametrizao 1")
curve(dgamma(x,shape=2,scale=2),0,20,add=T,col=2)
curve(dgamma(x,shape=5,scale=1),0,20,add=T,col=3)
curve(dgamma(x,shape=9,scale=0.5),0,20,add=T,col=4)
legend("topright",c("exp (1)","G (2, 1)","G (5, 1)",
"G (9, 0.5)"),col=1:4,lty=1)
curve(dgamma(x,shape=1,rate=2),0,6,ylab="f (x)",
main="Parametrizao 2")
curve(dgamma(x,shape=2,rate=2),0,6,add=T,col=2)
curve(dgamma(x,shape=5,rate=1),0,6,add=T,col=3)
curve(dgamma(x,shape=9,rate=0.5),0,6,add=T,col=4)
legend("topright",c("exp (1)","G (2, 1)","G (5, 1)",
"G (9, 0.5)"),col=1:4,lty=1)

CAPTULO 4.

PROBABILIDADE E INFERNCIA

65

Figura 4.5: Algumas funes de densidade da distribuio Gama


Note que uma distribuio Gama(1, 2) corresponde a uma exp(1). Uma varivel aleatria com distribuio Gama(k/2, 1/2) tambm uma distribuio
Qui-quadrado com k graus de liberdade (Notao: 2(k) ). Na Figura 19 ilustramos gracamente esta propriedade para uma Gama(3/2, 1/2), ou seja,
neste caso tem-se tambm uma 2(3) .
>
+
>
>
+

curve(dgamma(x,shape=(3/2),scale=2),0,20,add=F,
col="#BFFFBF",lwd=5,ylab="f (x)")
curve(dchisq(x,3),0,20,add=T,lty=2)
legend("topright",c("G (1.5, 2)",expression(chi**2*(3))),
col=c(1,"#BFFFBF"),lty=c(2,1))

CAPTULO 4.

PROBABILIDADE E INFERNCIA

66

Figura 4.6: Funo de densidade de uma 2(3) e uma G(3/2, 1/2)


A moda da distribuio gama para a parametrizao 1 e 2 dada, respectivamente, por ( 1) e ( 1)/ . Para o clculo da moda foi construda a
funo Moda_gama(). Nesta funo o argumento a especica o parmetro de
forma da gama e s, o parmetro de escala. Alm de p que especica o tipo
de parametrizao a ser usada (1=parametrizao 1 e 2=parametrizao 2).
Vejamos ento alguns exemplos:
> Moda_gama=function(a,s,p){
+ if(p==1){
+ fg=function(x){dgamma(x,shape=a,scale=s)}
+ op=optimize(fg,c(0,a+(4*s)),maximum=T)
+ return(round(op$maximum,1))
+ }
+ else{
+ fg=function(x){dgamma(x,shape=a,rate=s)}
+ op=optimize(fg,c(0,a+(4*s)),maximum=T)
+ return(round(op$maximum,1))
+ }
+ }
>
>
> Moda_gama(3,2,1)

CAPTULO 4.

PROBABILIDADE E INFERNCIA

67

[1] 4
> Moda_gama(5,4,2)
[1] 1

4.2.5 Distribuio Binomial


No R a distribuio binomial referenciada por binom. Nas funes temos o
argumento size onde devemos especicar o nmero de provas independentes
de Bernoulli (Bussab e Morettin, 2005) e o argumento prob onde especicamos a probabilidade de sucesso. Vamos ilustrar algumas operaes bsicas
com a distribuio binomial atravs da resoluo de um problema extrado
de Bussab e Morettin (2005).

Exemplo: Um curso de treinamento aumenta a produtividade de uma certa


populao de funcionrios em 80% dos casos. Se dez funcionrios quaisquer
participam desse curso, encontre a probabilidade de:
(a) exatamente sete funcionrios aumentarem a produtividade;
(b) no mais do que oito funcionrios aumentarem a produtividade; e
(c) pelo menos trs funcionrios no aumentarem a produtividade.
Soluo:
Devemos calcular probabilidades de uma distribuio binomial de parmetros
n = 10 e p = 0, 8, conforme o enunciado do problema. Temos ento:
(a) > dbinom(7,10,0.8)
[1] 0.2013266

(b) > pbinom(8,10,0.8)


[1] 0.6241904

(c) > pbinom(2,10,0.2,lower.tail=F)


[1] 0.3222005

Na Figura 20 temos a representao grca de algumas distribuies de probabilidade e distribuio de probabilidade acumulada da binomial.
>
>
+
>
>

#Distribuio de probabilidade
plot(dbinom(1:40,10,0.8),ty="p",pch=16,col=2,
ylab="P(X=x)",xlab="x")
points(dbinom(1:40,20,0.7),ty="p",pch=16,col=3)
points(dbinom(1:40,40,0.5),ty="p",pch=16,col=4)

CAPTULO 4.

>
+
>
>
+
>
>
>
>
>
>
+

PROBABILIDADE E INFERNCIA

68

legend("topright",c("B(10; 0,8)","B(20; 0,7)","B(40; 0,5)"),


col=2:4,bty="n",pch=16)
#Distribuio de probabilidade acumulada
plot(pbinom(1:40,10,0.8),ty="s",pch=16,col=2,
ylab=expression(P(X<=x)),xlab="x")
points(pbinom(1:40,20,0.7),ty="s",pch=16,col=3)
points(pbinom(1:40,40,0.5),ty="s",pch=16,col=4)
points(pbinom(1:40,10,0.8),ty="p",pch=16,col=2)
points(pbinom(1:40,20,0.7),ty="p",pch=16,col=3)
points(pbinom(1:40,40,0.5),ty="p",pch=16,col=4)
legend("bottomright",c("B(10; 0,8)","B(20; 0,7)","B(40; 0,5)"),
col=2:4,bty="n",pch=16,lty=1)

Figura 4.7: Representao grca da distribuio binomial


A moda da distribuio binomial sempre dada por b(n + 1)pc, ou seja o
menor inteiro que no ultrapassa a quantidade (n+1)p. No R o menor inteiro
de um nmero real pode ser obtido com a funo floor(). Por exemplo, a
moda de uma B(10; 0, 8) dada por:
> floor((10+1)*0.8)
[1] 8

Deixa-se ao leitor, como exerccio, construir uma funo que generalize este
procedimento.

CAPTULO 4.

PROBABILIDADE E INFERNCIA

69

4.2.6 Distribuio de Poisson


A distribuio de Poisson referenciada no R pelo prexo pois. A taxa
mdia especicada no argumento lambda. Para ver a descrio completa
dos argumentos execute ?Poisson. Vejamos ento algumas operaes bsicas
com uma distribuio poisson de parmetro = 1 (notao: P (1)).
> dpois(4,1)
[1] 0.01532831
> ppois(4,1)
[1] 0.9963402
> qpois(0.5,1)
[1] 1
> set.seed(17)
> rpois(10,1)
[1] 0 3 1 2 1 1 0 0 2 0

A Figura 21 mostra a representao grca da distribuio de probabilidade


e distribuio de probabilidade acumulada para diferentes valores de
>
>
>
>
>
+
>
>
+
>
>
>
>
>
>
+

#Distribuio de Probabilidade
plot(dpois(0:20,1),ty="p",pch=16,ylab="P(X=x)",xlab="x")
points(dpois(1:20,4),ty="p",pch=16,col=2)
points(dpois(1:20,10),ty="p",pch=16,col=3)
legend("topright",c("P(1)","P(4)","P(10)"),
col=1:3,bty="n",pch=16)
#Distribuio de probabilidade acumulada
plot(ppois(0:20,1),ty="S",pch=16,ylab=expression(P(X<=x)),
ylim=c(0,1),xlab="x")
points(ppois(1:20,4),ty="s",pch=16,col=2)
points(ppois(1:20,10),ty="s",pch=16,col=3)
points(ppois(1:20,1),ty="p",pch=16)
points(ppois(1:20,4),ty="p",pch=16,col=2)
points(ppois(1:20,10),ty="p",pch=16,col=3)
legend("bottomright",c("P(1)","P(4)","P(10)"),
col=1:3,bty="n",pch=16,lty=1)

A distribuio de Poisson um caso limite da distribuio binomial quando


n e p 0 (Bussab e Moretim, 2005). Para ilustrar esta propriedade
vamos considerar o grco da distribuio de probabilidade acumulada da
distribuio de Poisson comparado com a distribuio acumulada da distribuio binomial com valores crescentes de n e decrescentes de p.

CAPTULO 4.

PROBABILIDADE E INFERNCIA

70

Figura 4.8: Representao grca da distribuio Poisson


#Aproximao da Binomial pela Poisson
> plot(ppois(1:40,1),ty="s",pch=16,lwd=7,col="yellow",
+ ylab=expression(P(X<=x)),xlab="x",ylim=c(0,1))
> points(pbinom(1:40,30,0.3),ty="s",pch=16,col=3)
> points(pbinom(1:40,40,0.05),ty="s",pch=16,col=4)
> points(pbinom(1:40,100,0.05),ty="s",pch=16,col=5)
> points(pbinom(1:40,100,0.01),ty="s",pch=16,col=6)
> legend("bottomright",c("P(1)","B(30; 0,3)","B(40; 0,05)",
+ "B(100; 0,05)","B(100; 0,01)"),col=c("yellow",3,4,5,6),bty="n",lty=1)

CAPTULO 4.

PROBABILIDADE E INFERNCIA

71

Figura 4.9: Aproximao da Binomial pela Poisson


A distribuio de Poisson bimodal quando inteiro e unimodal para
fracionrio. No primeiro caso as modas so dadas, respectivamente, por:
1 e . No segundo caso, temos que a moda da Poisson igual a bc.
Vamos construir a funo Moda_poisson() que retornar a(s) moda(s) da
distribuio de Poisson.

> Moda_poisson=function(l){
+ if(l==trunc(l))
+ return(list(mo1=(l-1),mo2=l))
+ else
+ return(floor(l))
+ }
>
>
> Moda_poisson(1)
$mo1
[1] 0
$mo2
[1] 1
> Moda_poisson(3.3)

CAPTULO 4.

PROBABILIDADE E INFERNCIA

72

[1] 3
> Moda_poisson(5.6)
[1] 5
> Moda_poisson(10)
$mo1
[1] 9
$mo2
[1] 10

Esta funo recebe como argumento o valor de . Inicialmente a funo


verica se o especicado inteiro atravs do teste l==trunc(l) e retorna
uma lista com as duas modas caso este seja verdadeiro. Seno a funo
retornar bc.

4.3 Inferncia
Nesta seo vamos utilizar o R para obter distribuies amostrais, ilustrar
propriedades de estimadores, teoremas, etc. Alm disso, mostraremos algumas funes que j prontas. Por exemplo, as funes t.test() e var.test()
que sero usadas na parte de testes de hipteses.

4.3.1 Teorema Central do Limite


Vamos comear com a ilustrao deste que um dos mais importantes resultados da Estatstica Matemtica. O Teorema Central do Limite procura
expressar o fato de que a mdia aritmtica de n variveis aleatrias independentes e identicamente distribudas, denotada por X , tem uma distribuio
cuja forma tende para uma forma limite que no depende da distribuio das
variveis. A seguir temos o enunciado desse teorema.

Teorema 4.3.1.1 (Teorema Central do Limite - Lindeberg and Lvy). Se-

jam X1 , X2 , . . . , Xn variveis independentes e identicamente distribudas que


formam uma amostra de tamanho n proveniente de uma distribuio com
X

mdia e varincia 2 , 0 < < . Ento, a varivel aleatria Z = /


n
tem distribuio limite que normal com mdia zero e varincia um, isto ,


n(X )
lim P
z = (z),
n

CAPTULO 4.

PROBABILIDADE E INFERNCIA

73

Onde (.) denota a funo de distribuio de uma varivel aleatria normal


padro.
Para ilustrar este teorema vamos construmos a funo TCL(). Esta funo
recebe como argumentos uma funo que especica a populao de referncia, bem como a mdia e desvio-padro desta (estabelecemos
por padro uma

populao uniforme com mdia 0.5 e desvio padro 1/ 12. Alm disso, podemos indicar um vetor contendo tamanhos de amostras e tambm o nmero
de amostras simuladas. Esta funo retornar os histogramas da varivel Z
para cada tamanho de amostra especicado. So tambm traadas a curva
terica (linha pontilhada) e densidade simulada (linha vermelha).
> TCL=function(r=runif, m=0.5, s=1/sqrt(12),n=c(1,3,10,30), N=1000,par){
+
for (i in n) {
+
x=matrix(r(i*N),nc=i)
+
x=(apply(x, 1, sum) - i*m )/(sqrt(i)*s)
+
hist(x, col='light blue', probability=T, main=paste("n =",i),
+
ylim=c(0,max(0.4, density(x)$y)))
+
lines(density(x), col='red', lwd=3)
+
curve(dnorm(x), col='blue', lwd=3, lty=3, add=T)
+
if(N>100) {
+
rug(sample(x,100))
+
} else {
+
rug(x)
+
}
+ }
+ }

Apliquemos ento para algumas populaes.


>#Populao uniforme
> op=par(mfrow=c(2,2))
> TCL()
> par(op)
>#Populao exponencial
> op=par(mfrow=c(2,2))
> TCL(rexp,1,1)
> par(op)

CAPTULO 4.

PROBABILIDADE E INFERNCIA

74

Figura 4.10: Ilustrao do TCL para amostras provenientes


de uma popu
lao uniforme com mdia 1/2 e desvio-padro 1/ 12

Figura 4.11: Ilustrao do TCL para amostras provenientes de uma populao exponencial com mdia 1 e desvio-padro 1

CAPTULO 4.

PROBABILIDADE E INFERNCIA

75

Figura 4.12: Ilustrao do TCL para amostras


provenientes de uma populao Poisson com mdia 2 e desvio-padro 2
>Populao Poisson
> op=par(mfrow=c(2,2))
> TCL(function(n){rpois(n,2)},2,sqrt(2))
> par(op)

4.3.2 Distribuies Amostrais


Na inferncia paramtrica para obtermos informaes sobre parmetros de
interesse de uma determinada populao necessrio conhecermos a distribuio de seus estimadores desses parmetros. Essas distribuies so
chamadas distribuies amostrais. Vejamos, atravs de exemplos, como usar
o R para obter distribuies amostrais. De forma geral, devemos seguir os
seguintes passos:
Escolher a populao de interesse e seus parmetros;
Determinar um nmero N de amostras, bem como o tamanho n destas;
Escolher um parmetro de interesse e obter a sua estimativa para cada
uma das N amostras simuladas. Pode-se ainda fazer um histograma

destas estimativas e vericar se este sugere algum modelo conhecido;

CAPTULO 4.

PROBABILIDADE E INFERNCIA

76

Utilizar as amostras para obter estimativas da mdia e da varincia

populacional.

Seja ento a populao X N (100, 10). Vamos


considerar o parmetro e
Pn
2
2
2
i=1 (Xi X)
. Vamos ilustrar que
e seus respectivos estimadores X e S =
n1
2
2
(n1)S
X N (, n ) e 2 2n1 . Vamos inicialmente calcular a distribuio
de X . Seguindo os passos acima e estabelecendo N = 10000 e n = 20 temos.
> set.seed(456)
> amos1=matrix(rnorm(10000*20, mean = 100, sd = sqrt(10)), nc = 10000)
> xbar=apply(amos1, 2, mean)
> mean(xbar)
[1] 100.0094
> var(xbar)
[1] 0.5012133

Esperamos que a mdia das mdias amostrais seja igual a 100 e a varincia
seja igual a (10/20) = 0, 5. Como vemos, as estimativas obtidas pela simulao so bem prximas do esperado. A pequena discrepncia entre estes
valores devido estarmos trabalhando com um nmero nito de amostras. O
leitor poder tambm, ao repetir esse procedimento, obter estimativas diferentes dependendo do valor da semente aleatria xada. esperado tambm
que a distribuio das mdias amostrais sejam normalmente distribudas. Vamos ento completar a ilustrao fazendo um histograma com curva terica
para as mdias amostrais obtidas na simulao.
> hist(xbar,prob=T,main="",ylim=c(0,0.6),ylab="Densidade")
> curve(dnorm(x,100,sqrt(10/20)),add=T)
2

. Como visto anteriorVamos agora considerar a estatstica P = (n1)S


2
2
mente esta tem distribuio n1 este fato fato garante que: E(S 2 ) = 2 e
2 )2
Var(S 2 ) = 2(
. Ilustremos ento estes resultados.
n1
> set.seed(457)
> amos2=matrix(rnorm(10000*20, mean = 100, sd = sqrt(10)), nc = 10000)
> S2=apply(amos2,2,var)
> p=apply(amos2,2,function(x){((nrow(amos2)-1)*var(x))/10})
> mean(S2)
[1] 9.967508
> var(S2)
[1] 10.43381
> hist(p,prob=T,main="",ylab="Densidade")
> curve(dchisq(x,nrow(amos2)-1),0,50,add=T)

CAPTULO 4.

PROBABILIDADE E INFERNCIA

77

Figura 4.13: Histograma com curva terica para as mdias amostrais simuladas

Figura 4.14: Histograma com curva terica para as estatsticas P obtidas das
amostras simuladas
b 2)
As estimativas para a mdia e varincia de S 2 encontradas foram E(S
d 2 ) 10, 4338 esto bem prximas dos valores tericos E(S 2 ) =
9, 9675 e Var(S
2
10 e Var(S 2 ) = 2(10)
= 10, 5263. As distribuies das estatsticas X e
201
P de uma populao normal so facilmente obtidas analiticamente. Por

CAPTULO 4.

PROBABILIDADE E INFERNCIA

78

meio de simulao podemos investigar distribuies amostrais mais complicadas de serem obtidas analiticamente. Por exemplo, a distribuio de
S/X (coeciente de variao amostral). Considerando ainda a populao
X N (100, 10) vamos determinar a mdia e a varincia da estatstica
cv = S/X .
> set.seed(458)
> amos3=matrix(rnorm(10000*20, mean = 100, sd = sqrt(10)), nc = 10000)
> cv=apply(amos3,2,function(x){(sd(x)/mean(x))})
> mean(cv)
[1] 0.03122713
> var(cv)
[1] 2.589526e-05
b v ) 0, 031 e var(c
Temos ento as estimativas E(c
c v ) 0, 000. Tomemos
agora a populao Y U [0, 10]. Vamos ilustrar a distribuio da estatstica
Yn = max(Y). Sabemos que se Y possui distribuio uniforme no intervalo
[0, ] a densidade de Yn dada por:
fYn (y) =

n n1
y 1l(0,) (y)
n

(4.1)

Desta forma temos que:


E(Yn ) =

n
n+1

Var(Yn ) =

n2
(n + 1)2 (n + 2)

Vamos inicialmente obter estimativas para mdia e varincia de Yn utilizando o mesmo procedimento anterior, agora considerando a populao
Y U [0, 10] e tomando N = 10000 e n = 20:
> set.seed(459)
> amos4=matrix(runif(10000*20,0,10), nc = 10000)
> yn=apply(amos4,2,max)
> mean(yn)
[1] 9.525264
> var(yn)
[1] 0.2026569
=
Os valores tericos obtidos atravs da densidade de Yn so E(Yn ) = 2010
21
20102
9, 5238 e Var(Yn ) = 212 22 = 0, 2061. Note que as estimativas obtidas atravs
da simulao esto bem prximas destas. Vamos agora gerar um histograma
para os mximos obtidos nas amostras simuladas e acrescentaremos neste a
curva terica 4.1.

CAPTULO 4.

>
+
+
>
>

PROBABILIDADE E INFERNCIA

79

fyn=function(x,n,theta){
(n/(theta^n))*(y^(n-1))
}
hist(yn,prob=T,main="",ylim=c(0,2),ylab="Densidade")
curve(fyn(x,20,10),0,10,add=T)

Figura 4.15: Histograma com curva terica para as estatsticas Yn obtidas


das amostras simuladas

4.3.3 Estimao de mxima verossimilhana


Vamos agora utilizar o R para ilustrar o mtodo de estimao de mxima verossimilhana. Vamos traar curvas de verossimilhana e log-verossimilhana,
ilustrar propriedades dos estimadores de verossimilhana, etc. Consideremos ento X1 , X2 , . . . , Xn uma amostra aleatria da distribuio Poisson de
parmetro . A funo de verossimilhana (L()) e log-verossimilhana (l())
so dadas por:
L() = en

xi

l() = xi ln n

CAPTULO 4.

PROBABILIDADE E INFERNCIA

80

Vamos gerar uma amostra aleatria de uma poisson de parmetro = 2.


Em seguida escreveremos as funes L() e l() e plotaremos seus grcos
indicando o ponto de mximo que corresponde a . Examine o cdigo abaixo:
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

#Verossimilhana da Poisson
#Gerar amostra aleatria de uma P(2)
set.seed(165)
xnpos=rpois(20,2)
n=length(xnpos)
s=sum(xnpos)
L=function(lam){(lam^s)*exp(-n*lam)}
l=function(lam){log(lam)*s-n*lam}
op=par(mfrow=c(1,2))
#Grfico da Verossimilhana
curve(L,0,4,xlab=expression(lambda),ylab=expression(L(lambda)))
maxL=optimize(L,c(0,4),maximum=T)[[1]]
obL=optimize(L,c(0,4),maximum=T)[[2]]
lines(c(maxL,maxL),c(obL,-1),lty=2)
points(maxL,obL,pch=20)
#Grfico da Log-verossimilhana
curve(l,0,10,xlab=expression(lambda),ylab=expression(l(lambda)))
maxl=optimize(l,c(0,10),maximum=T)[[1]]
obl=optimize(l,c(0,10),maximum=T)[[2]]
lines(c(maxl,maxl),c(obl,-1000),lty=2)
points(maxl,obl,pch=20)
par(op)

De uma forma geral podemos resumir esse procedimento nos seguintes passos:
Escolher a populao de interesse e seus parmetros;
Escrever as funes L() e l();
Encontrar o mximo destas funes utilizando a funo optimize();
Plotar os grcos indicando o ponto de mximo. Isso pode ser feito
com as funes points() e lines().

Nem sempre possvel encontrar formas fechadas para os estimadores de


mxima verossimilhana. Nesses casos, as estimativas so encontradas por
meio de mtodos numricos. No exemplo a seguir utilizaremos o mtodo de
Newton-Rapson para obter as estimativas dos parmetros.

CAPTULO 4.

PROBABILIDADE E INFERNCIA

81

Figura 4.16: Grco de L() e l() para uma amostra da populao


Poisson( = 2)

Exemplo (Kalbeisch, 1985): k = 5 diferentes doses de um inseticida so

aplicadas sobre condies padronizadas em uma amostra de uma espcie de


inseto. Os resultados so mostrados na Tabela 2. Vamos assumir que p,
a probabilidade de que um inseto morra, relacionada com a dose atravs
de um modelo logstico. Desejamos encontrar as estimativas de mxima
.
verossimilhana (
, )
Tabela 4.1: Dados de um Experimento Dose-Resposta
Concentrao
2,6 3,8 5,1 7,7 10,2
Log Concentrao
0,96 1,34 1,63 2,04 2,32
Nmero de insetos ni 50
48
46
49
50
Nmero de mortos yi
6
16
24
42
44
Frao de mortos
0,12 0,33 0,52 0,86 0,88
Se diferentes insetos so usados com diferentes doses, os Yi0 s (nmero de insetos mortos) sero independentes e sua densidade de probabilidade conjunta

f (y1 , y2 , . . . , y5 ) =

5  
Y
ni
i=1

yi

pyi i (1 pi )ni yi

CAPTULO 4.

82

PROBABILIDADE E INFERNCIA

As funes de verossimilhana e log-verossimilhana so


y i
5 
Y
pi
L(, ) =
(1 pi )ni
1

p
i
i=1

5 
X
l(, ) =
yi ln
i=1


pi
+ ni ln(1 pi )
1 pi

Mas sabemos que pi possui uma relao logstica com di , ou seja, pi =


1 (1 + e+di )1 . Logo,

l(, ) =

5
X

[yi ( + di ) + ni ln(1 pi )]

i=1

Desta obtemos o vetor escore S(, ) e a matriz de informao I(, ):



S(, ) =

(yi i )
(yi i )di


I(, ) =

vi vi di
vi di vi d2i

Onde i = ni pi e vi = ni pi (1 pi ). Vamos inicialmente entrar com os dados


da Tabela 2.
>
>
>
>

Con=c(2.6,3.8,5.1,7.7,10.2)
n=c(50,48,46,49,50)
y=c(6,16,24,42,44)##nmero de insetos mortos(dose d_i)
d=log(Con)

Agora para dar incio ao processo iterativo precisamos de uma estimativa


inicial para os parmetros e . Vamos ento tomar como valores iniciais
5 e 3 (Veja Kalbeisch, 1985 para mais detalhes sobre este exemplo). A funo NR() recebe como argumentos um vetor com o valor inicial
para os parmetros e um critrio de convergncia. Essa funo retornar o
valor das estimativas o nmero de iteraes at a convergncia, o valor das
estimativas e o valor da log-verossimilhana.

CAPTULO 4.

>
>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
>
>
>

PROBABILIDADE E INFERNCIA

83

# Incio do processo iterativo


NR=function(teta=c(x,y),epsilon){
teta=teta # Chute inicial
p=1 -1/(1+ exp(teta[1]+ teta[2]*d))
u=n*p
v=n*p*(1-p)
Steta=c(sum(y-u),sum((y-u)*d))# Vetor escore
Iteta=matrix(c(sum(v),sum(v*d),sum(v*d),sum(v*d^2)),ncol=2)# Informao
epsilon=10^{-10} # Critrio de convergncia
j=0 # de iteraes
while (sqrt(sum((solve(Iteta)%*%Steta)^2))>epsilon){
teta=teta+solve(Iteta)%*%Steta
p=1 -1/(1+ exp(teta[1]+ teta[2]*d))
u=n*p
v=n*p*(1-p)
Steta=c(sum(y-u),sum((y-u)*d))
# Vetor escore
Iteta= matrix(c(sum(v),sum(v*d),sum(v*d),sum(v*d^2)),ncol=2)# Informao
logver=sum(y*(teta[1]+ teta[2]*d)+n*log(1-p))
j=j+1
}
cat("\t","Resultado do Processo iterativo","\n")
cat("No de iteraes =",j,"\t","alfa esti.=",teta[1],", beta esti.=",teta[2],"\n")
cat("Log-verossimilhana=",logver,"\n")
}

NR(c(-5,3),10^(-10))
Resultado do Processo iterativo
No de iteraes = 4
alfa esti.= -4.886912 , beta esti.= 3.103545
Log-verossimilhana= -119.8942

Obteve-se ento, ao nal de 4 iteraes, = 4, 8869 e = 3, 1035. Portanto, o modelo de dose resposta estimado
p = 1 (1 + e4,8869+3,1035d )1

Podemos utilizar tambm a funo fitdistr() da biblioteca MASS que utiliza o algoritmo BFGS (Broyden et.al., 1970) para estimao de parmetros.
Considere ento o seguinte exemplo:

Exemplo (Kalbeisch, 1985): Suponha que para um teste de resistncia


de um componente metlico, 23 amostras(corpos de prova) foram avaliadas
resultando nos valores:

CAPTULO 4.

17,88 28,92
68,64 68,64

PROBABILIDADE E INFERNCIA

33,00 41,52 42,12


68,88 84,12 93,12

84

45,60 48,48 51,84 51,96 54,12 55,56 67,80


98,64 105,12 105,84 127,92 128,04 173,40

De estudos anteriores admite-se que a resistncia apresenta aproximadamente uma distribuio de Weibull, cuja densidade dada por f (x; , ) =
x1 exp (x ), 0 < x < , onde > 0 e > 0. Nosso objetivo
com base na amostra observada.
determinar (
, )
Vamos ento aplicar a funo fitdistr().
>
+
+
>
>
>

x<-c(17.88, 28.92, 33.00, 41.52, 42.12, 45.60, 48.48,


51.84, 51.96, 54.12, 55.56, 67.80, 68.64, 68.64, 68.88,
84.12, 93.12, 98.64, 105.12, 105.84, 127.92, 128.04, 173.40)
require(MASS)
#Estimativa dos parmetros
fitdistr(x,"weibull")
shape
scale
2.101337 81.836799
( 0.328613) ( 8.596717)

A funo fitdistr() recebe como argumentos um vetor de dados e um string


indicando a distribuio que ser utilizada. Esta retorna as estimativas dos
parmetros e seus respectivos erros-padro (valores entre parnteses).

4.3.4 Intervalos de Conana


Intervalo para a mdia de uma populao normal com varincia
desconhecida:
Vamos considerar uma amostra de tamanho 10 de uma populao N (20, 16).
Suponhamos que no conhecemos o verdadeiro valor de e 2 e desejamos
construir um intervalo com % de conana para a mdia. Vamos primeiramente escrever uma funo que retorne este intervalo para um nvel de conana xado.
>
+
+
+
+
+
+
+
+

IC.media=function(amos,nc=0.95){
xb=mean(amos4)
s=sd(amos4)
lim.inf=(xb-qt(0.5*(1+nc),length(amos4)-1)*(s/sqrt(length(amos4))))
lim.sup=(xb+qt(0.5*(1+nc),length(amos)-1)*(s/sqrt(length(amos))))
cat("\t","IC para a mdia de uma pop. normal com var. desconhecida","\n")
cat("IC a", nc*100,"%","\n")
ic=c(lim.inf,lim.sup)
names(ic)=c("lim.inf","lim.sup")

CAPTULO 4.

PROBABILIDADE E INFERNCIA

85

+ ic
+ }

Note que, estabelecemos como valor padro o nvel de conana de 95%.


Vamos ento aplicar utilizando 95% e 99% de conana.
> IC.media(amos4)
IC para a mdia de uma pop. normal com var. desconhecida
IC a 95 %
lim.inf lim.sup
16.14058 21.03455
> IC.media(amos4,nc=0.99)
IC para a mdia de uma pop. normal com var. desconhecida
IC a 99 %
lim.inf lim.sup
15.07220 22.10292

Estes mesmos intervalos podem ser obtidos com a funo t.test() da seguinte
forma:
> t.test(amos4)$conf.int
[1] 16.14058 21.03455
attr(,"conf.level")
[1] 0.95
> t.test(amos4,conf.level=0.99)$conf.int
[1] 15.07220 22.10292
attr(,"conf.level")
[1] 0.99

Usaremos agora a funo t.test() para calcular o nvel de conana do


intervalo para a mdia de uma populao normal com varincia desconhecida
usando simulao. A ideia gerar um grade numero de amostras de tamanho
n, e para cada uma delas determinar um intervalo de conana. Devemos
tambm contar o nmero de intervalos que contm a verdadeira mdia. A
proporo destes intervalos ser o nvel de conana.
> nivel.conf=function(N,n,mu,sigma){
+ cont=0
+ for(i in 1:N){
+ amo=rnorm(n,mu,sigma)
+ inter=t.test(amo)$conf.int
+ if(mu>inter[1] & mu<inter[2])
+
cont=cont+1

CAPTULO 4.

PROBABILIDADE E INFERNCIA

86

+ }
+ return(cont/N)
+ }

Vamos aplicar para n = 10 e n = 30. Note que obtemos uma maior cobertura
com a maior amostra.
> set.seed(556)
> nivel.conf(N=1000,n=10,mu=20,sigma=4)
[1] 0.944
> set.seed(643)
> nivel.conf(N=1000,n=30,mu=20,sigma=4)
[1] 0.963

Podemos ilustrar gracamente o que acabamos de fazer utilizando a funo


conf.int(). Esta funo calcula intervalos de conana para amostras de
uma distribuio normal padro e estes so plotados como segmentos de
reta em grco. Neste grco tambm traada uma linha pontilhada que
representa a verdadeira mdia e a taxa de cobertura (coverage rate). Vejamos
um exemplo onde utilizamos 100 amostras de tamanho 20. O grco visto
na Figura 4.17
>
>
>
>
>
>

require(animation)
oopt=ani.options(interval = 0.1, nmax = 100)
set.seed(900)
conf.int(size=20,main="Demostrao de Intervalo de Confiana")
ani.options(oopt)

Intervalos para proporo:


Da mesma forma que zemos para a mdia, iremos tambm escrever uma
funo que retorne uma estimativa intervalar para uma proporo. Vamos
considerar inicialmente o intervalo assinttico.Ou seja, sabendo que:

n(
p p)
p
N (0, 1)
p(1 p)

Podemos calcular,

P {z/2

n(
p p)
p
z/2 } = 1
p(1 p)

CAPTULO 4.

PROBABILIDADE E INFERNCIA

87

Figura 4.17: Intervalos de conana para a mdia de uma normal padro


para 100 amostras de tamanho 20
Logo,
"
IC(p, 1 ) p z/2

p(1 p)
n

que um intervalo assintticoPpara


p e p o estimador de mxima verossimin
i=1 yi
lhana de p dado por: p = n
Escrevamos ento uma funo que retorne este intervalo.
> IC.prop=function(amos,nc=0.95){
+ pch=sum(amos)/length(amos)
+ lim.inf=(pch-qnorm(0.5*(1+nc))*(sqrt((pch*(1-pch))/length(amos))))
+ lim.sup=(pch+qnorm(0.5*(1+nc))*(sqrt((pch*(1-pch))/length(amos))))
+ cat("\t","IC para proporo","\n")

CAPTULO 4.

PROBABILIDADE E INFERNCIA

88

+ cat("IC a", nc*100,"%","\n")


+ ic=c(lim.inf,lim.sup)
+ names(ic)=c("lim.inf","lim.sup")
+ ic
+ }

Gerando uma amostra de uma populao de Bernoulli com p = 0, 6 e aplicando a funo IC.prop() obtemos os seguinte resultados:
> set.seed(7856)
> amos5=rbinom(10,1,0.6);amos5
[1] 0 1 1 0 1 1 1 1 1 1
> IC.prop(amos5)
IC para proporo
IC a 95 %
lim.inf lim.sup
0.552082 1.047918

A funo binom.wilson() da biblioteca epitools retorna um intervalo para


proporo baseado na correo de Wilson (Wilson, 1927). Este dado por:
p +

1 2
z
2n 1/2

q
z1/2
1+

p(1
p)
n

2
z1/2

4n2

1 2
z
n 1/2

Utilizando a mesma amostra anterior vamos determinar o intervalo de Wilson


e comparar o seu comprimento com o intervalo assinttico.
> require(epitools)
> IW=binom.wilson(sum(amos5),length(amos5));IW
x n proportion
lower
upper conf.level
1 8 10
0.8 0.4901625 0.9433178
0.95
> #comprimento do intervalo de Wilson
> comp.W=IW$upper-IW$lower;comp.W
[1] 0.4531554
>
> IA=binom.approx(sum(amos5),length(amos5));IA
x n proportion
lower
upper conf.level
1 8 10
0.8 0.552082 1.047918
0.95
> #Comprimento do intervalo assinttico
> comp.A=IA$upper-IA$lower;comp.A
[1] 0.495836

Vemos que para esta amostra o intervalo de Wilson apresentou um menor


comprimento comparado com o intervalo assinttico.

CAPTULO 4.

PROBABILIDADE E INFERNCIA

89

4.3.5 Testes de Hipteses


Teste para a mdia de uma populao normal com varincia desconhecida:
Vamos considerar a seguinte amostra retirada de uma populao supostamente normal:
32,18661 29,70124 31,12365 28,71436 33,05036 32,35136 30,37871
32,51114 27,57830 31,09745

Deseja-se testar:


H0 : = 30
H1 : 6= 30

Sabendo que:

T =

n(X 0 )
t(n1)
S

Vamos utilizar o R como uma calculadora e realizar o teste passo a passo.


> n=length(amos6);n
[1] 10
> xb=mean(amos6);xb
[1] 29.71069
> s=sd(amos6);s
[1] 3.169497
> #Estatstica do teste
> T=(sqrt(n)*(xb-30))/s;T
[1] -0.2886489
>
> #nvel de significncia
> alfa=0.05
>
> #t crtico
> Tt=qt(1-alfa/2,n-1);Tt
[1] 2.262157

Vamos ilustrar gracamente a regio crtica do teste e tambm a comparao


do valor da estatstica do teste com o valor crtico.

CAPTULO 4.

>
>
>
+
>
+
>
>

PROBABILIDADE E INFERNCIA

90

#Regio crtica
curve(dt(x,n-1),-4,4,ylab="f (x)")
polygon(c(-Tt,seq(-Tt,-4,l=30),-4),
c(0,dt(seq(-Tt,-4,l=30),n-1),0),density=10)
polygon(c(Tt,seq(Tt,4,l=30),4),
c(0,dt(seq(Tt,4,l=30),n-1),0),density=10)
text(0,0.2,"AC. Ho",font=2)
text(c(-3.2,3.2),c(0.05,0.05),c("Rej. Ho","Rej. Ho"),font=2)

Figura 4.18: Regio crtica do teste


>
>
+
>
>
>
+
>
+
>
>

#Comaparando o valor tabelado com o calculado


curve(dt(x,n-1),-4,4,ylab="f (x)",ylim=c(-0.1,0.4),
bty="n",axes=F,xlab="")
axis(1,seq(-4,4,1),pos=0)
axis(2,seq(0,0.4,0.1),pos=-4)
polygon(c(-Tt,seq(-Tt,-4,l=30),-4),
c(0,dt(seq(-Tt,-4,l=30),n-1),0),density=10)
polygon(c(Tt,seq(Tt,4,l=30),4),
c(0,dt(seq(Tt,4,l=30),n-1),0),density=10)
text(0,0.2,"AC. Ho",font=2)
text(c(-3.2,3.2),c(0.05,0.05),c("Rej. Ho","Rej. Ho"),font=2)

CAPTULO 4.

PROBABILIDADE E INFERNCIA

91

> text(T,-0.1,"Tcal = -0,91",font=1)


> arrows(T,-0.085,T,0,lwd=2)

Figura 4.19: Marcando o valor da Estatstica do teste


> #nvel descritivo do teste (valor p)
> vp=2*pt(T,n-1);vp

Pelo exposto, vemos que no h evidncias contra a hiptese de que a mdia


populacional igual a 30, ao nvel de signicncia de 5%. Podemos obter
todos os resultados acima utilizando a funo t.test().
#utilizando uma funo do R
> t.test(amos6,mu=30)
One Sample t-test
data: amos6
t = -0.3239, df = 9, p-value = 0.7534
alternative hypothesis: true mean is not equal to 30
95 percent confidence interval:
27.63575 31.77196
sample estimates:
mean of x

CAPTULO 4.

PROBABILIDADE E INFERNCIA

92

29.70386

Seja a populao N (10, 4). Supondo desconhecida a verdadeira mdia desta


populao, desejamos testar:


H0 : = 10
H1 : 6= 10

Chama-se poder do teste a probabilidade de se rejeitar a hiptese H0 dado


um valor qualquer de , especicado ou no pela hiptese alternativa, e ser
denotado por (). Para um especicado o poder do teste dado por:




X
X

+ P Z > z/2 +
P Z > z/2 +
/ n
/ n

Tomando valores em torno de = 10 e com base na expresso acima vamos


calcular o desse teste para diferentes tamanhos de amostra.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

#poder do teste
set.seed(89081)
amos7=rnorm(9,10,4)
#valores alternativos para mdia
mus=seq(7,13,0.1)
# poder do teste para n=9
pt1=pnorm(1.96+((mean(amos7)-mus)/sqrt(4/9)),lower.tail=F)+pnorm(-1.96+((mean(amos7)-mus)/sqrt(4/9)))
#poder do teste para n=20
pt2=pnorm(1.96+((mean(amos7)-mus)/sqrt(4/20)),lower.tail=F)+pnorm(-1.96+((mean(amos7)-mus)/sqrt(4/20)))
#poder do teste para n=30
pt3=pnorm(1.96+((mean(amos7)-mus)/sqrt(4/30)),lower.tail=F)+pnorm(-1.96+((mean(amos7)-mus)/sqrt(4/30)))
#plotando em um nico grfico
plot(pt1,ty="l",ylab=expression(pi(mu)))
points(pt2,ty="l",col=2)
points(pt3,ty="l",col=3)
legend("bottomleft",c("n=9","n=20","n=30"),col=1:3,lty=1,bty="n")

CAPTULO 4.

PROBABILIDADE E INFERNCIA

93

Figura 4.20: Grco do poder do teste


As principais funes do R para realizar testes paramtricos esto resumidas
na Tabela 3.
Tabela 4.2: Principais funes do R para realizar testes de hipteses
Comparao de mdias de
1 mdia
2 mdias
2 mdias (populaes dependentes)
2 mdias com varincias iguais
Teste para propores
Comparao de varincias

populaes normais

t.test(x,...)
t.test(x,y,...)
t.test(x,y,paried=T)
t.test(x,y,var.equal=T)
prop.test()
var.test()

CAPTULO 4.

PROBABILIDADE E INFERNCIA

94

.1 Apndice Software R no Curso de Estatstica da UFC


H uma srie de funes e bibliotecas que so constantemente usadas em disciplinas do curso de estatstica da UFC. A pagina ocial do R http://www.r-project.org/
disponibiliza para download uma srie de bibliotecas com as mais variadas
nalidades. A tabela abaixo traz um resumo das principais bibliotecas e
funes utilizadas no curso supracitado.
Tabela 3: Principais bibliotecas e funes do R usadas nas disciplinas do
curso de estatstica da UFC

Disciplina
Estatstica Descritiva

Bibliotecas do R Principais funes Finalidade


stats
prettyR

Probabilidade e
Inferncia

stats

Mtodos NoParamtricos

stats

Anlise de
Regresso

Planejamento de
Experimentos
Controle estatstico
da Qualidade

epitools
stats

stats
MASS
qcc

summary(), hist(),
table()
pie(), barplot()
Mode()
pnorm(), rnorm()
pbinom(), rbinom()
t.test()
shapiro.test()
wilcox.test()
binom.exact()
lm()
anova()
residuals()
predict()
aov()
bartlett.test()
TukeyHSD()
boxcox()
qcc()

Resumos estatsticos, histogramas,


Tabelas de frequncias
Grco em setores e em colunas
Moda de um conjunto de dados
Obter probabilidades e nmeros
aleatrios das distribuies normal
e binomial
Realiza o teste t de Student
Teste de normalidade
Comparao de 2 grupos
Intervalos para proporo
Ajustar um modelo de regresso
linear
Anlise de varincia
Resduos
Valores preditos
Ajuste do modelo
Teste de homogeneidade
Teste de Tukey
Transformao boxcox
Grcos de controle

Anlise fatorial
Componentes principais
Anlise Multivariada
Anlise de agrupamento
MASS
Anlise discriminante linear
energy
Teste de normalidade
Multivariada
chisq.test()
Testes de
fisher.test()
associao
Biometria
stats
mantelhaen.test()
Teste Cochran-Mantel-Haenszel
glm()
Regresso logstica
ts()
Denir a srie
Sries
filter()
Filtros lineares
Temporis
stats
acf()
Correlograma
arima()
Ajusta modelos autoregressivos
tsdiag()
Diagnstico do ajuste
(*): Estas bibliotecas no fazem parte do conjunto de bibliotecas padro do R, e devem ser instaladas
posteriormente.
stats

factanal()
princomp()
hclust()
lda()
mvnorm.etest()

Referncias Bibliogrcas
[1] Bussab, W. de O. e Morettin, P. A. (2003). Estatstica Bsica. 5 ed.
So Paulo: Editora Saraiva.
[2] Pinheiro J. I. D. et al. (2008). Estatstica bsica: A arte de trabalhar
com dados. 1 ed. Rio de Janeiro: Campus.
[3] James, B. R. (1981). Probabilidade: Um Curso em Nvel Intermedirio.
Projeto Euclides, Impa, Rio de Janeiro.
[4] Kalbeisch, J. G. (1985). Probability and Statistical Inference, 2d edition.
Springer-Verlag, New York.
[5] R Development Core Team (2005). R: A language and environment for
statistical computing. R Foundation for Statistical Computing, Vienna,
Austria, URL http://www.R-project.org.
[6] Wilson, E. B. (1927). Probable inference, the law of succession, and
statistical inference. Journal of the American Statistical Association 22:
209-212.

95