95

Curso de R

Embed Size (px)

Citation preview

Page 1: Curso de R

UNIVERSIDADE FEDERAL DO CEARÁCENTRO DE CIÊNCIAS

DEPARTAMENTO DE ESTATÍSTICA E MATEMÁTICAAPLICADA

CURSO DE R

ProfessoraAna Maria Souza de Araujo

AlunoJosé Roberto Silva dos Santos

Fortaleza, Dezembro de 2009

Page 2: Curso de R

Sumário

1 Introdução 41.1 Como utilizar o R . . . . . . . . . . . . . . . . . . . . . . . . . 41.2 Pacotes Libraries . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Tipos de Objetos 62.1 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.4 Data-frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.5 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.6 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.7 Importação de dados . . . . . . . . . . . . . . . . . . . . . . . 18

2.7.1 A função read.table() . . . . . . . . . . . . . . . . . . . 192.7.2 Importando planilhas do Microsoft Excel (Arquivos xls) 21

3 Estatística Descritiva 223.1 Rotinas Grá�cas . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.1.1 Funções grá�cas de alto nível . . . . . . . . . . . . . . 223.1.2 Funções grá�cas de baixo nível . . . . . . . . . . . . . 233.1.3 Funções grá�cas interativas . . . . . . . . . . . . . . . 23

3.2 Parâmetros grá�cos. A função par() . . . . . . . . . . . . . . . 233.3 Descrevendo um conjunto de dados . . . . . . . . . . . . . . . 29

3.3.1 Descrição Univariada . . . . . . . . . . . . . . . . . . . 323.3.2 Descrição Bivariada . . . . . . . . . . . . . . . . . . . . 413.3.3 Alguns grá�cos mais elaborados . . . . . . . . . . . . . 48

4 Probabilidade e Inferência 534.1 Controle de �uxo e de�nição de funções . . . . . . . . . . . . . 53

4.1.1 Execução condicional . . . . . . . . . . . . . . . . . . . 534.1.2 Ciclos . . . . . . . . . . . . . . . . . . . . . . . . . . . 544.1.3 De�nindo funções . . . . . . . . . . . . . . . . . . . . . 55

2

Page 3: Curso de R

SUMÁRIO 3

4.2 Distribuições de Probabilidade . . . . . . . . . . . . . . . . . . 564.2.1 Distribuição Normal . . . . . . . . . . . . . . . . . . . 574.2.2 Distribuição t-Student . . . . . . . . . . . . . . . . . . 604.2.3 F-Snedecor . . . . . . . . . . . . . . . . . . . . . . . . 614.2.4 Distribuição Gama . . . . . . . . . . . . . . . . . . . . 634.2.5 Distribuição Binomial . . . . . . . . . . . . . . . . . . 674.2.6 Distribuição de Poisson . . . . . . . . . . . . . . . . . . 69

4.3 Inferência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724.3.1 Teorema Central do Limite . . . . . . . . . . . . . . . . 724.3.2 Distribuições Amostrais . . . . . . . . . . . . . . . . . 754.3.3 Estimação de máxima verossimilhança . . . . . . . . . 794.3.4 Intervalos de Con�ança . . . . . . . . . . . . . . . . . . 844.3.5 Testes de Hipóteses . . . . . . . . . . . . . . . . . . . . 89

.1 Apêndice Software R no Curso de Estatística da UFC . . . . . 94Referências Bibliográ�cas . . . . . . . . . . . . . . . . . . . . . . . 95

Page 4: Curso de R

Capítulo 1

Introdução

R é uma linguagem e também um ambiente para cálculos estatísticos e grá�-cos. Semelhante a linguagem e ambiente S, R oferece uma ampla variedade demetodologias estatísticas (análise descritiva, modelagem linear e não-linear,testes estatísticos paramétricos e não-paramétricos, análise de séries tempo-rais,...) além de um vasto ferramental grá�co. Este é distribuído livrementesob os termos da Free Software Foundation's GNU General Public Licenseem forma de código fonte. Compila e executa em uma ampla variedade deplataformas UNIX e sistemas similares (incluindo FreeBSD e Linux), Win-dows e MacOS.

1.1 Como utilizar o R

O R está disponível para download no site http://www.r-project.org/. Apósa instalação inicie o R (isso pode ser feito utilizando o ícone que será criadona área de trabalho do seu computador) e veja que será aberta a seguintetela:Este é o ambiente R que possui uma janela denominada console. Para limparo conteúdo que aparece na tela do console basta combinar as teclas "Ctrl"e"L". Nesta janela é possível digitar e executar comandos, porém, a melhorforma de se editar comandos é usando o editor de script, disponível a partirda versão 2.1.1. Para ativar o editor, basta ir até a barra de menus e clicarsequencialmente em: Arquivo e Novo script. No ambiente R as janelaspodem ser organizadas por título (uma ao lado da outra) ou em forma decascata. Para isso, basta ir até o menu Janelas e escolher uma dessas opções.Para executar comandos no script, deixe o cursor na linha de comandos dese-jada e combine as teclas "Ctrl"e "R"; no caso de comandos ocupando váriaslinhas, selecione todas as desejadas e após isso faça a mesma combinação de

4

Page 5: Curso de R

CAPÍTULO 1. INTRODUÇÃO 5

Figura 1.1: Tela inicial do R

teclas.

1.2 Pacotes Libraries

Ao instalar o R, este vem com uma quantidade padrão de ferramentas que es-tão na forma de pacotes, por exemplo, os pacotes "stats"e "base"que contêmfunções básicas como plot(), mean(), matrix() entre outras, são exem-plos de pacotes padrões do R. No entanto, o usuário não precisa limitar-sesomente a estes, ou seja, é possível instalar mais pacotes sempre que fornecessário. O R conta com inúmeros colaboradores no mundo inteiro quecriam e disponibilizam estes pacotes. Estas contribuições podem ser adquiri-das, na forma de arquivos "zip", diretamente da home page citada na sub-seção anterior. Ou também, podem ser instaladas diretamente do ambienteR, bastando para isso, que o computador do usuário esteja conectado à in-

ternet.

Page 6: Curso de R

Capítulo 2

Tipos de Objetos

No R, a manipulação de dados é feita através de objetos, sob os quais estãode�nidas uma série de comandos que permitem, entre outras, operações dearitmética, armazenamento de dados, descrição e análise. Os objetos básicosdo R são dos tipos: vetores, matrizes, arrays, data-frames, listas e funções. Osquatro primeiros tipos, são objetos que armazenam dados diferindo apenaspela forma de armazenamento e operação destes. Já os objetos do tipofunção, sempre recebem um "input" e produzem um "output".

2.1 Vetores

No R, a atribuição de um valor a um objeto é feita utilizando o símbolo "=",por exemplo:

> x1=2>x1[1] 2

Na primeira linha deste comando estamos atribuindo o valor numérico 2 aoobjeto x1, na segunda linha pede-se para mostrar o valor de x1,e na terceiralinha é exibido o valor de x1. Para separar comandos em uma mesma linhadeve-se usar ";" por exemplo, o código acima poderia ser escrito da seguinteforma:

> x1=2;x1[1] 2

Agora vamos examinar os seguintes comandos:

6

Page 7: Curso de R

CAPÍTULO 2. TIPOS DE OBJETOS 7

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

> x3=1:10;x3[1] 1 2 3 4 5 6 7 8 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 são diferentes formas de de�nir um vetor. Vejamos. O vetor x2 foide�nido usando o comando "c" que concatena os valores que estão entreparênteses. Para x3, foi utilizado um comando que gera sequências, o símbolo":" indica que o vetor será preenchido com valores de 1 a 10. Outra formade gerar sequências é utilizando a função "seq", sendo que nesta podemosescolher o valor de incremento, que é especi�cado no argumento by=. Para oexemplo acima vemos que x4 foi preenchido com uma sequência iniciando em0 e terminando em 1 com incremento de 0, 1. Por último, temos os vetoresx5 e x6 que foram de�nidos usando a função "rep", muito útil para criaçãode vetores com elementos repetidos. No primeiro argumento 1 da funçãodeve ser informado o elemento que será repetido e no segundo argumentoinformamos o número de vezes que este será repetido. No vetor x5 temos onúmero 1 repetido 3 vezes e, note que, também podemos usar vetores nosargumentos da função rep. É o que foi feito para de�nir x6. Neste caso, oprimeiro vetor deve conter os elementos que se deseja repetir, e o segundoirá conter o número de repetições de cada elemento do primeiro. É possívelselecionar 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 lógico > para selecionar os elementos de x4maiores do que 0,5.

> x4[3]

1Os argumentos de uma função devem ser sempre separados por vírgula

Page 8: Curso de R

CAPÍTULO 2. TIPOS DE OBJETOS 8

[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 (aposição dos elementos é contada a partir de 1), depois foi utilizado o operadorde subtração para excluir o terceiro elemento de x4 e por último estamosselecionando os três primeiros elementos de x4. Note que a linguagem Ré bastante intuitiva, por exemplo, imagine se nosso interesse fosse excluirmais de um elemento de x4 de uma só vez, seria razoável pensar no seguintecomando:

> 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.

Operações com vetores: Há diversas operações numéricas de�nidas sobrevetores. 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

Page 9: Curso de R

CAPÍTULO 2. TIPOS DE OBJETOS 9

Vemos que no primeiro comando estamos somando 2 a todos elementos dovetor x2. Em seguida, somamos cada elemento de x2 com cada elementodo vetor (3,4,5). No terceiro comando, multiplicamos cada elemento de x2por 3. Logo depois, elevamos o primeiro elemento de x2 a 1, o segundo a 2e o terceiro a 3. No último comando introduzimos a função round() ondeo primeiro argumento desta é um valor ou vetor numérico, e o segundo é onúmero de casas decimais que se deseja no valor ou valores.

Vetores de caracteres: Também 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 não estejam, o R iráprocessá-los como objeto. Observe que, para criar o vetor x8, concatenamosx2 com o caractere "a", ou seja, tínhamos um vetor que era numérico e lhe foiacrescentado um caractere. Porém o vetor x8 não possui elemento numéricoalgum, o que foi veri�cado com a função is.numeric(), que informa aousuário a natureza do objeto testado. Para x8 a função retornou o valorlógico FALSE, indicando que este não é numérico. Isso é devido ao fato deque, no R, objetos do tipo vetor só aceitam elementos de um único tipo(caractere ou numérico). Mais adiante iremos ver um objeto que permiteelementos de mais de um tipo.

2.2 Matrizes

Matrizes são objetos que possuem as mesmas propriedades dos vetores, diferindoapenas na dimensão. Uma das formas de criar uma matriz no R é utilizandoa função abaixo:

matrix(um vetor, nrow =número de linhas, ncol =número de colunas,byrow = FALSE,...)

Page 10: Curso de R

CAPÍTULO 2. TIPOS DE OBJETOS 10

Esta função recebe um vetor e o organiza em uma matriz conforme indicadono argumento byrow. Se byrow=FALSE2 o vetor será organizado por colunasda matriz, senão byrow=TRUE (que signi�ca por linha = verdade), ou seja, ovetor 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 é su�ciente escrever apenas as duas primeiras letras dos argumentos(ao invés de ncol basta digitar nc) e também, basta informar o número delinhas ou colunas, uma vez que estes devem ser sempre múltiplos do total deelementos da matriz. Vamos agora de�nir uma outra matriz usando o mesmovetor que foi usado na anterior, porém, 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 de�nir uma matriz é usando a função cbind, que servepara 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 função para concatenarmos quantos vetores quisermos, eestes corresponderão às colunas da matriz que está sendo criada.

Seleção de elementos: Assim como foi visto na seção anterior, tambémpodemos selecionar elementos de uma matriz utilizando colchetes agora naforma: [ , ] onde antes da vírgula indica(m)-se a(s) linhas e depois a(s)colunas. Por exemplo:

2Este é a opção default, ou seja, se nada for especi�cado este será a opção utilizada

Page 11: Curso de R

CAPÍTULO 2. TIPOS DE OBJETOS 11

> m3[1,2][1] 6

> m3[,2][1] 6 7 8 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 primeiralinha e segunda coluna de m3. No segundo selecionamos apenas a segundacoluna. No terceiro é selecionada a segunda linha. E no quarto comandoestamos excluindo a segunda linha de m3 e por último selecionamos uma sub-matriz constituída de alguns elementos das linhas 4 e 5 e das colunas 1 e 2de m3.

Operações com matrizes: Existem várias operações de�nidas sob ma-trizes. Vejamos algumas através 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

Page 12: Curso de R

CAPÍTULO 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] [,2] [,3]

[1,] 102 120 138[2,] 114 135 156[3,] 126 150 174[4,] 138 165 192[5,] 150 180 210

> t(m2)%*%m2[,1] [,2] [,3]

[1,] 66 78 90[2,] 78 93 108[3,] 90 108 126

Nos dois primeiros comandos temos adição e multiplicação das matrizes m1e m2 elemento a elemento. No terceiro comando foi utilizado a função t()que faz transposição de matrizes. O produto matricial é feito utilizando %*%.No exemplo temos o produto matricial de m3 com m2. Por último temos oproduto matricial da transposta de m2 com m2. Esta operação é conhecidacomo produto cruzado e no R existe uma função especí�ca para realizá-la.Basta fazer:

> crossprod(m2)[,1] [,2] [,3]

[1,] 66 78 90[2,] 78 93 108[3,] 90 108 126

Podemos destacar também as funções det(), solve() e eigen() que retor-nam, respectivamente, o determinante, a inversa e os auto-valores e autove-tores 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

Page 13: Curso de R

CAPÍTULO 2. TIPOS DE OBJETOS 13

[3,] 4 0 1

> 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 generalização de uma matriz, uma vez que neste tipo de objetopodemos de�nir bem mais do que duas dimensões. No R de�nimos um arrayusando a função array() que tem a seguinte forma:

array(vetor_de_dados, vetor_de_dimensões) 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] [,2] [,3][1,] 10 13 16

Page 14: Curso de R

CAPÍTULO 2. TIPOS DE OBJETOS 14

[2,] 11 14 17[3,] 12 15 18

Neste caso estamos trabalhando com três dimensões. É como se tivéssemosuma matriz formada por duas submatrizes, conforme a estrutura abaixo:

1 4 72 5 83 6 910 13 1611 14 1712 15 18

Vamos agora inserir mais uma dimensão 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][1,] 7 10[2,] 8 11[3,] 9 12

, , 1, 2

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

, , 2, 2

[,1] [,2][1,] 19 2

Page 15: Curso de R

CAPÍTULO 2. TIPOS DE OBJETOS 15

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

Agora temos uma estrutura do tipo:1 4 13 162 5 14 173 6 15 187 10 19 28 11 20 39 12 1 4

A seleção de elementos de um array é semelhante a seleção de elementos deuma 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. Rpossui vários bancos de dados internos, dentre eles temos o banco de dadosUCBAdmissions, que é um array. Para vê-lo basta digitar UCBAdmissionsdesta forma e executar.

Page 16: Curso de R

CAPÍTULO 2. TIPOS DE OBJETOS 16

2.4 Data-frames

Data-frames são objetos que podem armazenar elementos de mais de umtipo, diferentemente de vetores matrizes e arrays, que forçam todos os seuselementos a serem de um mesmo tipo. Sua estrutura é semelhante a de umamatriz, sendo que, aqui todas as colunas são tratadas individualmente. Afunção usada para criar data-frames é data.frame(). Segue um exemplo:

> d1=data.frame(individuo=x7,altura=c(1.65,1.70,1.80));d1individuo altura

1 fulano 1.652 ciclano 1.703 beltrano 1.80

Podemos ver que a primeira coluna de d1 é formada por caracteres e a se-gunda é constituída por valores numéricos. Vale observar que, dentro de cadacoluna de um data-frame continua-se tendo a restrição dos elementos seremdo mesmo tipo. O tratamento individual é apenas entre as colunas. Um dataframe pode ser tratado como uma matriz. Assim a seleção de elementos éfeita da mesma forma. Por exemplo:

> d1[2,2][1] 1.7

> d1[,2][1] 1.65 1.70 1.80

A seleção de uma coluna de um data-frame também é feita utilizando osímbolo $ da seguinte forma:

> d1$altura[1] 1.65 1.70 1.80

Podemos tratar as colunas de um data-frame como se fossem objetos, paraisso basta utilizar a função 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.

Page 17: Curso de R

CAPÍTULO 2. TIPOS DE OBJETOS 17

2.5 Listas

Lista é uma coleção de objetos, ou seja, podemos organizar vários objetos detamanho e/ou tipos diferentes em uma lista. A função usada para criar umalista é 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 três objetos de tipos e tamanhos diferentes.Primeiro temos um vetor numérico, depois temos um caractere e por últimotemos uma matriz. Há duas maneiras de selecionar elementos de uma lista.A primeira é usando colchetes simples [ ]. Neste caso o elemento selecionadoainda será uma lista. A segunda é usando colchetes duplos [[ ]] e neste caso,será retornado o objeto que está na posição 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

Page 18: Curso de R

CAPÍTULO 2. TIPOS DE OBJETOS 18

2.6 Funções

Como já citado anteriormente, no R funções são também objetos. Estaspossuem uma lista de argumentos cujos valores, quando não padronizados,devem ser informados pelo usuário (input). O retorno (output) fornecidopelas funções pode ser um objeto de qualquer classe, ou um valor de qualquernatureza ( caracter, numérico, etc). No R, a maioria das funções são escritascom a própria linguagem R. Para estas, é possível visualizar seu conteúdodigitando o nome da função desejada, por exemplo:

> matrixfunction (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 funções que não são escritas em linguagem R3, como é o caso demin, max, lines etc, não é possível visualizar o conteúdo diretamente. Paraestas, é preciso examinar os arquivos do código fonte do R. Podemos obterajuda sobre qualquer função do R utilizando o símbolo "?". Por exemplo,para obter informações sobre a função matrix, basta digitar ?matrix e ohelp do R será disponibilizado. No R, é possível criar funções (isto será vistomais adiante) e também modi�car as funções escritas em linguagem R jáexistentes. Para isto, basta utilizar o comando: fix(nome_da_função), quecria um novo "script" com o conteúdo da função desejada pronta para edição.

2.7 Importação de dados

Como foi visto nas subseções anteriores, no R a entrada de dados pode serfeita diretamente na forma de vetores, matrizes, etc. No entanto, é possívelobter dados externos provenientes de outros programas. Vejamos então comofazer isso.

3Em geral as funções são escritas em linguagem C

Page 19: Curso de R

CAPÍTULO 2. TIPOS DE OBJETOS 19

2.7.1 A função read.table()

Esta função permite importar dados nos formatos txt (AscII) e csv (separadopor vírgulas). Sua sintaxe é descrita abaixo:

read.table(file, header = FALSE, sep = "",dec=".", ...)

Aqui as reticências foram colocadas para indicar que há mais argumentosnesta função. Os demais argumentos podem ser vistos acessando a ajuda doR usando o comando: ?read.table. Abaixo estão descritos os principaisargumentos da função read.table.

• file: é onde deve ser informado o diretório onde está gravado o ar-quivo, também o nome e a extensão do mesmo (txt ou csv), tudo entreaspas. Aconselha-se ao usuário de�nir um único diretório de trabalhoonde devem estar gravados todos os arquivos a serem importados. Parade�nir um diretório padrão, basta seguir os seguintes passos: no con-sole, vá até a barra de menus e clique sequencialmente em Arquivo eMudar dir... (mudar diretório). Após isso, aparecerá uma caixa dediálogo pedindo para informar o diretório desejado. Se isso for feito,então basta informar o nome do arquivo com a extensão, pois o R jáirá procurá-lo no diretório que foi de�nido. Também podemos ler umarquivo diretamente da internet para isso, ao invés de um diretório,informaremos agora a URL onde está o arquivo.

• header: Se igual a TRUE a primeira linha do banco do dados será as-sumida como rótulo das variáveis. Se igual a FALSE os dados serão lidosa partir da primeira linha.

• sep: Informa ao R qual o separador de campos e valores que está sendousado no arquivo a ser importado. Para arquivos csv é usado ponto evírgula (;).

• dec: Informa ao R qual o separador de decimais que está sendo usadono arquivo. O default do R é dec=. portanto se no banco de dadosa ser importado estiver sendo usado outro separador de decimais, estedeverá ser informado aqui.

Exemplos:

1. Importando um banco de dados no formato txt, com rótulosna primeira linha e com vírgula como separador de decimais.

Page 20: Curso de R

CAPÍTULO 2. TIPOS DE OBJETOS 20

> read.table("E:/Monitoria/Aula de R/consumo diário de proteína.txt",header=T,dec=",")

pais Carne Porco_aves Ovos Leite Peixe Cereais1 Albânia 10.1 1.4 0.5 8.9 0.2 42.32 Áustria 8.9 14.0 4.3 19.9 2.1 28.03 Bélgica_Luxemb. 13.5 9.3 4.1 17.5 4.5 26.6

Aqui vemos o comando usado para a importação e abaixo estão as trêsprimeiras linhas e sete primeiras colunas do banco de dados. Note queaqui estamos informando o caminho que deve ser seguido para encontraro arquivo, se já tivéssemos de�nido um diretório padrão, bastaria fazer:

> read.table("consumo diário de proteína.txt",header=T,dec=",")

Para obter o mesmo resultado.

2. Importando um banco de dados em formato csv, com rótulosna primeira linha, sem casas decimais e com diretório padrãode�nido

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

mec.f vet.f alg.a ana.a est.a1 77 82 67 67 812 63 78 80 70 813 75 73 71 66 81

Em arquivos csv, os campos são separados por ponto e vírgula, por issoa 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")

Page 21: Curso de R

CAPÍTULO 2. TIPOS DE OBJETOS 21

2.7.2 Importando planilhas do Microsoft Excel (Arquivosxls)

É muito comum o uso de planilhas eletrônicas para confecção de banco dedados. Por isso imagina-se que a maioria dos usuários de R possua seusbancos de dados em formato xls. É claro que estes arquivos podem ser con-vertidos em formato txt ou csv (que é uma das opções de formato do Excel) etrazidos para o R usando a função read.table() conforme visto na subseçãoanterior. Porém, pode ser mais cômodo para o usuário trabalhar diretamentecom seus arquivos xls, sem precisar gerar outros. Para importar arquivos emformato xls é preciso, primeiramente, baixar o pacote RODBC. Suponha quedesejamos importar os dados que estão em um arquivo chamado Planilha.xlsna aba Plan1. Então 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 requisição do pacote RODBCusando a função require(). Após isso criamos o objeto xlscon usandoa função odbcConnectExcel, que abre a conexão do R com o Excel. Naterceira linha de comandos estamos criando o objeto dados1, que receberáos dados desejados. Para isso é utilizada a função sqlFecth que recebe comoargumentos o objeto xlscon e o nome da planilha onde estão os dados (nocaso Plan1). Na quarta linha de comandos, usamos a função odbcClose, queé usada para fechar a conexão com o Excel. E por último pedimos para o Rler o conteúdo do objeto dados1 que irá conter o banco de dados desejado.

Page 22: Curso de R

Capítulo 3

Estatística Descritiva

No R, temos um grande número de funções para a análise descritiva de da-dos. Resumos estatísticos, bem como distribuições de frequências, cálculo decorrelações etc, são facilmente obtidos com o uso dos comandos adequados.Além disso, tem-se aqui um vasto ferramental para a representação grá�cade dados. As rotinas grá�cas de R, são um dos principais atrativos dessesoftware, por conta da grande �exibilidade e versatilidade que estas oferecemao usuário. Portanto, antes de prosseguirmos com a análise descritiva dedados iremos apresentar as principais funções grá�cas disponíveis no R, umavez que doravante neste texto, estas serão bastante utilizadas.

3.1 Rotinas Grá�cas

Os comandos para criação de grá�cos podem ser agrupados em três catego-rias:

• Funções grá�cas de alto nível, que criam novos grá�cos na janela grá-�ca, de�nindo os eixos, etiquetas, títulos, etc.

• Funções de baixo nível, que permitem adicionar novas informações agrá�cos já criados, tal como novos dados, linhas, etiquetas.

• Funções grá�cas interativas, que permitem adicionar ou remover intera-tivamente informação aos grá�cos existentes, utilizando um dispositivoapontador, como por exemplo o mouse.

3.1.1 Funções grá�cas de alto nível

Este tipo de função grá�ca gera um grá�co a partir dos dados que são infor-mados como argumento para a função. A principal função dessa categoria

22

Page 23: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 23

é a função plot() cuja descrição é: plot(x,y,...): x e y são vetores dedados e as reticências indica que podem ser incluídos mais parâmetros (vermais adiante os argumentos da função par).

3.1.2 Funções grá�cas de baixo nível

Algumas vezes pode acontecer das funções grá�cas de alto nível não pro-duzirem exatamente o grá�co pretendido. Neste caso, os comandos de baixonível podem ser usados para adicionar alguma informação adicional ( talcomo pontos, linhas ou texto) ao grá�co atual. As funções de baixo nívelmais usadas são descritas abaixo: points(x,y)lines(x,y) Acrescenta pontos ou linhas ao grá�co atual.text(x,y, etiquetas,...): Acrescenta texto aos pontos (x, y). Geral-mente, 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 origema ao grá�co atual. A opção h = y representa uma linha à altura y; a opçãov = x representa uma linha vertical no ponto de abcissa x.

3.1.3 Funções grá�cas interativas

São funções que permitem extrair ou adicionar informação a um grá�co uti-lizando o mouse. A principal delas é a função locator():locator(n,type): Permite ao usuário selecionar regiões do grá�co usandoo botão esquerdo do mouse até que se tenha selecionado um máximo de n(por default, n=512) pontos, ou até pressionar o botão direito para terminara seleção.

3.2 Parâmetros grá�cos. A função par()

A função par() é usada para modi�car, de forma permanente, a lista dosparâmetros grá�cos do dispositivo grá�co atual. A maioria dos parâmetrosda função par() podem ser usadas diretamente como parâmetros adicionaisdas funções grá�cas. Isso permite alterar apenas uma rotina grá�ca especí-�ca (alteração provisória). Vamos então descrever a função par().

A função par possui a seguinte sintaxe:

Page 24: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 24

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

Segue abaixo a descrição de seus argumentos:

• no.readonly: Argumento lógico. Se especi�cado igual a TRUE e nãohouver outros argumentos na função, então será retornado uma listacom os parâmetros grá�cos que poderam ser ajustados em uma chamadasubsequente de "par".

• adj: O valor de adj determina a forma que o texto (Strings) serájusti�cados.

1. 0 para justi�car o texto à esquerda

2. 0,5 para centralizar o texto

3. 1 para justi�car o texto à direita

é permitido também qualquer valor no intervalo [0,1] e em muitos dis-positivos também funcionam valores fora deste intervalo. Para a funçãotext temos a seguinte forma: adj=c(x, y) onde x e y determinam, res-pectivamente, a justi�cação e a direção do texto.

• ann: Argumento lógico. Se especi�cado FALSE então, para funçõesgrá�cas de alto nível, os rótulos dos eixos são retirados.

• ask: Argumento lógico. Se TRUE solicita ao usuário um input antesque uma nova �gura seja plotada.

• bg: Especi�ca a cor a ser usada no fundo dos grá�cos. Ver mais adiantea especi�cação das cores.

• bty: Uma cadeia de caracteres que determina o tipo de caixa que serátraçada ao redor dos grá�cos. Se for especi�cado um dos seguintescaracteres (entre aspas): "o", "l", "7", "c", "u", "]", a caixa resultantese assemelha-rá a forma da correspondente letra maiúscula. O valor"n"(entre aspas) suprime a caixa.

• cex: Valor numérico que de�ne a scala do texto e dos símbolos grá�cosem relação ao valor padrão.

• cex.axis: Especi�ca a ampliação a ser utilizada para a notação sobreos eixos em relação ao valor atual.

• cex.lab: Especi�ca a ampliação a ser usada nos títulos dos eixos x ey em relação ao valor atual.

Page 25: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 25

• cex.main: Especi�ca a ampliação a ser usada nos títulos principais dosgrá�cos em relação ao valor atual.

• cex.sub: Especi�ca a ampliação a ser usada nos subtítulos em relaçãoao valor atual.

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

• col: Para especi�car as cores dos símbolos a serem plotados. Ascores podem ser especi�cadas das seguintes formas: con uma cadeiade caracteres dando o nome da cor (em inglês) entre aspas, por exem-plo "blue". Uma lista de possíveis cores pode ser obtida com a funçãocolors. Outra maneira de especi�car cores é em termos de compo-nentes RGB com uma cadeia da forma "#RRGGBB"onde cada umdos pares RR, GG, BB consiste em dígitos hexadecimais com valores nafaixa 00 a FF. As cores também podem ser especi�cadas por um índicede uma pequena tabela de cores que é compatível com S. Também asfunções rgb, hsv, gray e rainbow proporcionam formas adicionaisde gerar cores.

• col.axis: Usado para especi�car a cor das notações sobre os eixos

• col.lab: Usado para especi�car a cor a ser usada nos títulos dos eixosX"e "Y".

• col.main: Cor a ser usada nos títulos principais dos grá�cos.

• col.sub: Cor a ser usada nos subtítulos.

• cra: R.O.; Tamanho do caractere (largura, altura) em "pixels".

• crt: Um valor numérico para especi�car em graus como devem serrotacionados os caracteres individuais. Devem ser usados apenas val-ores múltiplos de 90.

• csi: R.O.; Especi�ca a altura em polegadas dos caracteres.

• cxy: R.O.; Retorna um vetor do tipo (largura, altura) com o tamanhopadrão dos caracteres do grá�co.

• din: R.O.; Dimensões do dispositivo em polegadas.

• err: (Não implementado; R não avisa quando pontos fora da regiãográ�ca não são plotados.) Para o grau de relatório de erro desejado.

Page 26: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 26

• fg: Especi�ca a cor a ser usada no primeiro plano dos grá�cos. Esta é acor padrão usada em objetos como eixos e caixas ao redor dos grá�cos.

• fig: Um vetor numérico da forma c(x1, x2, y1, y2) que dá as coorde-nadas da região da �gura na região de apresentação do dispositivo.

• fin: Um vetor numérico da forma c(x, y) que especi�ca o tamanho daregião da �gura em polegadas.

• font: Um número inteiro que especi�ca a fonte a ser usada no texto,de modo que:

- 1 corresponde a texto simples

- 2 corresponde a texto em negrito

- 3 corresponde a texto em itálico e

- 4 corresponde a texto em itálico-negrito

• font.axis: Usado para especi�car o tipo de letra a ser utilizada nasnotações sobre os eixos.

• font.lab: Usado para especi�car o tipo de letra a ser usada nos títulosdos eixos.

• font.main: Tipo de letra a ser usada nos títulos principais dos grá�cos.

• font.sub: Especi�ca o tipo de fonte a ser usada nos subtítulos dosgrá�cos.

• gamma: Para a correção gamma, ver hsv(...,gamma) mas adiante.

• lab: Um vetor numérico da forma c(x, y, len), o qual modi�ca a formade notação dos eixos. Os valores de x e y especi�cam o número aprox-imado de marcas de escala nos eixos x e y, respectivamente, len es-peci�ca o tamanho das notações sobre os eixos, no entanto, atualmenteainda não está implementado. O valor padrão de lab é c(5, 5, 7).

• las: Um número em {0,1,2,3} com o qual se especi�ca o estilo danotação dos eixos:

- 0: sempre paralelo ao eixo (valor padrão);

- 1: sempre horizontal;

- 2: sempre perpendicular ao eixo;

Page 27: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 27

- 3: sempre vertical. Note que a rotação de cadeias de caracteres oude caracteres individuais ( via par(srt=...)) não afeta os rótulosdos eixos.

• lty: Usado para especi�car o tipo de linha. Os tipos são especi�cadoscom um número inteiro

• lwd: Um número inteiro para determinar a largura da linha. o valorpadrão é 1.

• mai: Um vetor numérico da forma c(abaixo, esquerda, acima, direita)que dá os tamanhos das margens especi�cados em polegadas.

• mar: Um vetor numérico da forma c(abaixo, esquerda, acima, dire-ita) a partir do qual especi�camos o número de linhas entre as mar-gens do dispositivo grá�co e as margens da �gura. O valor padrão éc(5,4,4,2)+0.1.

• mex: Possui a mesma �nalidade do argumento mar (expandir ou con-trair a �gura) a diferença e que ao invés de um vetor, usa-se um únicovalor numérico. Para um bom funcionamento deste argumento usevalores no intervalo (0, 3].

• mfcol, mfrow: Um vetor da forma c(nl, nc). As �guras seguintesapareceram em um único dispositivo grá�co como se fossem elementosde uma matriz nl × nc, ordenadas por coluna (se for utilizado mfcol)ou por linha (se for utilizado mfrow). Alternativas a este argumentosão as funções layout(...) e split.screen(...).

• mfg: Um vetor numérico da forma c(i, j) onde i e j indicam qual�gura (considerando cada �gura como um elemento de uma matriz) seráplotada em continuação a última plotagem. A matriz de �guras deve serpreviamente ajustada por par(mfcol=c(...)) ou par(mfrow=c(...)).

• mgp:Um vetor da forma c(t, n, e) especi�cando a distância ( em unidades"mex") dos títulos dos eixos, notações dos eixos e eixos, respectiva-mente, à margem da �gura. O valor padrão é c(3, 1, 0).

• mkh: Especi�ca a altura em polegadas dos símbolos a serem plotadosquando o valor de pch é um inteiro. Atualmente este é completamenteignorado.

• new: Argumento lógico. O valor padrão é FALSE, se for especi�cadocomo TRUE o comando grá�co de alto nível seguinte não limpará ajanela atual, sobrepondo a nova �gura à �gura anterior.

Page 28: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 28

• oma: Um vetor da forma c(abaixo, esquerda, acima, direita) que dá otamanho das margens exteriores em linhas de texto.

• omd: Um vetor da forma c(x1,x2,y1,y2) usado para especi�car outrasmargens a região interna da �gura em NDC (normalized device coor-dinates), isto é, como fração (em [0,1]) da região do dispositivo grá�co.

• omi: Um vetor da forma c(abaixo, esquerda, acima, direita)para es-peci�car o tamanho das margens exteriores em polegadas.

• pch: Pode ser um número inteiro ou um caractere a ser usado comopadrão em grá�cos de pontos. Possíveis valores de pch são especi�cadosno documento de ajuda da função points.

• pin: Especi�ca as dimensões do grá�co atual (largura, altura), empolegadas.

• plt: Um vetor da forma c(x1, x2, y1, y2) que dá as coordenadas daregião grá�ca como fração da região da �gura atual.

• ps: Um inteiro que determina o tamanho das notações e títulos doseixos.

• pty: Um caractere entre aspas para especi�car o tipo de região grá�caa ser usada:

- "S"gera uma região grá�ca quadrada;

- "m"gera uma região grá�ca máxima.

• smo: (não-implementada) Rotação em graus de uma cadeia de cara-cteres.

• tck: Usado para especi�car a longitude dos marcadores de escala comouma fração do menor valor entre a largura e altura da região grá�ca.Se tck=1, serão inseridas linhas de grade no grá�co. O valor padrão étck=NA e este é equivalente a tcl=-0.5.

• tcl: A longitude dos marcadores de escala como uma fração da alturade uma linha de texto. O valor padrão é −0.5.

• type: Um caractere entre aspas que determina o tipo de grá�co a serplotado. Possíveis valores deste argumento estão descritos no docu-mento de ajuda da função plot.

Page 29: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 29

• usr: Um vetor da forma c(x1, x2, y1, y2) que dá os extremos das co-ordenadas da região grá�ca. Quando uma escala logarítmica estiversendo usada, então 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 coordenadasdos marcadores de escala e o número de intervalos entre estes no eixox.

• xaxs: O estilo de cálculo de intervalo de eixo para o eixo x. Seuspossíveis (entre aspas) são:

- "r", regular,

Observações:

1. Argumentos R.O (Read-only) são 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 descrição de um conjunto de dados é fundamental sabermosquais são os tipos de variáveis disponíveis. As variáveis são classi�cadas doseguinte modo:

Page 30: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 30

• quantitativas

- discretas

- contínuas

• qualitativas

- ordinais

- nominais

Em nosso estudo vamos considerar os dados da Tabela 1, que são oriundosde uma pesquisa antropométrica realizada com mulheres acima de 60 anos(Pinheiro et.al, 2008).Pela Tabela 1 podemos ver que dispomos de variáveis qualitativas, comoé o caso de "Categoria", e também de variáveis quantitativas, é o caso de"Idade". Caso se queira entrar com os dados diretamente no R, o objetoadequado ao armazenamento é um data-frame. O usuário pode digitar osdados usando o editor do R, que é semelhante a uma planilha eletrônica.Segue então os comandos necessários:

PA=edit(data.frame())

Aqui estamos de�nido o objeto PA que é o data-frame contendo os dados.Após digitado, se houver necessidade de alguma alteração nos dados issopode ser feito usando a função fix() do seguinte modo:

fix(PA)

Precisamos também do comando attach(PA) para trabalharmos com as co-lunas do objeto como variáveis. Vamos examinar então as seis primeiraslinhas 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 Sedentária 69 63.0 152 27.3 sobrepeso 89 104 0.86 GR

3 Sedentária 61 70.1 158 28.1 sobrepeso 106 123 0.86 GR

4 Sedentária 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 Sedentária 71 77.0 160 30.1 sobrepeso 125 132 0.95 GR

Note que trocamos os nomes das variáveis, isso porque espaços não são cara-cteres válidos para nomear objetos, e além disso, um objeto com o nome deAltura(cm), por exemplo, seria entendido como função. As variáveis qualita-tivas devem ser do tipo fator. Devemos então rede�nir estas variáveis usandoa função factor(). Por exemplo, para a variável Categoria temos:

Page 31: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 31

Tabela 3.1: Pesquisa antropométrica realizada em mulheres idosas acima de60 anos que receberam atendimento no Hospital do Idoso em Dezembro de2008

Categoria Idade Peso Altura IMC Classe Cintura Quadril RCQ Classe RCQ(Kg) (cm) IMC (cm) (cm) KCQ

Ativa 61 58,2 154,0 24,5 normal 87 109 0,80 MRSedentária 69 63,0 152,0 27,3 sobrepeso 89 104 0,86 GRSedentária 61 70,1 158,0 28,1 sobrepeso 106 123 0,86 GRSedentária 71 73,2 156,0 30,1 sobrepeso 110 122 0,90 GR

Ativa 63 58,6 152,0 25,4 sobrepeso 99 121 0,82 MRSedentária 71 77,0 160,0 30,1 sobrepeso 125 132 0,95 GRSedentária 72 76,2 165,0 28 sobrepeso 115 125 0,92 GRSedentária 68 59,8 160,0 23,4 normal 85 103 0,83 MR

Ativa 66 64,3 155,0 26,8 sobrepeso 100 120 0,83 MRSedentária 69 52,1 151,0 22,8 normal 74 83 0,89 GRSedentária 72 62,0 156,0 25,5 sobrepeso 90 111 0,81 MRSedentária 67 52,1 151,0 22,8 normal 76 90 0,84 MRSedentária 63 58,0 157,0 23,5 normal 80 102 0,78 MRSedentária 66 55,0 154,0 23,2 normal 78 96 0,81 MRSedentária 63 50,1 157,0 20,3 normal 72 81 0,89 GR

Ativa 63 57,9 160,0 22,6 normal 78 90 0,87 GRAtiva 67 56,2 152,0 24,3 normal 76 95 0,80 MRAtiva 71 68,6 159,0 27,1 sobrepeso 106 117 0,91 GRAtiva 63 51,0 150,0 22,7 normal 71 83 0,86 GRAtiva 60 53,4 150,0 23,7 normal 76 89 0,85 MRAtiva 69 61,3 154,0 25,8 sobrepeso 89 106 0,84 MRAtiva 64 53,2 158,0 21,3 normal 73 86 0,85 MRAtiva 63 54,6 150,0 24,3 normal 80 108 0,74 PRAtiva 66 56,2 152,0 24,3 normal 84 110 0,76 PRAtiva 71 60,3 156,0 24,8 normal 82 99 0,83 MRAtiva 64 54,7 158,0 21,9 normal 76 95 0,80 MRAtiva 70 60,0 160,0 23,4 normal 81 104 0,78 MRAtiva 63 51,3 154,0 21,6 normal 76 89 0,85 MRAtiva 66 50,0 153,0 21,4 normal 76 87 0,87 GRAtiva 64 49,8 150,0 22,1 normal 72 106 0,68 PRAtiva 69 55,2 156,0 22,7 normal 81 98 0,83 MRAtiva 69 58,2 160,0 22,7 normal 78 90 0,87 GR

Sedentária 64 51,6 156,5 21,1 normal 76 87 0,87 GRSedentária 63 62,7 153,0 26,8 sobrepeso 90 103 0,87 GRSedentária 72 75,6 165,0 27,8 sobrepeso 98 110 0,89 GRSedentária 73 65,2 154,0 27,5 sobrepeso 96 110 0,87 GRSedentária 68 61,8 152,0 26,7 sobrepeso 82 93 0,88 GRSedentária 71 64,3 150,0 28,6 sobrepeso 78 89 0,88 GRSedentária 72 59,2 153,0 25,3 sobrepeso 73 82 0,89 GR

Ativa 69 63,4 163,0 23,9 normal 93 120 0,78 MRSedentária 68 66,0 160,0 25,8 sobrepeso 90 117 0,77 PRSedentária 68 61,7 158,0 24,7 normal 90 116 0,78 MRSedentária 73 68,2 155,0 28,4 sobrepeso 107 120 0,89 GRSedentária 79 60,1 160,0 23,5 normal 92 110 0,84 MR

Page 32: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 32

> Categoria=factor(Categoria)> Categoria[1:10][1] Ativa Sedentária Sedentária Sedentária Ativa Sedentária[7] Sedentária Sedentária Ativa Sedentária

Levels: Ativa Sedentária

O mesmo deve ser feito para as demais variáveis qualitativas. Poderíamostambém entrar com estes dados através da importação de um arquivo ex-terno, como foi visto na subseção 2.2. Neste caso, não há necessidade derede�nir as variáveis qualitativas como fator, pois as funções de importaçãode dados já o fazem automaticamente, desde que os valores destas sejamcaracteres.

3.3.1 Descrição Univariada

Consiste em classi�car, apresentar (através de grá�cos e/ou tabelas) e resumir(através de medidas) cada uma das variáveis em estudo de forma individual.Vejamos agora as principais representações e medidas para cada tipo de va-riável.

Variável qualitativa

Vamos escolher a variável Categoria para ilustração. Podemos obter umatabela de frequências simples e relativas, um grá�co de setores ou de colunas ea "moda"como medida resumo. As frequências simples e relativas são obtidasda seguinte forma:

> Cat.freq=table(Categoria)> Cat.freqCategoria

Ativa Sedentária22 23

>Cat.prop=prop.table(Cat.freq)>Cat.propCategoria

Ativa Sedentária0.4888889 0.5111111

Se quisermos o percentual basta fazer:

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

Page 33: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 33

CategoriaAtiva Sedentária

48.88889 51.11111

Uma das maneiras de se obter a moda é utilizando a função Mode() do pacote"prettyR".

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

Neste mesmo pacote há uma função que nos permite obter todas as infor-mações acima com um único comando. Vejamos:

> describe.factor(Categoria)Factor

Ativa Sedentáriax 22 23Percent 48.89 51.11mode = Sedentária Valid n = 45

Onde os valores de x são as frequências simples, Percent retorna os per-centuais e mode a moda. Vamos obter agora um grá�co de barras e um emsetores.

> barplot(Cat.freq)

> barplot(Cat.freq,col="blue",space=0.8,ylab="número de mulheres",ylim=c(0,25))

O resultado é exibido nas �guras 2 e 3. Note que no segundo comandotrocamos a cor das colunas, aumentamos o espaço entre estas, adicionamosum título ao eixo y e aumentamos o seu limite. Vamos agora gerar um grá�code setores.

> pie(Cat.freq)> text(locator(2),c("48,89%","51,11%"),font=2)

Veja que usamos a função de baixo nível text() combinada com a funçãointerativa locator() para poder inserir os percentuais em cada setor do grá-�co.

Page 34: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 34

Figura 3.1: Grá�co de barraspara a variável Categoria compadrão do R

Figura 3.2: Grá�co de barraspara a variável Categoria comalguns ajustes

Variável quantitativa discreta

Para este tipo de variáveis temos uma maior variedade de representaçõesgrá�cas e também de medidas resumo. Vamos tomar então a variável Idadecomo exemplo. Podemos, da mesma forma que �zemos para as variáveisqualitativas, obter tabelas de frequências absoluta e relativas.

> Ida.freq=table(Idade)> Ida.freqIdade60 61 63 64 66 67 68 69 70 71 72 73 792 2 8 4 4 2 4 6 1 5 4 2 1

> Ida.prop=prop.table(Ida.freq)> Ida.propIdade

60 61 63 64 66 670.04444444 0.04444444 0.17777778 0.08888889 0.08888889 0.04444444

68 69 70 71 72 730.08888889 0.13333333 0.02222222 0.11111111 0.08888889 0.04444444

790.02222222> Ida.perc=100*Ida.prop> Ida.percIdade

Page 35: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 35

Figura 3.3: Grá�co em setores para a variável Categoria

60 61 63 64 66 67 684.444444 4.444444 17.777778 8.888889 8.888889 4.444444 8.888889

69 70 71 72 73 7913.333333 2.222222 11.111111 8.888889 4.444444 2.222222

Podemos obter várias medidas resumo para esta variável, abaixo segue algu-mas delas. Para os coe�cientes de assimetria e curtose é necessário instalaro pacote agricolae:

> #Média> 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

Page 36: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 36

> Ida.quartis=quantile(Idade,probs = seq(0, 1, 0.25));Ida.quartis0% 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> #Variância> Ida.var=var(Idade);Ida.var[1] 17.48182> #Desvio-padrão> Ida.dp=sd(Idade);Ida.dp[1] 4.181126> #Distância interquartil> Ida.dq=Ida.quartis[4]-Ida.quartis[2];Ida.dq75%

8> #Desvio médio> Ida.dm=sum(abs(Idade-mean(Idade)))/length(Idade);Ida.dm[1] 3.484444> #Coeficiente de variação> Ida.cv=Ida.dp/Ida.media;Ida.cv[1] 0.06221914> #Assimetria> require(agricolae)> Ida.ass=skewness(Idade);Ida.ass[1] 0.2782522> # Distribuição assimétrica à direita> #Curtose> Ida.cur=kurtosis(Idade);Ida.cur[1] -0.1312109> #Distribuição leptocúrtica

As frequências absolutas de uma variável discreta podem ser representadagra�camente da seguinte forma:

>plot(Ida.freq,ylab="número de mulheres")

Uma outra representação é através de um grá�co boxplot :

>boxplot(Idade,ylab="Idade")

Page 37: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 37

Podemos obter algumas medidas de uma só vez utilizando a função summary().

> summary(Idade)Min. 1st Qu. Median Mean 3rd Qu. Max.60.0 63.0 68.0 67.2 71.0 79.0

Figura 3.4: Grá�co de frequências absolutas da variável Idade

Figura 3.5: Grá�co Boxplot da variável Idade

Page 38: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 38

Variável quantitativa contínua

Para obtermos representações semelhantes às anteriores neste tipo de vari-ável, devemos inicialmente dividi-las em classes de tamanhos iguais. Destaforma, ao invés de termos uma tabela de frequências simples ou relativaspara cada valor observado, teremos as frequências para cada classe. No R,podemos de�nir classes em uma variável usando a função cut(). Vamos en-tão, primeiramente, examinar esta função:Sintaxe:cut(x,breaks,...), onde:x é a variável que se deseja separar e breaks é um vetor contendo os pon-tos de cortes. Esses pontos de cortes irão corresponder aos limites inferiore superior de cada classe. Uma maneira simples de de�nir o vetor breaks éutilizando a função seq(), por exemplo, para a variável 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 variável Peso em 8 partes, vejamos como �caentão a tabela de frequências simples.

> 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 Percentual1 (49.8,53.7] 9 0.20454545 20.4545452 (53.7,57.6] 6 0.13636364 13.6363643 (57.6,61.5] 12 0.27272727 27.2727274 (61.5,65.3] 9 0.20454545 20.4545455 (65.3,69.2] 3 0.06818182 6.8181826 (69.2,73.1] 1 0.02272727 2.2727277 (73.1,77] 4 0.09090909 9.090909

Veja que aqui já concatenamos em uma mesma tabela as frequências simples,relativa e os percentuais. As medidas resumo não diferem daquelas mostradaspara o caso discreto. Vejamos então:

> #Média> peso.media=mean(Peso);peso.media

Page 39: Curso de R

CAPÍTULO 3. ESTATÍSTICA 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> #Variância> peso.var=var(Peso);peso.var[1] 51.15674> #Desvio-padrão> peso.dp=sd(Peso);peso.dp[1] 7.152394> #Distância interquartil> peso.dq=peso.quartis[4]-peso.quartis[2];peso.dq75%8.7> #Desvio médio> peso.dm=sum(abs(Peso-mean(Peso)))/length(Peso);peso.dm[1] 5.563852> #Coeficiente de variação> peso.cv=peso.dp/peso.media;peso.cv[1] 0.1192242> #Assimetria> require(agricolae)> peso.ass=skewness(Peso);peso.ass[1] 0.7067071> # Distribuição assimétrica à direita

Page 40: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 40

> #Curtose> peso.cur=kurtosis(Peso);peso.cur[1] 0.05477938> #Distribuição leptocúrtica> summary(Peso)

Min. 1st Qu. Median Mean 3rd Qu. Max.49.80 54.70 59.20 59.99 63.40 77.00

A representação grá�ca é feita especi�camente, através de histogramas que éum grá�co de colunas contíguas, com bases proporcionais aos intervalos dasclasses e a área de cada retângulo proporcional à respectiva frequência. NoR, usamos a função hist(), para gerar um histograma. Vejamos então orelativo à variável Peso.

> hist(Peso,ylab="Frequência",main="")

Figura 3.6: Histograma da variável Peso

Outra forma de representarmos variáveis contínuas é através do diagramaRamos-e-Folhas. A função utilizada é stem(). Por exemplo, um Ramo-e-Folha para a variável IMC é obtido da seguinte forma:

Page 41: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 41

> stem(IMC)

The decimal point is at the |

20 | 321 | 1346922 | 167778823 | 2445579924 | 33357825 | 3458826 | 78827 | 135828 | 014629 |30 | 11

3.3.2 Descrição Bivariada

Frequentemente estamos interessados em analisar o comportamento conjuntode duas ou mais variáveis, no intuito de encontrar possíveis relações entreestas. Assim como foi visto no caso univariado, as técnicas de análise de-penderão dos tipos de variáveis envolvidas. Considerando duas variáveis,podemos ter as seguintes situações:

(a) as duas variáveis são qualitativas;

(b) as duas variáveis são quantitativas; e

(c) uma variável é qualitativa e outra é quantitativa.

Qualitativa vs Qualitativa

Neste caso a representação tabular será feita por meio de uma tabela dedupla entrada onde cada elemento desta representa a frequência observadadas realizações simultâneas das duas variáveis em estudo. Vamos tomar comoexemplo as variáveis Categoria e Classe IMC. Como vimos no caso univariadoa tabela de frequências absolutas é dada pela função table():

> cat.cimc.tab=table(Categoria,Classe_IMC);cat.cimc.tabClasse_IMC

Categoria normal sobrepesoAtiva 18 4Sedentária 9 14

Page 42: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 42

No caso de frequências relativas, existem três possibilidades de expressarmosa proporção de cada casela:

(a) em relação ao total geral;

(b) em relação ao total de cada linha;

(c) ou em relação ao total de cada coluna.

Vejamos então como obter essas três representações:

> #Prop. em relação ao total geral>> cat.cimc.tab/sum(cat.cimc.tab)

Classe_IMCCategoria normal sobrepeso

Ativa 0.40000000 0.08888889Sedentária 0.20000000 0.31111111

>> #Prop. em relação ao total de cada linha>> prop.table(cat.cimc.tab,mar=1)

Classe_IMCCategoria normal sobrepeso

Ativa 0.8181818 0.1818182Sedentária 0.3913043 0.6086957

>> #Prop. em relação ao total de cada coluna>> prop.table(cat.cimc.tab,mar=2)

Classe_IMCCategoria normal sobrepeso

Ativa 0.6666667 0.2222222Sedentária 0.3333333 0.7777778

Primeiro dividimos cada elemento da tabela pelo total geral, obtendo assim aprimeira representação. Note que para obtermos as proporções com relação àslinhas e colunas, foi utilizado o argumento mar=1 e mar=2, respectivamente.A representação grá�ca pode ser feita através de grá�cos de barras comoilustra a �gura 7.

> barplot(cat.cimc.tab,legend=T)> barplot(cat.cimc.tab,legend=T,beside=T)

Page 43: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 43

Figura 3.7: Grá�cos do cruzamento entre as variáveis Categoria e Classe IMC

A associação entre duas variáveis qualitativas é avaliada através da estatísticachi-quadrado dada por:

χ2 =k∑i=1

(oi − ei)2

ei

onde oi e ei são, respectivamente, frequências observadas e esperadas nas kposições da tabela de dupla entrada. Outras medidas derivadas desta são ocoe�ciente de contingência C e o coe�ciente de contingência modi�cado T :

C =

√χ2

χ2 + n, T =

C

[(t− 1)/t]2

onde n é o número de observações e t é o mínimo entre linhas e colunas databela. Vamos ver então como obter estas medidas.

> #Teste de associação> summary(cat.cimc.tab)Number of cases in table: 45Number of factors: 2Test 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"

Page 44: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 44

> #Estatística qui-quadrado> est.chi=summary(cat.cimc.tab)$stat;est.chi[1] 8.53755> #Coeficiente de contingência> n=summary(cat.cimc.tab)$n.ca;n[1] 45> C=sqrt(est.chi/(est.chi+n));C[1] 0.399335> #Coeficiente de contigência modificado> t=min(dim(cat.cimc.tab));t[1] 2> T=C/((t-1)/t)^2;T[1] 1.59734

Quantitativa vs Qualitativa

Nesta situação é comum analisarmos como se comporta a variável quantita-tiva em cada nível da variável qualitativa. Vamos tomar então as variáveisRCQ e Classe_RCQ para exempli�car este conceito. Inicialmente iremos obteruma tabela de frequências simples, para isso vamos agrupar a variável RCQem três classes:

> #Separando a variável RCQ> RCQ.cl=cut(RCQ,seq(min(RCQ),max(RCQ),l=4))> #Obtendo a tabela de frequência simples> RCQ.CRCQ.tb=table(Classe_RCQ,RCQ.cl);RCQ.CRCQ.tb

RCQ.clClasse_RCQ (0.68,0.77] (0.77,0.86] (0.86,0.95]

GR 0 3 17MR 0 20 0PR 4 0 0

As tabelas de frequências relativas são 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.38636364MR 0.00000000 0.45454545 0.00000000PR 0.09090909 0.00000000 0.00000000

Page 45: Curso de R

CAPÍTULO 3. ESTATÍSTICA 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.85MR 0.00 1.00 0.00RCQ.cl

Classe_RCQ (0.68,0.77] (0.77,0.86] (0.86,0.95]GR 0.0000000 0.1304348 1.0000000MR 0.0000000 0.8695652 0.0000000PR 1.0000000 0.0000000 0.0000000

Uma possível representação grá�ca deste cruzamento seria um boxplot ondeno eixo y teremos a variável quantitativa, no caso, RCQ e no eixo x os níveisda variável 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 variável quantitativa em cada nível da variável qualitativa.No R, isso pode ser feito utilizando a função tapply():

> #Médias> tapply(RCQ,Classe_RCQ,mean)

GR MR PR0.8845 0.8175 0.7380

Page 46: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 46

> #Medianas> tapply(RCQ,Classe_RCQ,median)

GR MR PR0.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

$MR0% 25% 50% 75% 100%

0.780 0.800 0.825 0.840 0.850

$PR0% 25% 50% 75% 100%

0.68 0.74 0.74 0.76 0.77

> #Variâncias> tapply(RCQ,Classe_RCQ,var)

GR MR PR0.0005102632 0.0006302632 0.0012200000> #Desvios-padrão> tapply(RCQ,Classe_RCQ,sd)

GR MR PR0.02258901 0.02510504 0.03492850

Quantitativa vs Quantitativa

Quando as variáveis envolvidas são ambas do tipo quantitativo, procedemosde forma similar ao que havia sendo feito. Para obter uma tabela de fre-quências, por exemplo, devemos agrupar as variáveis em classes. Vejamosum exemplo utilizando as variáveis Peso e IMC. Vamos inicialmente agruparcada 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))> #Frequências simples> pe.imc.tb=table(peso.cl,IMC.cl);pe.imc.tb

IMC.cl

Page 47: Curso de R

CAPÍTULO 3. ESTATÍSTICA 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 frequências relativas são obtidas da mesma que obtivemospara os casos anteriores. Recomenda-se ao leitor fazê-lo como exercício. Umdispositivo muito útil para representar e se veri�car a associação entre duasvariáveis quantitativas é o grá�co de dispersão. Vejamos um exemplo:

> plot(Peso,IMC)

Figura 3.9: Grá�co de dispersão Peso vs IMC

Para quanti�car a correlação entre duas variáveis quantitativas devemos usaralgum coe�ciente de correlação. A função cor() oferece três opções de coe-�cientes, tendo como padrão o coe�ciente de correlação linear de Pearson.

> #Coeficiente de correlação de Pearson> cor(Peso,IMC)[1] 0.8983048> #Coeficiente de correlação de Kendall> cor(Peso,IMC,method="kendall")[1] 0.7414632> #Coeficiente de correlação de Spearman> cor(Peso,IMC,method="spearman")[1] 0.9019382

Page 48: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 48

3.3.3 Alguns grá�cos mais elaborados

Em complemento ao que foi feito nas subseções anteriores, exploraremos maisum pouco os recursos grá�cos. Iremos acrescentar mais algumas informaçõesaos grá�cos mostrados anteriormente.

Grá�co de setores com sombra: Vamos gerar o mesmo grá�co de setoresfeito anteriormente, agora com um efeito de sombra.

> #Definir a função pizza.sombra> pizza.sombra=function (...) {+ pie(...)+ #criando a região 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 à variável Categoria> pizza.sombra(Cat.freq)

Grá�co de dispersão com boxplots marginais

Neste grá�co, além de visualizar o comportamento conjunto das variáveis,visualizamos também o comportamento individual através dos boxplots.

> op=par()> #Criar a divisão 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 gráfico de dispersão> plot(Peso~IMC,+ xlab='', ylab='',+ las = 1)

Page 49: Curso de R

CAPÍTULO 3. ESTATÍSTICA 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)

Grá�co de dispersão com histogramas marginais

Neste grá�co ao invés 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 divisão 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 gráfico de dispersão>> plot(Peso,IMC)>> #Definir as margens da segunda figura>> par(mar=c(0,4,1,1))>> #Plotar o histograma marginal no eixo x

Page 50: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 50

> 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: Grá�co em setores com efeito de sombra

Page 51: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 51

Figura 3.11: Grá�co de dispersão com boxplots marginais

Figura 3.12: Grá�co de dispersão com histogramas marginais

Page 52: Curso de R

CAPÍTULO 3. ESTATÍSTICA DESCRITIVA 52

Note que, nos histogramas marginais acrescentamos linhas como preenchi-mento. Isso foi feito utilizando o argumento density que de�ne o número delinhas a serem plotadas e angle, que de�ne o anglo de inclinação das linhas.

Page 53: Curso de R

Capítulo 4

Probabilidade e Inferência

O objetivo deste capítulo é mostrar de que forma podemos utilizar o R paratrabalhar com distribuições de probabilidade, gerar amostras aleatórias, es-timar parâmetros de uma população, etc. É conveniente, antes de iniciarmoseste estudo, aprendermos como de�nir nossas próprias funções. Note que, nasubseção 3.3.3 já utilizamos este recurso. Falaremos também sobre ordens decontrole, já que estas são habitualmente usadas na construção de funções.

4.1 Controle de �uxo e de�nição de funções

Assim como em qualquer outra linguagem de programação, a linguagem Rpossui várias instruções destinadas a alterar a sequência normal de execuçãodos comandos. Vejamos então algumas.

4.1.1 Execução condicional

Instruções condicionais permitem ao usuário executar várias alternativas de-pendendo se uma condição for satisfeita. A forma da instrução condicionalé a seguinte:

if (expres_1) expres_2 else expres_3

onde o resultado de expres_1 deve ser um valor lógico; se este é verdadeiro(T ouTRUE), é calculada a expressão expres_2; caso contrário, e se a instruçãocontém a expressão else, será executada a expressão expres_3. Essas ex-pressões geralmente são construídas com o uso de operadores. Abaixo pode-mos ver a descrição dos operadores básicos da linguagem R.

53

Page 54: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 54

1. Operadores Lógicos:

• ! : Indica negação

• & e && : Indica o argumento lógico (AND ou E). O primeiro seaplica a todos os elementos de um vetor, e o segundo aplica-se avetores de comprimento unitário.

• | e || : Indica o argumento lógico (OR ou OU).

2. Operadores Relacionais:

• < : Menor

• > : Maior

• <= : Menor igual

• >= : Maior igual

• == : Igual

• != : Diferente

3. Operadores Aritméticos

• + : Soma

• - : Diferença

• * : Produto

• / : Divisão

• x%%y : Indica o resto da divisão de x por y

• x %/% y : Indica a divisão inteira de x por y

• %*% : Multiplicação matricial

• %x% : Produto de Kronecker

4.1.2 Ciclos

Ciclos no R são implementados com as ordens for(), repeat() e while().Os ciclos do tipo for são da seguinte forma:

> for (nome in expres_1) expres_2

onde nome representa uma variável de controle das interações; expres_1 éum vetor (geralmente uma sequência do tipo 1 : n, em que n é um númeronatural), e expres_2 é uma expressão, frequentemente agrupada, em cujas

Page 55: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 55

sub-expressões pode aparecer a variável de controle; esta expressão é cal-culada repetidamente à medida que a variável de controle nome percorre osvalores 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 deseus elementos e criando assim o vetor c. Outras estruturas de ciclos são:> repeat expressãoe> while (condição) expressão

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 De�nindo funções

Como já referido neste texto, R permite a criação de objetos do tipo function,que são funções que permitem generalizar e encapsular procedimentos, o quetorna mais simples e prática a posterior utilização destes. Desta forma, alinguagem R ganha considerável poder e elegância. Uma função é de�nidacom a seguinte declaração:

> Nome_da_Função=function(arg1, arg2, ...) expressão

A nova função geralmente é chamada da seguinte forma:

Page 56: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 56

Nome_da_Função=function(arg1, arg2, ...)

e pode ser utilizada em qualquer altura do código. Vamos ilustrar o uso desterecurso através de um exemplo simples. Neste criamos a função fatorialque retorna o fatorial de um número 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 Distribuições de Probabilidade

O R dispõe de uma série de funcionalidades que permitem operações comdistribuições de probabilidade. Aqui vamos resumir algumas delas, com oobjetivo de ilustrar o uso destas funções. As operações básicas com dis-tribuições de probabilidade são: cálculo de densidade de probabilidade, cál-culo de probabilidade acumulada, obtenção de quantis e geração de númerosaleatórios. No R estas operações são representadas, respectivamente, pelasletras: d, p, q e r. Para as funções precedidas de d e p o primeiro argumentoé sempre um quantil. Nas funções precedidas de q o primeiro argumento dizrespeito a uma probabilidade. E nos comandos precedidos de r o primeiroargumento especi�ca o tamanho da amostra aleatória a ser gerada. Porexemplo, para gerar números aleatórios da distribuição exponencial devemosusar a função rexp(), ou seja, devemos escrever o pre�xo da distribuiçãoprecedido da letra que indica a operação desejada. O usuário pode consultara ajuda do R para ver os pre�xos de várias distribuições de probabilidade.

Page 57: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 57

4.2.1 Distribuição Normal

A distribuição normal é referenciada no R pelo pre�xo norm. Os argumen-tos padrão das funções referentes à distribuição normal assumem a normalpadrão N(µ = 0, σ2 = 1). Vejamos então algumas operações básicas.

> 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, oque corresponde a mediana da distribuição. Note que antes do comando degeração de números aleatórios, usamos a função set.seed(). Esta associaa amostra aleatória gerada a um número (no nosso exemplo foi utilizado12). Portanto, a mesma amostra aleatória poderá ser obtida várias vezes. Seeste não for utilizado, a cada repetição do comando de geração de númerosaleatórios uma novos números seram gerados. Podemos repetir estas ope-rações com qualquer distribuição normal, bastando para isso, dar valor aosargumentos mu e sd, onde são especi�cados, respectivamente, a média e odesvio padrão. Para ver a descrição completa dos argumentos, basta execu-tar: ?Normal. Vejamos então 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 gra�camente a probabilidade P (N(100, 100) ≤ 90) = 0, 159.Isso pode ser feito utilizando a função polygon().

Page 58: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 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: Representação grá�ca da P (N(100, 100) ≤ 90)

Vejamos a representação grá�ca de algumas funções de densidade e de dis-tribuição da normal.

> #Funções 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)> #Funções de distribuição> 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 distribuições simétricas (como é o caso da distribuição normal) têm aseguinte propriedade Md = X = M0, ou seja, a sua mediana, média emoda são iguais. A�m de ilustrar esta propriedade vamos construir umafunção que retorne a moda de uma distribuição normal. Para encontrar oargumento que maximiza a função usaremos a função opitmize(). Estaexamina uma função em um determinado intervalo, retornando o valor mí-nimo ou máximo, desta. Para mais detalhes da função opitimize() execute?opitimize. Segue então a função Moda_Normal().

Page 59: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 59

Figura 4.2: Algumas funções de densidade e funções de distribuição da dis-tribuição 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 função recebe como argumentos a média (mu) e o desvio padrão (dp) dadistribuição normal especi�cada. Vejamos então 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 distribuição normal coincide com a sua média.O leitor pode con�rmar, como exercício, que os valores acima são tambémas medianas destas normais.

Page 60: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 60

4.2.2 Distribuição t-Student

No R a distribuição t-Student é referenciada pelo pre�xo t. Para ver a des-crição completa dos argumentos, basta executar ?TDist. Vejamos algumasoperações básicas 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 funções especi�ca o grau de liberdade da dis-tribuição t. A distribuição t-Student se aproxima da distribuição normalquando o grau de liberdade aumenta. Na Figura 16 ilustramos essa pro-priedade.

#Densidades tcurve(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))#Funções de distribuição tcurve(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 distribuição normal, vamos implementaruma função que retorne a moda distribuição t. Vamos chamar esta funçãode Moda_t().

Page 61: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 61

Figura 4.3: Comparativo entre a distribuição t-Student e a distribuição nor-mal

> 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 distribuição t-Student é sempre igual a zero.

4.2.3 F-Snedecor

A distribuição F-Snedecor é referenciada por f e a descrição dos seus argu-mentos pode ser vista executando ?FDist. Vejamos então alguns exemplos.

Page 62: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 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 funções especi�cam os graus de liber-dade da distribuição F. Na Figura 17 temos os grá�cos da função de densidadee da função de distribuição para algumas combinações 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)> #Funções de distribuição 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 distribuição F é obtida com a função 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)

Page 63: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 63

Figura 4.4: Algumas funções de densidade e de distribuição F-Snedecor

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

O leitor pode veri�car que a moda da distribuição F-Snedecor é dada por:

gl1− 2

gl1

gl2

gl2 + 2para gl1 > 2

4.2.4 Distribuição Gama

A referência da distribuição gama no R é gamma. Esta distribuição pos-sui como casos particulares a distribuição exponencial e a distribuição qui-quadrado. Para a descrição completa dos argumentos basta executar ?GammaDist.Segue abaixo algumas operações básicas.

> dgamma(3,3,2)[1] 0.08923508> pgamma(3,3,2)[1] 0.9380312> qgamma(0.5,3,2)

Page 64: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 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 distribuição gama temos dois tipos de parametrização. Na primeira, quechamaremos de parametrização 1, a sua função de densidade é a seguinte:

f(x) =1

θαΓ(α)xα−1 exp (−x

θ)1l(0,∞)(t)

onde, o parâmetro de forma α e o parâmetro de escala θ são especi�cados, res-pectivamente pelos argumentos shape e scale. Já na outra parametrização,que chamaremos de parametrização 2, temos a seguinte função de densidade:

f(x) =1

θαΓ(α)xα−1 exp (−βx)1l(0,∞)(t)

onde, β = 1/θ é especi�cado pelo parâmetro rate. Alguns grá�cos da funçãode densidade da distribuição gama para os dois tipos de parametrização po-dem ser vistos na Figura 18.

> curve(dgamma(x,shape=1,scale=2),0,20,ylab="f (x)",+ main="Parametrização 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="Parametrização 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)

Page 65: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 65

Figura 4.5: Algumas funções de densidade da distribuição Gama

Note que uma distribuição Gama(1, 2) corresponde a uma exp(1). Uma vari-ável aleatória com distribuição Gama(k/2, 1/2) é também uma distribuiçãoQui-quadrado com k graus de liberdade (Notação: χ2

(k)). Na Figura 19 ilus-tramos gra�camente esta propriedade para uma Gama(3/2, 1/2), ou seja,neste caso tem-se também 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))

Page 66: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 66

Figura 4.6: Função de densidade de uma χ2(3) e uma G(3/2, 1/2)

A moda da distribuição gama para a parametrização 1 e 2 é dada, respecti-vamente, por (α− 1)θ e (α− 1)/β. Para o cálculo da moda foi construída afunção Moda_gama(). Nesta função o argumento a especi�ca o parâmetro deforma da gama e s, o parâmetro de escala. Além de p que especi�ca o tipode parametrização a ser usada (1=parametrização 1 e 2=parametrização 2).Vejamos então 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)

Page 67: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 67

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

4.2.5 Distribuição Binomial

No R a distribuição binomial é referenciada por binom. Nas funções temos oargumento size onde devemos especi�car o número de provas independentesde Bernoulli (Bussab e Morettin, 2005) e o argumento prob onde especi�-camos a probabilidade de sucesso. Vamos ilustrar algumas operações básicascom a distribuição binomial através da resolução de um problema extraídode Bussab e Morettin (2005).

Exemplo: Um curso de treinamento aumenta a produtividade de uma certapopulação de funcionários em 80% dos casos. Se dez funcionários quaisquerparticipam desse curso, encontre a probabilidade de:

(a) exatamente sete funcionários aumentarem a produtividade;

(b) não mais do que oito funcionários aumentarem a produtividade; e

(c) pelo menos três funcionários não aumentarem a produtividade.

Solução:Devemos calcular probabilidades de uma distribuição binomial de parâmetrosn = 10 e p = 0, 8, conforme o enunciado do problema. Temos então:

(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 representação grá�ca de algumas distribuições de pro-babilidade e distribuição de probabilidade acumulada da binomial.

> #Distribuição 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)

Page 68: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 68

> legend("topright",c("B(10; 0,8)","B(20; 0,7)","B(40; 0,5)"),+ col=2:4,bty="n",pch=16)> #Distribuição 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: Representação grá�ca da distribuição binomial

A moda da distribuição binomial é sempre dada por b(n + 1)pc, ou seja omenor inteiro que não ultrapassa a quantidade (n+1)p. No R o menor inteirode um número real pode ser obtido com a função floor(). Por exemplo, amoda de uma B(10; 0, 8) é dada por:

> floor((10+1)*0.8)[1] 8

Deixa-se ao leitor, como exercício, construir uma função que generalize esteprocedimento.

Page 69: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 69

4.2.6 Distribuição de Poisson

A distribuição de Poisson é referenciada no R pelo pre�xo pois. A taxamédia λ é especi�cada no argumento lambda. Para ver a descrição completados argumentos execute ?Poisson. Vejamos então algumas operações básicascom uma distribuição poisson de parâmetro λ = 1 (notação: 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 representação grá�ca da distribuição de probabilidadee distribuição de probabilidade acumulada para diferentes valores de λ

> #Distribuição 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)> #Distribuição 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 distribuição de Poisson é um caso limite da distribuição binomial quandon → ∞ e p → 0 (Bussab e Moretim, 2005). Para ilustrar esta propriedadevamos considerar o grá�co da distribuição de probabilidade acumulada dadistribuição de Poisson comparado com a distribuição acumulada da dis-tribuição binomial com valores crescentes de n e decrescentes de p.

Page 70: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 70

Figura 4.8: Representação grá�ca da distribuição Poisson

#Aproximação 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)

Page 71: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 71

Figura 4.9: Aproximação da Binomial pela Poisson

A distribuição de Poisson é bimodal quando λ é inteiro e unimodal paraλ fracionário. No primeiro caso as modas são dadas, respectivamente, por:λ − 1 e λ. No segundo caso, temos que a moda da Poisson é igual a bλc.Vamos construir a função Moda_poisson() que retornará a(s) moda(s) dadistribuição 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)

Page 72: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 72

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

$mo2[1] 10

Esta função recebe como argumento o valor de λ. Inicialmente a funçãoveri�ca se o λ especi�cado é inteiro através do teste l==trunc(l) e retornauma lista com as duas modas caso este seja verdadeiro. Senão a funçãoretornará bλc.

4.3 Inferência

Nesta seção vamos utilizar o R para obter distribuições amostrais, ilustrarpropriedades de estimadores, teoremas, etc. Além disso, mostraremos algu-mas funções que já prontas. Por exemplo, as funções t.test() e var.test()que serão usadas na parte de testes de hipóteses.

4.3.1 Teorema Central do Limite

Vamos começar com a ilustração deste que é um dos mais importantes re-sultados da Estatística Matemática. O Teorema Central do Limite procuraexpressar o fato de que a média aritmética de n variáveis aleatórias indepen-dentes e identicamente distribuídas, denotada por X, tem uma distribuiçãocuja forma tende para uma forma limite que não depende da distribuição dasvariáveis. A seguir temos o enunciado desse teorema.

Teorema 4.3.1.1 (Teorema Central do Limite - Lindeberg and Lévy). Se-jam X1, X2, . . . , Xn variáveis independentes e identicamente distribuídas que

formam uma amostra de tamanho n proveniente de uma distribuição com

média µ e variância σ2, 0 < σ < ∞. Então, a variável aleatória Z = X−µσ/√n

tem distribuição limite que é normal com média zero e variância um, isto é,

limn→∞

P

[√n(X − µ)

σ≤ z

]= Φ(z),

Page 73: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 73

Onde Φ(.) denota a função de distribuição de uma variável aleatória normal

padrão.

Para ilustrar este teorema vamos construímos a função TCL(). Esta funçãorecebe como argumentos uma função que especi�ca a população de referên-cia, bem como a média e desvio-padrão desta (estabelecemos por padrão umapopulação uniforme com média 0.5 e desvio padrão 1/

√12. Além disso, pode-

mos indicar um vetor contendo tamanhos de amostras e também o númerode amostras simuladas. Esta função retornará os histogramas da variável Zpara cada tamanho de amostra especi�cado. São também traçadas a curvateórica (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 então para algumas populações.

>#População uniforme> op=par(mfrow=c(2,2))> TCL()> par(op)

>#População exponencial> op=par(mfrow=c(2,2))> TCL(rexp,1,1)> par(op)

Page 74: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 74

Figura 4.10: Ilustração do TCL para amostras provenientes de uma popu-lação uniforme com média 1/2 e desvio-padrão 1/

√12

Figura 4.11: Ilustração do TCL para amostras provenientes de uma popu-lação exponencial com média 1 e desvio-padrão 1

Page 75: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 75

Figura 4.12: Ilustração do TCL para amostras provenientes de uma popu-lação Poisson com média 2 e desvio-padrão

√2

>População Poisson> op=par(mfrow=c(2,2))> TCL(function(n){rpois(n,2)},2,sqrt(2))> par(op)

4.3.2 Distribuições Amostrais

Na inferência paramétrica para obtermos informações sobre parâmetros deinteresse de uma determinada população é necessário conhecermos a dis-tribuição de seus estimadores desses parâmetros. Essas distribuições sãochamadas distribuições amostrais. Vejamos, através de exemplos, como usaro R para obter distribuições amostrais. De forma geral, devemos seguir osseguintes passos:

• Escolher a população de interesse e seus parâmetros;

• Determinar um número N de amostras, bem como o tamanho n destas;

• Escolher um parâmetro de interesse e obter a sua estimativa para cadauma das N amostras simuladas. Pode-se ainda fazer um histogramadestas estimativas e veri�car se este sugere algum modelo conhecido;

Page 76: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 76

• Utilizar as amostras para obter estimativas da média e da variânciapopulacional.

Seja então a população X ∼ N(100, 10). Vamos considerar o parâmetro µ e

σ2 e seus respectivos estimadores X e S2 =∑ni=1(Xi−X)2

n−1. Vamos ilustrar que

X ∼ N(µ, σ2

n) e (n−1)S2

σ2 ∼ χ2n−1. Vamos inicialmente calcular a distribuição

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 média das médias amostrais seja igual a 100 e a variânciaseja igual a (10/20) = 0, 5. Como vemos, as estimativas obtidas pela sim-ulação são bem próximas do esperado. A pequena discrepância entre estesvalores é devido estarmos trabalhando com um número �nito de amostras. Oleitor poderá também, ao repetir esse procedimento, obter estimativas difer-entes dependendo do valor da semente aleatória �xada. É esperado tambémque a distribuição das médias amostrais sejam normalmente distribuídas. Va-mos então completar a ilustração fazendo um histograma com curva teóricapara as médias amostrais obtidas na simulação.

> hist(xbar,prob=T,main="",ylim=c(0,0.6),ylab="Densidade")> curve(dnorm(x,100,sqrt(10/20)),add=T)

Vamos agora considerar a estatística P = (n−1)S2

σ2 . Como visto anterior-mente esta tem distribuição χ2

n−1 este fato fato garante que: E(S2) = σ2 e

Var(S2) = 2(σ2)2

n−1. Ilustremos então estes resultados.

> 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)

Page 77: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 77

Figura 4.13: Histograma com curva teórica para as médias amostrais simu-ladas

Figura 4.14: Histograma com curva teórica para as estatísticas P obtidas dasamostras simuladas

As estimativas para a média e variância de S2 encontradas foram E(S2) ≈9, 9675 e Var(S2) ≈ 10, 4338 estão bem próximas dos valores teóricos E(S2) =

10 e Var(S2) = 2(10)2

20−1= 10, 5263. As distribuições das estatísticas X e

P de uma população normal são facilmente obtidas analiticamente. Por

Page 78: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 78

meio de simulação podemos investigar distribuições amostrais mais com-plicadas de serem obtidas analiticamente. Por exemplo, a distribuição deS/X (coe�ciente de variação amostral). Considerando ainda a populaçãoX ∼ N(100, 10) vamos determinar a média e a variância da estatísticacv = 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

Temos então as estimativas E(cv) ≈ 0, 031 e var(cv) ≈ 0, 000. Tomemosagora a população Y ∼ U [0, 10]. Vamos ilustrar a distribuição da estatísticaYn = max(Y). Sabemos que se Y possui distribuição uniforme no intervalo[0, θ] a densidade de Yn é dada por:

fYn(y) =n

θnyn−11l(0,θ)(y) (4.1)

Desta forma temos que:

E(Yn) =nθ

n+ 1e Var(Yn) =

nθ2

(n+ 1)2(n+ 2)

Vamos inicialmente obter estimativas para média e variância de Yn uti-lizando o mesmo procedimento anterior, agora considerando a populaçãoY ∼ 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 teóricos obtidos através da densidade de Yn são E(Yn) = 20×1021

=

9, 5238 e Var(Yn) = 20×102

212×22= 0, 2061. Note que as estimativas obtidas através

da simulação estão bem próximas destas. Vamos agora gerar um histogramapara os máximos obtidos nas amostras simuladas e acrescentaremos neste acurva teórica 4.1.

Page 79: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 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 teórica para as estatísticas Yn obtidasdas amostras simuladas

4.3.3 Estimação de máxima verossimilhança

Vamos agora utilizar o R para ilustrar o método de estimação de máxima ve-rossimilhança. Vamos traçar curvas de verossimilhança e log-verossimilhança,ilustrar propriedades dos estimadores de verossimilhança, etc. Considere-mos então X1, X2, . . . , Xn uma amostra aleatória da distribuição Poisson deparâmetro λ. A função de verossimilhança (L(λ)) e log-verossimilhança (l(λ))são dadas por:

L(λ) = e−nλλ∑xi e l(λ) = Σxi lnλ− nλ

Page 80: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 80

Vamos gerar uma amostra aleatória de uma poisson de parâmetro λ = 2.Em seguida escreveremos as funções L(λ) e l(λ) e plotaremos seus grá�cosindicando o ponto de máximo que corresponde a λ. Examine o código abaixo:

> #Verossimilhança da Poisson> #Gerar amostra aleatória 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))> #Gráfico da Verossimilhança> 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)> #Gráfico da Log-verossimilhança> 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 população de interesse e seus parâmetros;

• Escrever as funções L(λ) e l(λ);

• Encontrar o máximo destas funções utilizando a função optimize();

• Plotar os grá�cos indicando o ponto de máximo. Isso pode ser feitocom as funções points() e lines().

Nem sempre é possível encontrar formas fechadas para os estimadores demáxima verossimilhança. Nesses casos, as estimativas são encontradas pormeio de métodos numéricos. No exemplo a seguir utilizaremos o método deNewton-Rapson para obter as estimativas dos parâmetros.

Page 81: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 81

Figura 4.16: Grá�co de L(λ) e l(λ) para uma amostra da populaçãoPoisson(λ = 2)

Exemplo (Kalb�eisch, 1985): k = 5 diferentes doses de um inseticida sãoaplicadas sobre condições padronizadas em uma amostra de uma espécie deinseto. Os resultados são mostrados na Tabela 2. Vamos assumir que p,a probabilidade de que um inseto morra, é relacionada com a dose atravésde um modelo logístico. Desejamos encontrar as estimativas de máximaverossimilhança (α, β).

Tabela 4.1: Dados de um Experimento Dose-Resposta

Concentração 2,6 3,8 5,1 7,7 10,2Log Concentração 0,96 1,34 1,63 2,04 2,32Número de insetos ni 50 48 46 49 50Número de mortos yi 6 16 24 42 44Fração de mortos 0,12 0,33 0,52 0,86 0,88

Se diferentes insetos são usados com diferentes doses, os Y ′i s (número de inse-tos mortos) serão independentes e sua densidade de probabilidade conjuntaé

f(y1, y2, . . . , y5) =5∏i=1

(niyi

)pyii (1− pi)ni−yi

Page 82: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 82

As funções de verossimilhança e log-verossimilhança são

L(α, β) =5∏i=1

[pi

1− pi

]yi(1− pi)ni

l(α, β) =5∑i=1

[yi ln

pi1− pi

+ ni ln(1− pi)]

Mas sabemos que pi possui uma relação logística com di, ou seja, pi =1− (1 + eα+βdi)−1. Logo,

l(α, β) =5∑i=1

[yi(α + βdi) + ni ln(1− pi)]

Desta obtemos o vetor escore S(α, β) e a matriz de informação I(α, β):

S(α, β) =

[Σ(yi − µi)Σ(yi − µi)di

]I(α, β) =

[Σvi Σvidi

Σvidi Σvid2i

]

Onde µi = nipi e vi = nipi(1− pi). Vamos inicialmente entrar com os dadosda 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)##número de insetos mortos(dose d_i)> d=log(Con)

Agora para dar início ao processo iterativo precisamos de uma estimativainicial para os parâmetros α e β. Vamos então tomar como valores iniciaisα ≈ −5 e β ≈ 3 (Veja Kalb�eisch, 1985 para mais detalhes sobre este exem-plo). A função NR() recebe como argumentos um vetor com o valor inicialpara os parâmetros e um critério de convergência. Essa função retornará ovalor das estimativas o número de iterações até a convergência, o valor dasestimativas e o valor da log-verossimilhança.

Page 83: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 83

> # Início 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)# Informação

+ epsilon=10^{-10} # Critério de convergência

+ j=0 # de iterações

+ 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)# Informação

+ 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 iterações =",j,"\t","alfa esti.=",teta[1],", beta esti.=",teta[2],"\n")

+ cat("Log-verossimilhança=",logver,"\n")

+ }

>

>

> NR(c(-5,3),10^(-10))

Resultado do Processo iterativo

No de iterações = 4 alfa esti.= -4.886912 , beta esti.= 3.103545

Log-verossimilhança= -119.8942

Obteve-se então, ao �nal de 4 iterações, α = −4, 8869 e β = 3, 1035. Por-tanto, o modelo de dose resposta estimado é

p = 1− (1 + e−4,8869+3,1035d)−1

Podemos utilizar também a função fitdistr() da biblioteca MASS que uti-liza o algoritmo BFGS (Broyden et.al., 1970) para estimação de parâmetros.Considere então o seguinte exemplo:

Exemplo (Kalb�eisch, 1985): Suponha que para um teste de resistênciade um componente metálico, 23 amostras(corpos de prova) foram avaliadasresultando nos valores:

Page 84: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 84

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

De estudos anteriores admite-se que a resistência apresenta aproximada-mente uma distribuição de Weibull, cuja densidade é dada por f(x;α, β) =αβxβ−1 exp (−αxβ), 0 < x < ∞, onde α > 0 e β > 0. Nosso objetivo édeterminar (α, β) com base na amostra observada.Vamos então aplicar a função 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 parâmetros> fitdistr(x,"weibull")

shape scale2.101337 81.836799

( 0.328613) ( 8.596717)

A função fitdistr() recebe como argumentos um vetor de dados e um string

indicando a distribuição que será utilizada. Esta retorna as estimativas dosparâmetros e seus respectivos erros-padrão (valores entre parênteses).

4.3.4 Intervalos de Con�ança

Intervalo para a média de uma população normal com variânciadesconhecida:

Vamos considerar uma amostra de tamanho 10 de uma população N(20, 16).Suponhamos que não conhecemos o verdadeiro valor de µ e σ2 e desejamosconstruir um intervalo com γ% de con�ança para a média. Vamos primeira-mente escrever uma função que retorne este intervalo para um nível de con-�ança �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 média 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")

Page 85: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 85

+ ic

+ }

Note que, estabelecemos como valor padrão o nível de con�ança de 95%.Vamos então aplicar utilizando 95% e 99% de con�ança.

> IC.media(amos4)IC para a média 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 média de uma pop. normal com var. desconhecidaIC a 99 %lim.inf lim.sup

15.07220 22.10292

Estes mesmos intervalos podem ser obtidos com a função t.test() da seguinteforma:

> t.test(amos4)$conf.int[1] 16.14058 21.03455attr(,"conf.level")[1] 0.95> t.test(amos4,conf.level=0.99)$conf.int[1] 15.07220 22.10292attr(,"conf.level")[1] 0.99

Usaremos agora a função t.test() para calcular o nível de con�ança dointervalo para a média de uma população normal com variância desconhecidausando simulação. A ideia é gerar um grade numero de amostras de tamanhon, e para cada uma delas determinar um intervalo de con�ança. Devemostambém contar o número de intervalos que contém a verdadeira média. Aproporção destes intervalos será o nível de con�ança.

> 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

Page 86: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 86

+ }+ return(cont/N)+ }

Vamos aplicar para n = 10 e n = 30. Note que obtemos uma maior coberturacom 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 gra�camente o que acabamos de fazer utilizando a funçãoconf.int(). Esta função calcula intervalos de con�ança para amostras deuma distribuição normal padrão e estes são plotados como segmentos dereta em grá�co. Neste grá�co também é traçada uma linha pontilhada querepresenta a verdadeira média e a taxa de cobertura (coverage rate). Vejamosum exemplo onde utilizamos 100 amostras de tamanho 20. O grá�co é vistona Figura 4.17

> require(animation)>> oopt=ani.options(interval = 0.1, nmax = 100)> set.seed(900)> conf.int(size=20,main="Demostração de Intervalo de Confiança")> ani.options(oopt)

Intervalos para proporção:

Da mesma forma que �zemos para a média, iremos também escrever umafunção que retorne uma estimativa intervalar para uma proporção. Vamosconsiderar inicialmente o intervalo assintótico.Ou seja, sabendo que:

√n(p− p)√p(1− p)

∼ N(0, 1)

Podemos calcular,

P{−zα/2 ≤√n(p− p)√p(1− p)

≤ zα/2} = 1− α

Page 87: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 87

Figura 4.17: Intervalos de con�ança para a média de uma normal padrãopara 100 amostras de tamanho 20

Logo,

IC(p, 1− α)

[p± zα/2

√p(1− p)

n

]

que um intervalo assintótico para p e p é o estimador de máxima verossimi-lhança de p dado por: p =

∑ni=1 yin

Escrevamos então uma função 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 proporção","\n")

Page 88: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 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 população de Bernoulli com p = 0, 6 e apli-cando a função 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 proporção

IC a 95 %lim.inf lim.sup

0.552082 1.047918

A função binom.wilson() da biblioteca epitools retorna um intervalo paraproporção baseado na correção de Wilson (Wilson, 1927). Este é dado por:

p+ 12nz21−α/2 ± z1−α/2

√p(1−p)n

+z21−α/24n2

1 + 1nz21−α/2

Utilizando a mesma amostra anterior vamos determinar o intervalo de Wilsone comparar o seu comprimento com o intervalo assintótico.

> require(epitools)> IW=binom.wilson(sum(amos5),length(amos5));IW

x n proportion lower upper conf.level1 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.level1 8 10 0.8 0.552082 1.047918 0.95> #Comprimento do intervalo assintótico> comp.A=IA$upper-IA$lower;comp.A[1] 0.495836

Vemos que para esta amostra o intervalo de Wilson apresentou um menorcomprimento comparado com o intervalo assintótico.

Page 89: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 89

4.3.5 Testes de Hipóteses

Teste para a média de uma população normal com variância des-conhecida:

Vamos considerar a seguinte amostra retirada de uma população suposta-mente normal:

32,18661 29,70124 31,12365 28,71436 33,05036 32,35136 30,3787132,51114 27,57830 31,09745

Deseja-se testar:

{H0 : µ = 30H1 : µ 6= 30

Sabendo que:

T =

√n(X − µ0)

S∼ t(n−1)

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> #Estatística do teste> T=(sqrt(n)*(xb-30))/s;T[1] -0.2886489>> #nível de significância> alfa=0.05>> #t crítico> Tt=qt(1-alfa/2,n-1);Tt[1] 2.262157

Vamos ilustrar gra�camente a região crítica do teste e também a comparaçãodo valor da estatística do teste com o valor crítico.

Page 90: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 90

> #Região crítica> 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: Região crítica 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)

Page 91: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 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 Estatística do teste

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

Pelo exposto, vemos que não há evidências contra a hipótese de que a médiapopulacional é igual a 30, ao nível de signi�cância de 5%. Podemos obtertodos os resultados acima utilizando a função t.test().

#utilizando uma função do R> t.test(amos6,mu=30)

One Sample t-test

data: amos6t = -0.3239, df = 9, p-value = 0.7534alternative hypothesis: true mean is not equal to 3095 percent confidence interval:27.63575 31.77196

sample estimates:mean of x

Page 92: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 92

29.70386

Seja a população N(10, 4). Supondo desconhecida a verdadeira média destapopulação, desejamos testar:

{H0 : µ = 10H1 : µ 6= 10

Chama-se poder do teste a probabilidade de se rejeitar a hipótese H0 dadoum valor qualquer de µ, especi�cado ou não pela hipótese alternativa, e serádenotado por φ(µ). Para um µ especi�cado o poder do teste é dado por:

P

(Z > zα/2 +

X − µσ/√n

)+ P

(Z > zα/2 +

X − µσ/√n

)Tomando valores em torno de µ = 10 e com base na expressão acima vamoscalcular o desse teste para diferentes tamanhos de amostra.

> #poder do teste

> set.seed(89081)

> amos7=rnorm(9,10,4)

> #valores alternativos para média

> 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 gráfico

> 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")

Page 93: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 93

Figura 4.20: Grá�co do poder do teste

As principais funções do R para realizar testes paramétricos estão resumidasna Tabela 3.

Tabela 4.2: Principais funções do R para realizar testes de hipóteses

Comparação de médias de populações normais

1 média t.test(x,...)

2 médias t.test(x,y,...)

2 médias (populações dependentes) t.test(x,y,paried=T)

2 médias com variâncias iguais t.test(x,y,var.equal=T)

Teste para proporções prop.test()

Comparação de variâncias var.test()

Page 94: Curso de R

CAPÍTULO 4. PROBABILIDADE E INFERÊNCIA 94

.1 Apêndice Software R no Curso de Estatís-

tica da UFC

Há uma série de funções e bibliotecas que são constantemente usadas em dis-ciplinas do curso de estatística da UFC. A pagina o�cial do R http://www.r-project.org/disponibiliza para download uma série de bibliotecas com as mais variadas�nalidades. A tabela abaixo traz um resumo das principais bibliotecas efunções utilizadas no curso supracitado.

Tabela 3: Principais bibliotecas e funções do R usadas nas disciplinas docurso de estatística da UFC

Disciplina Bibliotecas do R Principais funções Finalidade

summary(), hist(), Resumos estatísticos, histogramas,Estatística Descritiva stats table() Tabelas de frequências

pie(), barplot() Grá�co em setores e em colunasprettyR∗ Mode() Moda de um conjunto de dados

pnorm(), rnorm() Obter probabilidades e númerosProbabilidade e stats pbinom(), rbinom() aleatórios das distribuições normal

Inferência e binomialt.test() Realiza o teste t de Student

Métodos Não- stats shapiro.test() Teste de normalidadeParamétricos wilcox.test() Comparação de 2 grupos

epitools∗ binom.exact() Intervalos para proporçãolm() Ajustar um modelo de regressão

Análise de linearRegressão stats anova() Análise de variância

residuals() Resíduospredict() Valores preditosaov() Ajuste do modelo

Planejamento de stats bartlett.test() Teste de homogeneidadeExperimentos TukeyHSD() Teste de Tukey

MASS boxcox() Transformação boxcoxControle estatístico qcc∗ qcc() Grá�cos de controle

da Qualidadefactanal() Análise fatorial

stats princomp() Componentes principaisAnálise Multivariada hclust() Análise de agrupamento

MASS lda() Análise discriminante linearenergy∗ mvnorm.etest() Teste de normalidade

Multivariadachisq.test() Testes defisher.test() associação

Biometria stats mantelhaen.test() Teste Cochran-Mantel-Haenszelglm() Regressão logísticats() De�nir a série

Séries filter() Filtros linearesTemporáis stats acf() Correlograma

arima() Ajusta modelos autoregressivostsdiag() Diagnóstico do ajuste

(*): Estas bibliotecas não fazem parte do conjunto de bibliotecas padrão do R, e devem ser instaladasposteriormente.

Page 95: Curso de R

Referências Bibliográ�cas

[1] Bussab, W. de O. e Morettin, P. A. (2003). Estatística Básica. 5ª ed.São Paulo: Editora Saraiva.

[2] Pinheiro J. I. D. et al. (2008). Estatística básica: A arte de trabalharcom dados. 1 ed. Rio de Janeiro: Campus.

[3] James, B. R. (1981). Probabilidade: Um Curso em Nível Intermediário.Projeto Euclides, Impa, Rio de Janeiro.

[4] Kalb�eisch, 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