Curso de R
Short Description
Download Curso de R...
Description
UNIVERSIDADE FEDERAL DO CEARÁ CENTRO DE CIÊNCIAS DEPARTAMENTO DE ESTATÍSTICA E MATEMÁTICA APLICADA
CURSO DE R
Professora Ana Maria Souza de Araujo Aluno José Roberto Silva dos Santos
Fortaleza, Dezembro de 2009
Sumário 1 Introdução
4
2 Tipos de Objetos
6
1.1 Como utilizar o R . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Pacotes Libraries . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 2.2 2.3 2.4 2.5 2.6 2.7
Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Data-frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Importação de dados . . . . . . . . . . . . . . . . . . . . . . . 2.7.1 A função read.table() . . . . . . . . . . . . . . . . . . . 2.7.2 Importando planilhas do Microsoft Excel (Arquivos xls)
3 Estatística Descritiva
3.1 Rotinas Grácas . . . . . . . . . . . . 3.1.1 Funções grácas de alto nível . 3.1.2 Funções grácas de baixo nível 3.1.3 Funções grácas interativas . . 3.2 Parâmetros grácos. A função par() . . 3.3 Descrevendo um conjunto de dados . . 3.3.1 Descrição Univariada . . . . . . 3.3.2 Descrição Bivariada . . . . . . . 3.3.3 Alguns grácos mais elaborados
4 Probabilidade e Inferência
4.1 Controle de uxo e denição de funções 4.1.1 Execução condicional . . . . . . 4.1.2 Ciclos . . . . . . . . . . . . . . 4.1.3 Denindo funções . . . . . . . . 2
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
4 5
6 9 13 16 17 18 18 19 21
22
22 22 23 23 23 29 32 41 48
53
53 53 54 55
3
SUMÁRIO
4.2 Distribuições de Probabilidade . . . . . . . . . . 4.2.1 Distribuição Normal . . . . . . . . . . . 4.2.2 Distribuição t-Student . . . . . . . . . . 4.2.3 F-Snedecor . . . . . . . . . . . . . . . . 4.2.4 Distribuição Gama . . . . . . . . . . . . 4.2.5 Distribuição Binomial . . . . . . . . . . 4.2.6 Distribuição de Poisson . . . . . . . . . . 4.3 Inferência . . . . . . . . . . . . . . . . . . . . . 4.3.1 Teorema Central do Limite . . . . . . . . 4.3.2 Distribuições Amostrais . . . . . . . . . 4.3.3 Estimação de máxima verossimilhança . 4.3.4 Intervalos de Conança . . . . . . . . . . 4.3.5 Testes de Hipóteses . . . . . . . . . . . . .1 Apêndice Software R no Curso de Estatística da Referências Bibliográcas . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFC . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
56 57 60 61 63 67 69 72 72 75 79 84 89 94 95
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 de metodologias 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 temporais,...) além de um vasto ferramental gráco. Este é distribuído livremente sob os termos da Free Software Foundation's GNU General Public License em forma de código fonte. Compila e executa em uma ampla variedade de plataformas UNIX e sistemas similares (incluindo FreeBSD e Linux), Windows e MacOS.
1.1 Como utilizar o R O R está disponível para download no site http://www.r-project.org/. Após a instalação inicie o R (isso pode ser feito utilizando o ícone que será criado na área de trabalho do seu computador) e veja que será aberta a seguinte tela: Este é o ambiente R que possui uma janela denominada console. Para limpar o 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 melhor forma de se editar comandos é usando o editor de script, disponível a partir da versão 2.1.1. Para ativar o editor, basta ir até a barra de menus e clicar sequencialmente em: Arquivo e Novo script. No ambiente R as janelas podem ser organizadas por título (uma ao lado da outra) ou em forma de cascata. 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 desejada e combine as teclas "Ctrl"e "R"; no caso de comandos ocupando várias linhas, selecione todas as desejadas e após isso faça a mesma combinação de 4
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 estão na forma de pacotes, por exemplo, os pacotes "stats"e "base"que contêm funções básicas como plot(), mean(), matrix() entre outras, são exemplos de pacotes padrões do R. No entanto, o usuário não precisa limitar-se somente a estes, ou seja, é possível instalar mais pacotes sempre que for necessário. O R conta com inúmeros colaboradores no mundo inteiro que criam e disponibilizam estes pacotes. Estas contribuições podem ser adquiridas, na forma de arquivos "zip", diretamente da home page citada na subseção anterior. Ou também, podem ser instaladas diretamente do ambiente R, bastando para isso, que o computador do usuário esteja conectado à internet.
Capítulo 2 Tipos de Objetos No R, a manipulação de dados é feita através de objetos, sob os quais estão denidas uma série de comandos que permitem, entre outras, operações de aritmética, armazenamento de dados, descrição e análise. Os objetos básicos do R são dos tipos: vetores, matrizes, arrays, data-frames, listas e funções. Os quatro primeiros tipos, são objetos que armazenam dados diferindo apenas pela forma de armazenamento e operação destes. Já os objetos do tipo funçã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 ao objeto x1, na segunda linha pede-se para mostrar o valor de x1,e na terceira linha é exibido o valor de x1. Para separar comandos em uma mesma linha deve-se usar ";" por exemplo, o código acima poderia ser escrito da seguinte forma: > x1=2;x1 [1] 2
Agora vamos examinar os seguintes comandos: 6
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 denir um vetor. Vejamos. O vetor x2 foi denido usando o comando "c" que concatena os valores que estão entre parê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 forma de gerar sequências é utilizando a função "seq", sendo que nesta podemos escolher o valor de incremento, que é especicado no argumento by=. Para o exemplo acima vemos que x4 foi preenchido com uma sequência iniciando em 0 e terminando em 1 com incremento de 0, 1. Por último, temos os vetores x5 e x6 que foram denidos usando a função "rep", muito útil para criação de vetores com elementos repetidos. No primeiro argumento 1 da função deve ser informado o elemento que será repetido e no segundo argumento informamos o número de vezes que este será repetido. No vetor x5 temos o número 1 repetido 3 vezes e, note que, também podemos usar vetores nos argumentos da função rep. É o que foi feito para denir x6. Neste caso, o primeiro vetor deve conter os elementos que se deseja repetir, e o segundo irá conter o número de repetições de cada elemento do primeiro. É possível selecionar elementos de um vetor usando colchetes, por exemplo: > x4[x4>0.5] [1] 0.6 0.7 0.8 0.9 1.0
Aqui foi utilizado o operador lógico > para selecionar os elementos de x4 maiores do que 0,5. > x4[3] 1 Os
argumentos de uma função devem ser sempre separados por vírgula
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 (a posição dos elementos é contada a partir de 1), depois foi utilizado o operador de subtração para excluir o terceiro elemento de x4 e por último estamos selecionando os três primeiros elementos de x4. Note que a linguagem R é bastante intuitiva, por exemplo, imagine se nosso interesse fosse excluir mais de um elemento de x4 de uma só vez, seria razoável pensar no seguinte comando: > x4[-(1:3)] [1] 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
que está excluindo os elementos 1, 2 e 3 de x4.
Operações com vetores: Há diversas operações numéricas denidas sobre vetores. Vejamos algumas. > x2+2 [1] 3 4 5 > x2+3:5 [1] 4 6 8 > x2*3 [1] 3 6 9 > x2^(1:3) [1] 1 4 27 > x5/x2 [1] 1.0000000 0.5000000 0.3333333 > round(x5/x2,1) [1] 1.0 0.5 0.3
CAPÍTULO 2.
TIPOS DE OBJETOS
9
Vemos que no primeiro comando estamos somando 2 a todos elementos do vetor x2. Em seguida, somamos cada elemento de x2 com cada elemento do vetor (3,4,5). No terceiro comando, multiplicamos cada elemento de x2 por 3. Logo depois, elevamos o primeiro elemento de x2 a 1, o segundo a 2 e o terceiro a 3. No último comando introduzimos a função round() onde o primeiro argumento desta é um valor ou vetor numérico, e o segundo é o nú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, concatenamos x2 com o caractere "a", ou seja, tínhamos um vetor que era numérico e lhe foi acrescentado um caractere. Porém o vetor x8 não possui elemento numérico algum, o que foi vericado com a função is.numeric(), que informa ao usuário a natureza do objeto testado. Para x8 a função retornou o valor lógico FALSE, indicando que este não é numérico. Isso é devido ao fato de que, no R, objetos do tipo vetor só aceitam elementos de um único tipo (caractere ou numérico). Mais adiante iremos ver um objeto que permite elementos de mais de um tipo.
2.2 Matrizes Matrizes são objetos que possuem as mesmas propriedades dos vetores, diferindo apenas na dimensão. Uma das formas de criar uma matriz no R é utilizando a função abaixo: matrix(um vetor, nrow =número de linhas, ncol =número de colunas, byrow = FALSE,...)
CAPÍTULO 2.
TIPOS DE OBJETOS
10
Esta função recebe um vetor e o organiza em uma matriz conforme indicado no argumento byrow. Se byrow=FALSE2 o vetor será organizado por colunas da matriz, senão byrow=TRUE (que signica por linha = verdade), ou seja, o vetor será organizado por linhas. Vejamos um exemplo: > m1=matrix(1:9,nc=3);m1 [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9
Veja que é suciente escrever apenas as duas primeiras letras dos argumentos (ao invés de ncol basta digitar nc) e também, basta informar o número de linhas ou colunas, uma vez que estes devem ser sempre múltiplos do total de elementos da matriz. Vamos agora denir uma outra matriz usando o mesmo vetor 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 denir uma matriz é usando a função cbind, que serve para concatenar vetores, por exemplo: > m3=cbind(1:5,6:10,11:15);m3 [,1] [,2] [,3] [1,] 1 6 11 [2,] 2 7 12 [3,] 3 8 13 [4,] 4 9 14 [5,] 5 10 15
Podemos usar esta função para concatenarmos quantos vetores quisermos, e estes corresponderão às colunas da matriz que está sendo criada.
Seleção de elementos: Assim como foi visto na seção anterior, também
podemos selecionar elementos de uma matriz utilizando colchetes agora na forma: [ , ] onde antes da vírgula indica(m)-se a(s) linhas e depois a(s) colunas. Por exemplo: 2 Este
é a opção default, ou seja, se nada for especicado este será a opção utilizada
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 primeira linha e segunda coluna de m3. No segundo selecionamos apenas a segunda coluna. No terceiro é selecionada a segunda linha. E no quarto comando estamos excluindo a segunda linha de m3 e por último selecionamos uma submatriz constituída de alguns elementos das linhas 4 e 5 e das colunas 1 e 2 de m3.
Operações com matrizes: Existem várias operações denidas sob matrizes. 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
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] [1,] 102 [2,] 114 [3,] 126 [4,] 138 [5,] 150
[,2] 120 135 150 165 180
[,3] 138 156 174 192 210
> t(m2)%*%m2 [,1] [,2] [,3] [1,] 66 78 90 [2,] 78 93 108 [3,] 90 108 126
Nos dois primeiros comandos temos adição e multiplicação das matrizes m1 e 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 o produto matricial da transposta de m2 com m2. Esta operação é conhecida como 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 retornam, respectivamente, o determinante, a inversa e os auto-valores e autovetores de uma matriz. Vejamos um exemplo: > m4=matrix(c(6,5,4,1,3,0,2,-1,1),nc=3);m4 [,1] [,2] [,3] [1,] 6 1 2 [2,] 5 3 -1
CAPÍTULO 2.
[3,]
4
TIPOS DE OBJETOS
0
13
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 objeto podemos denir bem mais do que duas dimensões. No R denimos um array usando 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,]
[,1] [,2] [,3] 10 13 16
CAPÍTULO 2.
[2,] [3,]
11 12
14
TIPOS DE OBJETOS
14 15
17 18
Neste caso estamos trabalhando com três dimensões. É como se tivéssemos uma matriz formada por duas submatrizes, conforme a estrutura abaixo:
1 4 7 2 5 8 3 6 9 10 13 16 11 14 17 12 15 18
Vamos agora inserir mais uma 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,] [3,]
[,1] [,2] 7 10 8 11 9 12
, , 1, 2 [,1] [,2] [1,] 13 16 [2,] 14 17 [3,] 15 18 , , 2, 2 [,1] [,2] [1,] 19 2
CAPÍTULO 2.
[2,] [3,]
20 1
TIPOS DE OBJETOS
15
3 4
Agora temos uma estrutura do tipo:
1 4 13 16 2 5 14 17 3 6 15 18 7 10 19 2 8 11 20 3 9 12 1 4
A seleção de elementos de um array é semelhante a seleção de elementos de uma matriz, veja alguns exemplos: > ar2[,,1,1] [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 > ar2[,,1,2] [,1] [,2] [1,] 13 16 [2,] 14 17 [3,] 15 18 > ar2[,,2,1] [,1] [,2] [1,] 7 10 [2,] 8 11 [3,] 9 12 > ar2[,,2,2] [,1] [,2] [1,] 19 2 [2,] 20 3 [3,] 1 4
Note que, estamos selecionando todas as submatrizes 3 × 2 do array ar2. R possui vários bancos de dados internos, dentre eles temos o banco de dados UCBAdmissions, que é um array. Para vê-lo basta digitar UCBAdmissions desta forma e executar.
CAPÍTULO 2.
TIPOS DE OBJETOS
16
2.4 Data-frames Data-frames são objetos que podem armazenar elementos de mais de um tipo, diferentemente de vetores matrizes e arrays, que forçam todos os seus elementos a serem de um mesmo tipo. Sua estrutura é semelhante a de uma matriz, sendo que, aqui todas as colunas são tratadas individualmente. A função usada para criar data-frames é data.frame(). Segue um exemplo: > d1=data.frame(individuo=x7,altura=c(1.65,1.70,1.80));d1 individuo altura 1 fulano 1.65 2 ciclano 1.70 3 beltrano 1.80
Podemos ver que a primeira coluna de d1 é formada por caracteres e a segunda é constituída por valores numéricos. Vale observar que, dentro de cada coluna de um data-frame continua-se tendo a restrição dos elementos serem do mesmo tipo. O tratamento individual é apenas entre as colunas. Um data frame 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 o sí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, para isso 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.
CAPÍTULO 2.
TIPOS DE OBJETOS
17
2.5 Listas Lista é uma coleção de objetos, ou seja, podemos organizar vários objetos de tamanho e/ou tipos diferentes em uma lista. A função usada para criar uma lista é list(). Vejamos um exemplo: > l1=list(A=1:10,B="caractere",C=matrix(1:4,nc=2));l1 $A [1] 1 2 3 4 5 6 7 8 9 10 $B [1] "caractere" $C
[,1] [,2] [1,] 1 3 [2,] 2 4
Aqui temos uma lista formada por três objetos de tipos e tamanhos diferentes. Primeiro temos um vetor numérico, depois temos um caractere e por último temos uma matriz. Há duas maneiras de selecionar elementos de uma lista. A primeira é usando colchetes simples [ ]. Neste caso o elemento selecionado ainda será uma lista. A segunda é usando colchetes duplos [[ ]] e neste caso, será retornado o objeto que está na 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
CAPÍTULO 2.
TIPOS DE OBJETOS
18
2.6 Funções Como já citado anteriormente, no R funções são também objetos. Estas possuem uma lista de argumentos cujos valores, quando não padronizados, devem ser informados pelo usuário (input). O retorno (output) fornecido pelas funções pode ser um objeto de qualquer classe, ou um valor de qualquer natureza ( caracter, numérico, etc). No R, a maioria das funções são escritas com a própria linguagem R. Para estas, é possível visualizar seu conteúdo digitando o nome da função desejada, por exemplo: > matrix function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) { data read.table("dados - livro aberto-fechado.csv",header=T,sep=";") mec.f vet.f alg.a ana.a est.a 1 77 82 67 67 81 2 63 78 80 70 81 3 75 73 71 66 81
Em arquivos csv, os campos são separados por ponto e vírgula, por isso a necessidade de fazer sep=; como visto no comando acima. 3. Importando um banco de dados txt diretamente da Internet read.table("http://www.ime.usp.br/~pam/D-IBV")
CAPÍTULO 2.
TIPOS DE OBJETOS
21
2.7.2 Importando planilhas do Microsoft Excel (Arquivos xls) É muito comum o uso de planilhas eletrônicas para confecção de banco de dados. Por isso imagina-se que a maioria dos usuários de R possua seus bancos de dados em formato xls. É claro que estes arquivos podem ser convertidos em formato txt ou csv (que é uma das opções de formato do Excel) e trazidos para o R usando a função read.table() conforme visto na subseção anterior. Porém, pode ser mais cômodo para o usuário trabalhar diretamente com seus arquivos xls, sem precisar gerar outros. Para importar arquivos em formato xls é preciso, primeiramente, baixar o pacote RODBC. Suponha que desejamos importar os dados que estão em um arquivo chamado Planilha.xls na 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 RODBC usando a função require(). Após isso criamos o objeto xlscon usando a função odbcConnectExcel, que abre a conexão do R com o Excel. Na terceira linha de comandos estamos criando o objeto dados1, que receberá os dados desejados. Para isso é utilizada a função sqlFecth que recebe como argumentos o objeto xlscon e o nome da planilha onde estão os dados (no caso 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 R ler o conteúdo do objeto dados1 que irá conter o banco de dados desejado.
Capítulo 3 Estatística Descritiva No R, temos um grande número de funções para a análise descritiva de dados. Resumos estatísticos, bem como distribuições de frequências, cálculo de correlaçõ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áca de dados. As rotinas grácas de R, são um dos principais atrativos desse software, por conta da grande exibilidade e versatilidade que estas oferecem ao usuário. Portanto, antes de prosseguirmos com a análise descritiva de dados iremos apresentar as principais funções grácas disponíveis no R, uma vez 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 categorias: • Funções grácas de alto nível, que criam novos grácos na janela grá-
ca, denindo os eixos, etiquetas, títulos, etc.
• Funções de baixo nível, que permitem adicionar novas informações a
grá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 dispositivo apontador, 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 informados como argumento para a função. A principal função dessa categoria 22
CAPÍTULO 3.
ESTATÍSTICA DESCRITIVA
23
é a função plot() cuja descrição é: plot(x,y,...): x e y são vetores de dados e as reticências indica que podem ser incluídos mais parâmetros (ver mais 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 produzirem exatamente o gráco pretendido. Neste caso, os comandos de baixo nível podem ser usados para adicionar alguma informação adicional ( tal como pontos, linhas ou texto) ao gráco atual. As funções de baixo nível mais 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). Geralmente, etiquetas é um vetor de valores inteiros ou de caracteres. abline(a,b) abline(h=y) abline(v=x)
O primeiro comando acrescenta uma reta com declive b e ordenada na origem a ao gráco atual. A opção h = y representa uma linha à altura y ; a opção v = 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 utilizando o mouse. A principal delas é a função locator(): locator(n,type): Permite ao usuário selecionar regiões do gráco usando o 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 terminar a seleção.
3.2 Parâmetros grácos. A função par() A função par() é usada para modicar, de forma permanente, a lista dos parâmetros grácos do dispositivo gráco atual. A maioria dos parâmetros da função par() podem ser usadas diretamente como parâmetros adicionais das 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:
CAPÍTULO 3.
ESTATÍSTICA DESCRITIVA
24
par(=, no.readonly=FALSE)
Segue abaixo a descrição de seus argumentos: • no.readonly: Argumento lógico. Se especicado igual a TRUE e não
houver outros argumentos na função, então será retornado uma lista com os parâmetros grácos que poderam ser ajustados em uma chamada subsequente de "par".
• adj: O valor de adj determina a forma que o texto (Strings) será
justicados.
1. 0 para justicar o texto à esquerda 2. 0,5 para centralizar o texto 3. 1 para justicar o texto à direita é permitido também qualquer valor no intervalo [0,1] e em muitos dispositivos também funcionam valores fora deste intervalo. Para a função text temos a seguinte forma: adj=c(x, y) onde x e y determinam, respectivamente, a justicação e a direção do texto. • ann: Argumento lógico. Se especicado FALSE então, para funções
grá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 antes
que uma nova gura seja plotada.
• bg: Especica a cor a ser usada no fundo dos grácos. Ver mais adiante
a especicaçã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 especicado um dos seguintes caracteres (entre aspas): "o", "l", "7", "c", "u", "]", a caixa resultante se assemelha-rá a forma da correspondente letra maiúscula. O valor "n"(entre aspas) suprime a caixa.
• cex: Valor numérico que dene a scala do texto e dos símbolos grácos
em relação ao valor padrão.
• cex.axis: Especica a ampliação a ser utilizada para a notação sobre
os eixos em relação ao valor atual.
• cex.lab: Especica a ampliação a ser usada nos títulos dos eixos x e y em relação ao valor atual.
CAPÍTULO 3.
ESTATÍSTICA DESCRITIVA
25
• cex.main: Especica a ampliação a ser usada nos títulos principais dos
grácos em relação ao valor atual.
• cex.sub: Especica a ampliação a ser usada nos subtítulos em relação
ao valor atual.
• cin: R.O.; Tamanho do caractere (largura, altura) em polegadas. • col: Para especicar as cores dos símbolos a serem plotados. As
cores podem ser especicadas das seguintes formas: con uma cadeia de caracteres dando o nome da cor (em inglês) entre aspas, por exemplo "blue". Uma lista de possíveis cores pode ser obtida com a função colors. Outra maneira de especicar cores é em termos de componentes RGB com uma cadeia da forma "#RRGGBB"onde cada um dos pares RR, GG, BB consiste em dígitos hexadecimais com valores na faixa 00 a FF. As cores também podem ser especicadas por um índice de uma pequena tabela de cores que é compatível com S. Também as funções rgb, hsv, gray e rainbow proporcionam formas adicionais de gerar cores.
• col.axis: Usado para especicar a cor das notações sobre os eixos • col.lab: Usado para especicar a cor a ser usada nos títulos dos eixos
X"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 especicar em graus como devem ser
rotacionados os caracteres individuais. Devem ser usados apenas valores múltiplos de 90.
• csi: R.O.; Especica a altura em polegadas dos caracteres. • cxy: R.O.; Retorna um vetor do tipo (largura, altura) com o tamanho
padrã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ão
gráca não são plotados.) Para o grau de relatório de erro desejado.
CAPÍTULO 3.
ESTATÍSTICA DESCRITIVA
26
• fg: Especica a cor a ser usada no primeiro plano dos grácos. Esta é a
cor 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 especica o tamanho da
região da gura em polegadas.
• font: Um número inteiro que especica a fonte a ser usada no texto,
de modo que: -
1 corresponde a 2 corresponde a 3 corresponde a 4 corresponde a
texto simples texto em negrito texto em itálico e texto em itálico-negrito
• font.axis: Usado para especicar o tipo de letra a ser utilizada nas
notações sobre os eixos.
• font.lab: Usado para especicar o tipo de letra a ser usada nos títulos
dos eixos.
• font.main: Tipo de letra a ser usada nos títulos principais dos grácos. • font.sub: Especica o tipo de fonte a ser usada nos subtítulos dos
grá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 modica a forma
de notação dos eixos. Os valores de x e y especicam o número aproximado de marcas de escala nos eixos x e y, respectivamente, len especica o tamanho das notações sobre os eixos, no entanto, atualmente ainda 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 especica o estilo da
notação dos eixos:
- 0: sempre paralelo ao eixo (valor padrão); - 1: sempre horizontal; - 2: sempre perpendicular ao eixo;
CAPÍTULO 3.
ESTATÍSTICA DESCRITIVA
27
- 3: sempre vertical. Note que a rotação de cadeias de caracteres ou de caracteres individuais ( via par(srt=...)) não afeta os rótulos dos eixos. • lty: Usado para especicar o tipo de linha. Os tipos são especicados
com um número inteiro
• lwd: Um número inteiro para determinar a largura da linha. o valor
padrão é 1.
• mai: Um vetor numérico da forma c(abaixo, esquerda, acima, direita)
que dá os tamanhos das margens especicados em polegadas.
• mar: Um vetor numérico da forma c(abaixo, esquerda, acima, dire-
ita) a partir do qual especicamos o número de linhas entre as margens 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 único valor numérico. Para um bom funcionamento deste argumento use valores no intervalo (0, 3].
• mfcol, mfrow: Um vetor da forma c(nl, nc). As guras seguintes
apareceram em um único dispositivo gráco como se fossem elementos de uma matriz nl × nc, ordenadas por coluna (se for utilizado mfcol) ou por linha (se for utilizado mfrow). Alternativas a este argumento sã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 ser previamente ajustada por par(mfcol=c(...)) ou par(mfrow=c(...)).
• mgp: Um vetor da forma c(t, n, e) especicando a distância ( em unidades
"mex") dos títulos dos eixos, notações dos eixos e eixos, respectivamente, à margem da gura. O valor padrão é c(3, 1, 0).
• mkh: Especica a altura em polegadas dos símbolos a serem plotados quando o valor de pch é um inteiro. Atualmente este é completamente
ignorado.
• new: Argumento lógico. O valor padrão é FALSE, se for especicado como TRUE o comando gráco de alto nível seguinte não limpará a
janela atual, sobrepondo a nova gura à gura anterior.
CAPÍTULO 3.
ESTATÍSTICA DESCRITIVA
28
• oma: Um vetor da forma c(abaixo, esquerda, acima, direita) que dá o
tamanho das margens exteriores em linhas de texto.
• omd: Um vetor da forma c(x1,x2,y1,y2) usado para especicar outras
margens a região interna da gura em NDC (normalized device coordinates), 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-
pecicar o tamanho das margens exteriores em polegadas.
• pch: Pode ser um número inteiro ou um caractere a ser usado como padrão em grácos de pontos. Possíveis valores de pch são especicados no documento de ajuda da função points. • pin: Especica as dimensões do gráco atual (largura, altura), em
polegadas.
• plt: Um vetor da forma c(x1, x2, y1, y2) que dá as coordenadas da
regiã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 dos
eixos.
• pty: Um caractere entre aspas para especicar o tipo de região gráca
a 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 especicar a longitude dos marcadores de escala como
uma 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 altura de uma linha de texto. O valor padrão é −0.5. • type: Um caractere entre aspas que determina o tipo de gráco a ser
plotado. Possíveis valores deste argumento estão descritos no documento de ajuda da função plot.
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 estiver sendo 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 coordenadas
dos marcadores de escala e o número de intervalos entre estes no eixo x.
• xaxs: O estilo de cálculo de intervalo de eixo para o eixo x. Seus
possí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 sabermos quais são os tipos de variáveis disponíveis. As variáveis são classicadas do seguinte modo:
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 oriundos de 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 objeto adequado ao armazenamento é um data-frame. O usuário pode digitar os dados 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 denido o objeto PA que é o data-frame contendo os dados. Após digitado, se houver necessidade de alguma alteração nos dados isso pode ser feito usando a função fix() do seguinte modo: fix(PA)
Precisamos também do comando attach(PA) para trabalharmos com as colunas do objeto como variáveis. Vamos examinar então as seis primeiras linhas do objeto PA: > PA[1:6,] Categoria Idade Peso Altura IMC Classe_IMC Cintura Quadril RCQ Closse 1 Ativa 61 58.2 154 24.5 normal 87 109 0.80 MR 2 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 caracteres válidos para nomear objetos, e além disso, um objeto com o nome de Altura(cm), por exemplo, seria entendido como função. As variáveis qualitativas devem ser do tipo fator. Devemos então redenir estas variáveis usando a função factor(). Por exemplo, para a variável Categoria temos:
CAPÍTULO 3.
31
ESTATÍSTICA DESCRITIVA
Tabela 3.1: Pesquisa antropométrica realizada em mulheres idosas acima de 60 anos que receberam atendimento no Hospital do Idoso em Dezembro de 2008 Categoria
Idade
Ativa Sedentária Sedentária Sedentária Ativa Sedentária Sedentária Sedentária Ativa Sedentária Sedentária Sedentária Sedentária Sedentária Sedentária Ativa Ativa Ativa Ativa Ativa Ativa Ativa Ativa Ativa Ativa Ativa Ativa Ativa Ativa Ativa Ativa Ativa Sedentária Sedentária Sedentária Sedentária Sedentária Sedentária Sedentária Ativa Sedentária Sedentária Sedentária Sedentária
61 69 61 71 63 71 72 68 66 69 72 67 63 66 63 63 67 71 63 60 69 64 63 66 71 64 70 63 66 64 69 69 64 63 72 73 68 71 72 69 68 68 73 79
Peso (Kg) 58,2 63,0 70,1 73,2 58,6 77,0 76,2 59,8 64,3 52,1 62,0 52,1 58,0 55,0 50,1 57,9 56,2 68,6 51,0 53,4 61,3 53,2 54,6 56,2 60,3 54,7 60,0 51,3 50,0 49,8 55,2 58,2 51,6 62,7 75,6 65,2 61,8 64,3 59,2 63,4 66,0 61,7 68,2 60,1
Altura (cm) 154,0 152,0 158,0 156,0 152,0 160,0 165,0 160,0 155,0 151,0 156,0 151,0 157,0 154,0 157,0 160,0 152,0 159,0 150,0 150,0 154,0 158,0 150,0 152,0 156,0 158,0 160,0 154,0 153,0 150,0 156,0 160,0 156,5 153,0 165,0 154,0 152,0 150,0 153,0 163,0 160,0 158,0 155,0 160,0
IMC 24,5 27,3 28,1 30,1 25,4 30,1 28 23,4 26,8 22,8 25,5 22,8 23,5 23,2 20,3 22,6 24,3 27,1 22,7 23,7 25,8 21,3 24,3 24,3 24,8 21,9 23,4 21,6 21,4 22,1 22,7 22,7 21,1 26,8 27,8 27,5 26,7 28,6 25,3 23,9 25,8 24,7 28,4 23,5
Classe IMC normal sobrepeso sobrepeso sobrepeso sobrepeso sobrepeso sobrepeso normal sobrepeso normal sobrepeso normal normal normal normal normal normal sobrepeso normal normal sobrepeso normal normal normal normal normal normal normal normal normal normal normal normal sobrepeso sobrepeso sobrepeso sobrepeso sobrepeso sobrepeso normal sobrepeso normal sobrepeso normal
Cintura (cm) 87 89 106 110 99 125 115 85 100 74 90 76 80 78 72 78 76 106 71 76 89 73 80 84 82 76 81 76 76 72 81 78 76 90 98 96 82 78 73 93 90 90 107 92
Quadril (cm) 109 104 123 122 121 132 125 103 120 83 111 90 102 96 81 90 95 117 83 89 106 86 108 110 99 95 104 89 87 106 98 90 87 103 110 110 93 89 82 120 117 116 120 110
RCQ 0,80 0,86 0,86 0,90 0,82 0,95 0,92 0,83 0,83 0,89 0,81 0,84 0,78 0,81 0,89 0,87 0,80 0,91 0,86 0,85 0,84 0,85 0,74 0,76 0,83 0,80 0,78 0,85 0,87 0,68 0,83 0,87 0,87 0,87 0,89 0,87 0,88 0,88 0,89 0,78 0,77 0,78 0,89 0,84
Classe RCQ KCQ MR GR GR GR MR GR GR MR MR GR MR MR MR MR GR GR MR GR GR MR MR MR PR PR MR MR MR MR GR PR MR GR GR GR GR GR GR GR GR MR PR MR GR MR
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íamos também entrar com estes dados através da importação de um arquivo externo, como foi visto na subseção 2.2. Neste caso, não há necessidade de redenir as variáveis qualitativas como fator, pois as funções de importação de dados já o fazem automaticamente, desde que os valores destas sejam caracteres.
3.3.1 Descrição Univariada Consiste em classicar, 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 variável.
Variável qualitativa Vamos escolher a variável Categoria para ilustração. Podemos obter uma tabela de frequências simples e relativas, um gráco de setores ou de colunas e a "moda"como medida resumo. As frequências simples e relativas são obtidas da seguinte forma: > Cat.freq=table(Categoria) > Cat.freq Categoria Ativa Sedentária 22 23 >Cat.prop=prop.table(Cat.freq) >Cat.prop Categoria Ativa Sedentária 0.4888889 0.5111111
Se quisermos o percentual basta fazer: > Cat.perc=100*Cat.prop > Cat.perc
CAPÍTULO 3.
ESTATÍSTICA DESCRITIVA
33
Categoria Ativa 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 informações acima com um único comando. Vejamos: > describe.factor(Categoria) Factor Ativa Sedentária x 22 23 Percent 48.89 51.11 mode = Sedentária Valid n = 45
Onde os valores de x são as frequências simples, Percent retorna os percentuais e mode a moda. Vamos obter agora um gráco de barras e um em setores. > 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 comando trocamos a cor das colunas, aumentamos o espaço entre estas, adicionamos um título ao eixo y e aumentamos o seu limite. Vamos agora gerar um gráco de 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ção interativa locator() para poder inserir os percentuais em cada setor do gráco.
CAPÍTULO 3.
ESTATÍSTICA DESCRITIVA
Figura 3.1: Gráco de barras para a variável Categoria com padrão do R
34
Figura 3.2: Gráco de barras para a variável Categoria com alguns ajustes
Variável quantitativa discreta Para este tipo de variáveis temos uma maior variedade de representações grácas e também de medidas resumo. Vamos tomar então a variável Idade como exemplo. Podemos, da mesma forma que zemos para as variáveis qualitativas, obter tabelas de frequências absoluta e relativas. > Ida.freq=table(Idade) > Ida.freq Idade 60 61 63 64 66 67 68 69 70 71 72 2 2 8 4 4 2 4 6 1 5 4 > Ida.prop=prop.table(Ida.freq) > Ida.prop Idade 60 61 63 0.04444444 0.04444444 0.17777778 68 69 70 0.08888889 0.13333333 0.02222222 79 0.02222222 > Ida.perc=100*Ida.prop > Ida.perc Idade
73 79 2 1
64 66 67 0.08888889 0.08888889 0.04444444 71 72 73 0.11111111 0.08888889 0.04444444
CAPÍTULO 3.
ESTATÍSTICA DESCRITIVA
35
Figura 3.3: Gráco em setores para a variável Categoria 60 4.444444 69 13.333333
61 63 64 66 67 4.444444 17.777778 8.888889 8.888889 4.444444 70 71 72 73 79 2.222222 11.111111 8.888889 4.444444 2.222222
68 8.888889
Podemos obter várias medidas resumo para esta variável, abaixo segue algumas delas. Para os coecientes de assimetria e curtose é necessário instalar o 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
CAPÍTULO 3.
ESTATÍSTICA DESCRITIVA
36
> Ida.quartis=quantile(Idade,probs = seq(0, 1, 0.25));Ida.quartis 0% 25% 50% 75% 100% 60 63 68 71 79 > #Os dez primeiros percentis > Ida.percentis=quantile(Idade,probs = seq(0, 1, 0.01)) > Ida.percentis[1:10] 0% 1% 2% 3% 4% 5% 6% 7% 8% 9% 60.00 60.00 60.00 60.32 60.76 61.00 61.00 61.16 62.04 62.92 > #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.dq 75% 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 representada gracamente 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")
CAPÍTULO 3.
37
ESTATÍSTICA DESCRITIVA
Podemos obter algumas medidas de uma só vez utilizando a função summary(). > summary(Idade) Min. 1st Qu. Median 60.0 63.0 68.0
Mean 3rd Qu. 67.2 71.0
Max. 79.0
Figura 3.4: Gráco de frequências absolutas da variável Idade
Figura 3.5: Gráco Boxplot da variável Idade
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. Desta forma, ao invés de termos uma tabela de frequências simples ou relativas para cada valor observado, teremos as frequências para cada classe. No R, podemos denir classes em uma variável usando a função cut(). Vamos entã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 pontos de cortes. Esses pontos de cortes irão corresponder aos limites inferior e superior de cada classe. Uma maneira simples de denir 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 ca então a tabela de frequências simples. > > > > > > > 1 2 3 4 5 6 7
Peso.freq=table(cut(Peso,seq(min(Peso),max(Peso),l=8))) Peso.prop=prop.table(Peso.freq) Peso.perc=100*Peso.prop Peso.df=data.frame(Peso.freq,Peso.prop,Peso.perc) Peso.cl=Peso.df[,-c(3,5)] colnames(Peso.cl)=c("Peso","Freq simples","Freq relativa","Percentual") Peso.cl Peso Freq simples Freq relativa Percentual (49.8,53.7] 9 0.20454545 20.454545 (53.7,57.6] 6 0.13636364 13.636364 (57.6,61.5] 12 0.27272727 27.272727 (61.5,65.3] 9 0.20454545 20.454545 (65.3,69.2] 3 0.06818182 6.818182 (69.2,73.1] 1 0.02272727 2.272727 (73.1,77] 4 0.09090909 9.090909
Veja que aqui já concatenamos em uma mesma tabela as frequências simples, relativa e os percentuais. As medidas resumo não diferem daquelas mostradas para o caso discreto. Vejamos então: > #Média > peso.media=mean(Peso);peso.media
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.dq 75% 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
CAPÍTULO 3.
40
ESTATÍSTICA DESCRITIVA
> #Curtose > peso.cur=kurtosis(Peso);peso.cur [1] 0.05477938 > #Distribuição leptocúrtica > summary(Peso) Min. 1st Qu. Median Mean 3rd Qu. 49.80 54.70 59.20 59.99 63.40
Max. 77.00
A representação gráca é feita especicamente, através de histogramas que é um gráco de colunas contíguas, com bases proporcionais aos intervalos das classes e a área de cada retângulo proporcional à respectiva frequência. No R, usamos a função hist(), para gerar um histograma. Vejamos então o relativo à 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 diagrama Ramos-e-Folhas. A função utilizada é stem(). Por exemplo, um Ramo-eFolha para a variável IMC é obtido da seguinte forma:
CAPÍTULO 3.
ESTATÍSTICA DESCRITIVA
41
> stem(IMC) The decimal point is at the | 20 21 22 23 24 25 26 27 28 29 30
| | | | | | | | | | |
3 13469 1677788 24455799 333578 34588 788 1358 0146 11
3.3.2 Descrição Bivariada Frequentemente estamos interessados em analisar o comportamento conjunto de duas ou mais variáveis, no intuito de encontrar possíveis relações entre estas. Assim como foi visto no caso univariado, as técnicas de análise dependerã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 de dupla entrada onde cada elemento desta representa a frequência observada das realizações simultâneas das duas variáveis em estudo. Vamos tomar como exemplo as variáveis Categoria e Classe IMC. Como vimos no caso univariado a tabela de frequências absolutas é dada pela função table(): > cat.cimc.tab=table(Categoria,Classe_IMC);cat.cimc.tab Classe_IMC Categoria normal sobrepeso Ativa 18 4 Sedentária 9 14
CAPÍTULO 3.
ESTATÍSTICA DESCRITIVA
42
No caso de frequências relativas, existem três possibilidades de expressarmos a 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_IMC Categoria normal sobrepeso Ativa 0.40000000 0.08888889 Sedentária 0.20000000 0.31111111 > > #Prop. em relação ao total de cada linha > > prop.table(cat.cimc.tab,mar=1) Classe_IMC Categoria normal sobrepeso Ativa 0.8181818 0.1818182 Sedentária 0.3913043 0.6086957 > > #Prop. em relação ao total de cada coluna > > prop.table(cat.cimc.tab,mar=2) Classe_IMC Categoria normal sobrepeso Ativa 0.6666667 0.2222222 Sedentária 0.3333333 0.7777778
Primeiro dividimos cada elemento da tabela pelo total geral, obtendo assim a primeira representação. Note que para obtermos as proporções com relação às linhas 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 como ilustra a gura 7. > barplot(cat.cimc.tab,legend=T) > barplot(cat.cimc.tab,legend=T,beside=T)
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ística chi-quadrado dada por: χ2 =
k X (oi − ei )2 i=1
ei
onde oi e ei são, respectivamente, frequências observadas e esperadas nas k posições da tabela de dupla entrada. Outras medidas derivadas desta são o coeciente de contingência C e o coeciente de contingência modicado T : s 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 da tabela. Vamos ver então como obter estas medidas. > #Teste de associação > summary(cat.cimc.tab) Number of cases in table: 45 Number of factors: 2 Test for independence of all factors: Chisq = 8.538, df = 1, p-value = 0.003479 > #Vendo os valores de summary(cat.cimc.tab) > names(summary(cat.cimc.tab)) [1] "n.vars" "n.cases" "statistic" "parameter" "approx.ok" "p.value" [7] "call"
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 quantitativa em cada nível da variável qualitativa. Vamos tomar então as variáveis RCQ e Classe_RCQ para exemplicar este conceito. Inicialmente iremos obter uma tabela de frequências simples, para isso vamos agrupar a variável RCQ em 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.cl Classe_RCQ (0.68,0.77] (0.77,0.86] (0.86,0.95] GR 0 3 17 MR 0 20 0 PR 4 0 0
As tabelas de 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.38636364 MR 0.00000000 0.45454545 0.00000000 PR 0.09090909 0.00000000 0.00000000
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.85 MR 0.00 1.00 0.00 RCQ.cl Classe_RCQ (0.68,0.77] (0.77,0.86] (0.86,0.95] GR 0.0000000 0.1304348 1.0000000 MR 0.0000000 0.8695652 0.0000000 PR 1.0000000 0.0000000 0.0000000
Uma possível representação gráca deste cruzamento seria um boxplot onde no eixo y teremos a variável quantitativa, no caso, RCQ e no eixo x os níveis da 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 PR 0.8845 0.8175 0.7380
CAPÍTULO 3.
ESTATÍSTICA DESCRITIVA
46
> #Medianas > tapply(RCQ,Classe_RCQ,median) GR MR PR 0.880 0.825 0.740 > #Quantis > tapply(RCQ,Classe_RCQ,quantile) $GR 0% 25% 50% 75% 100% 0.86 0.87 0.88 0.89 0.95 $MR 0% 25% 50% 75% 100% 0.780 0.800 0.825 0.840 0.850 $PR 0% 25% 50% 75% 100% 0.68 0.74 0.74 0.76 0.77 > #Variâncias > tapply(RCQ,Classe_RCQ,var) GR MR PR 0.0005102632 0.0006302632 0.0012200000 > #Desvios-padrão > tapply(RCQ,Classe_RCQ,sd) GR MR PR 0.02258901 0.02510504 0.03492850
Quantitativa vs Quantitativa Quando as variáveis envolvidas são ambas do tipo quantitativo, procedemos de forma similar ao que havia sendo feito. Para obter uma tabela de frequências, por exemplo, devemos agrupar as variáveis em classes. Vejamos um exemplo utilizando as variáveis Peso e IMC. Vamos inicialmente agrupar cada uma em duas classes. > > > > >
#Agrupando as var. em duas classes peso.cl=cut(Peso,seq(min(Peso),max(Peso),l=3)) IMC.cl=cut(IMC,seq(min(IMC),max(IMC),l=3)) #Frequências simples pe.imc.tb=table(peso.cl,IMC.cl);pe.imc.tb IMC.cl
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 obtivemos para os casos anteriores. Recomenda-se ao leitor fazê-lo como exercício. Um dispositivo muito útil para representar e se vericar a associação entre duas variá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 quanticar a correlação entre duas variáveis quantitativas devemos usar algum coeciente de correlação. A função cor() oferece três opções de coecientes, tendo como padrão o coeciente 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
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 mais um pouco os recursos grácos. Iremos acrescentar mais algumas informações aos grácos mostrados anteriormente.
Gráco de setores com sombra: Vamos gerar o mesmo gráco de setores feito 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)
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 > > > > > > +
ESTATÍSTICA DESCRITIVA
barplot(xhist$counts,axes=FALSE, ylim=c(0, top), space=0, col=1, density=20, angle=-45) #Definir as margens da terceira figura par(mar=c(4,0,1,1)) #Plotar o histograma marginal no eixo y barplot(yhist$counts, axes=FALSE, xlim=c(0, top),space=0, col=1, density=20, angle=-45,horiz=TRUE)
Figura 3.10: Gráco em setores com efeito de sombra
50
CAPÍTULO 3.
ESTATÍSTICA DESCRITIVA
Figura 3.11: Gráco de dispersão com boxplots marginais
Figura 3.12: Gráco de dispersão com histogramas marginais
51
CAPÍTULO 3.
ESTATÍSTICA DESCRITIVA
52
Note que, nos histogramas marginais acrescentamos linhas como preenchimento. Isso foi feito utilizando o argumento density que dene o número de linhas a serem plotadas e angle, que dene o anglo de inclinação das linhas.
Capítulo 4 Probabilidade e Inferência O objetivo deste capítulo é mostrar de que forma podemos utilizar o R para trabalhar com distribuições de probabilidade, gerar amostras aleatórias, estimar parâmetros de uma população, etc. É conveniente, antes de iniciarmos este estudo, aprendermos como denir nossas próprias funções. Note que, na subseção 3.3.3 já utilizamos este recurso. Falaremos também sobre ordens de controle, já que estas são habitualmente usadas na construção de funções.
4.1 Controle de uxo e denição de funções Assim como em qualquer outra linguagem de programação, a linguagem R possui várias instruções destinadas a alterar a sequência normal de execução dos comandos. Vejamos então algumas.
4.1.1 Execução condicional Instruções condicionais permitem ao usuário executar várias alternativas dependendo 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 ou TRUE), é calculada a expressão expres_2; caso contrário, e se a instrução contém a expressão else, será executada a expressão expres_3. Essas expressões geralmente são construídas com o uso de operadores. Abaixo podemos ver a descrição dos operadores básicos da linguagem R.
53
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 se
aplica a todos os elementos de um vetor, e o segundo aplica-se a vetores de comprimento unitário. • | e || : Indica o argumento lógico (OR ou OU). 2. Operadores Relacionais: • < : Menor • > : Maior • = : 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úmero natural), e expres_2 é uma expressão, frequentemente agrupada, em cujas
CAPÍTULO 4.
PROBABILIDADE E INFERÊNCIA
55
sub-expressões pode aparecer a variável de controle; esta expressão é calculada repetidamente à medida que a variável de controle nome percorre os valores da expres_1. O exemplo a seguir ilustra este procedimento. > a=c(1,2,3,4) > b=c(5,6,7,8) > c=numeric(length(a)) > for(i in 1:4){ + c[i]=a[i]+b[i] + } > > c [1] 6 8 10 12
Aqui o for é utilizado para percorrer os vetores a e b somando cada um de seus elementos e criando assim o vetor c. Outras estruturas de ciclos são: > repeat expressão
e
> while (condição) expressão
Vamos repetir o exemplo anterior utilizando while > d=numeric(length(a)) > i=1 > while(i d [1] 6 8 10 12
4.1.3 Denindo 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 que torna mais simples e prática a posterior utilização destes. Desta forma, a linguagem R ganha considerável poder e elegância. Uma função é denida com a seguinte declaração: > Nome_da_Função=function(arg1, arg2, ...) expressão
A nova função geralmente é chamada da seguinte forma:
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 deste recurso através de um exemplo simples. Neste criamos a função fatorial que 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 com distribuições de probabilidade. Aqui vamos resumir algumas delas, com o objetivo de ilustrar o uso destas funções. As operações básicas com distribuições de probabilidade são: cálculo de densidade de probabilidade, cálculo de probabilidade acumulada, obtenção de quantis e geração de números aleatórios. No R estas operações são representadas, respectivamente, pelas letras: 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 diz respeito a uma probabilidade. E nos comandos precedidos de r o primeiro argumento especica o tamanho da amostra aleatória a ser gerada. Por exemplo, para gerar números aleatórios da distribuição exponencial devemos usar a função rexp(), ou seja, devemos escrever o prexo da distribuição precedido da letra que indica a operação desejada. O usuário pode consultar a ajuda do R para ver os prexos de várias distribuições de probabilidade.
CAPÍTULO 4.
PROBABILIDADE E INFERÊNCIA
57
4.2.1 Distribuição Normal A distribuição normal é referenciada no R pelo prexo norm. Os argumentos padrão das funções referentes à distribuição normal assumem a normal padrã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 , o que corresponde a mediana da distribuição. Note que antes do comando de geração de números aleatórios, usamos a função set.seed(). Esta associa a amostra aleatória gerada a um número (no nosso exemplo foi utilizado 12). Portanto, a mesma amostra aleatória poderá ser obtida várias vezes. Se este não for utilizado, a cada repetição do comando de geração de números aleatórios uma novos números seram gerados. Podemos repetir estas operações com qualquer distribuição normal, bastando para isso, dar valor aos argumentos mu e sd, onde são especicados, respectivamente, a média e o desvio padrão. Para ver a descrição completa dos argumentos, basta executar: ?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 gracamente a probabilidade P (N (100, 100) ≤ 90) = 0, 159. Isso pode ser feito utilizando a função polygon().
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 distribuiçã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 a seguinte propriedade M d = X = M0 , ou seja, a sua mediana, média e moda são iguais. Am de ilustrar esta propriedade vamos construir uma função que retorne a moda de uma distribuição normal. Para encontrar o argumento que maximiza a função usaremos a função opitmize(). Esta examina 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().
CAPÍTULO 4.
PROBABILIDADE E INFERÊNCIA
59
Figura 4.2: Algumas funções de densidade e funções de distribuição da distribuiçã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) da distribuição normal especicada. 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 conrmar, como exercício, que os valores acima são também as medianas destas normais.
CAPÍTULO 4.
PROBABILIDADE E INFERÊNCIA
60
4.2.2 Distribuição t-Student No R a distribuição t-Student é referenciada pelo prexo t. Para ver a descrição completa dos argumentos, basta executar ?TDist. Vejamos algumas operaçõ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 especica o grau de liberdade da distribuição t. A distribuição t-Student se aproxima da distribuição normal quando o grau de liberdade aumenta. Na Figura 16 ilustramos essa propriedade. #Densidades t curve(dnorm(x),-4,4,ylab="f(x)",lty=2) curve(dt(x,1),-4,4,add=T,col=2) curve(dt(x,3),-4,4,add=T,col=3) curve(dt(x,8),-4,4,add=T,col=4) curve(dt(x,15),-4,4,add=T,col=5) legend("topleft",c("N (0,1)","t (1)","t (3)", "t (8)","t (15)"),col=1:5,lty=c(2,1,1,1,1)) #Funções de distribuição t curve(pnorm(x),-4,4,ylab="F(x)",lty=2) curve(pt(x,1),-4,4,add=T,col=2) curve(pt(x,3),-4,4,add=T,col=3) curve(pt(x,8),-4,4,add=T,col=4) curve(pt(x,15),-4,4,add=T,col=5) legend("topleft",c("N (0,1)","t (1)", "t (3)","t (8)","t (15)"),col=1:5,lty=c(2,1,1,1,1))
Da mesma forma que foi feito para a distribuição normal, vamos implementar uma função que retorne a moda distribuição t. Vamos chamar esta função de Moda_t().
CAPÍTULO 4.
PROBABILIDADE E INFERÊNCIA
61
Figura 4.3: Comparativo entre a distribuição t-Student e a distribuição normal > Moda_t=function(gl){ + fn=function(x){dt(x,df=gl)} + op=optimize(fn,c(-3,3),maximum=T) + return(round(op$maximum,1)) + } > > Moda_t(1) [1] 0 > Moda_t(5) [1] 0 > Moda_t(10) [1] 0 > Moda_t(30) [1] 0
Podemos ver que a moda da 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 argumentos pode ser vista executando ?FDist. Vejamos então alguns exemplos.
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 especicam os graus de liberdade da distribuição F. Na Figura 17 temos os grácos da função de densidade e 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)
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 vericar que a moda da distribuição F-Snedecor é dada por: gl1 − 2 gl2 gl1 gl2 + 2
para gl1 > 2
4.2.4 Distribuição Gama A referência da distribuição gama no R é gamma. Esta distribuição possui como casos particulares a distribuição exponencial e a distribuição quiquadrado. 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)
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, que chamaremos de parametrização 1, a sua função de densidade é a seguinte: f (x) =
1 θα Γ(α)
x xα−1 exp (− )1l(0,∞) (t) θ
onde, o parâmetro de forma α e o parâmetro de escala θ são especicados, respectivamente 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/θ é especicado pelo parâmetro rate. Alguns grácos da função de densidade da distribuição gama para os dois tipos de parametrização podem 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)
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ção Qui-quadrado com k graus de liberdade (Notação: χ2(k) ). Na Figura 19 ilustramos gracamente 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))
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, respectivamente, por (α − 1)θ e (α − 1)/β . Para o cálculo da moda foi construída a função Moda_gama(). Nesta função o argumento a especica o parâmetro de forma da gama e s, o parâmetro de escala. Além de p que especica o tipo de 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)
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 o argumento size onde devemos especicar o número de provas independentes de Bernoulli (Bussab e Morettin, 2005) e o argumento prob onde especicamos a probabilidade de sucesso. Vamos ilustrar algumas operações básicas com a distribuição binomial através da resolução de um problema extraído de Bussab e Morettin (2005).
Exemplo: Um curso de treinamento aumenta a produtividade de uma certa população de funcionários em 80% dos casos. Se dez funcionários quaisquer participam 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âmetros n = 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 probabilidade 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)
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 floor((10+1)*0.8) [1] 8
Deixa-se ao leitor, como exercício, construir uma função que generalize este procedimento.
CAPÍTULO 4.
PROBABILIDADE E INFERÊNCIA
69
4.2.6 Distribuição de Poisson A distribuição de Poisson é referenciada no R pelo prexo pois. A taxa média λ é especicada no argumento lambda. Para ver a descrição completa dos argumentos execute ?Poisson. Vejamos então algumas operações básicas com 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 probabilidade e 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 plot(ppois(1:40,1),ty="s",pch=16,lwd=7,col="yellow", + ylab=expression(P(X 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)
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) da distribuiçã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)
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ção verica se o λ especicado é inteiro através do teste l==trunc(l) e retorna uma lista com as duas modas caso este seja verdadeiro. Senão a função retornará bλc.
4.3 Inferência Nesta seção vamos utilizar o R para obter distribuições amostrais, ilustrar propriedades de estimadores, teoremas, etc. Além disso, mostraremos algumas 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 resultados da Estatística Matemática. O Teorema Central do Limite procura expressar o fato de que a média aritmética de n variáveis aleatórias independentes e identicamente distribuídas, denotada por X , tem uma distribuição cuja forma tende para uma forma limite que não depende da distribuição das variá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 X−µ √ média µ e variância σ 2 , 0 < σ < ∞. Então, a variável aleatória Z = σ/ n tem distribuição limite que é normal com média zero e variância um, isto é, √ n(X − µ) lim P ≤ z = Φ(z), n→∞ σ
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ção recebe como argumentos uma função que especica a população de referência, bem como a média e desvio-padrão desta (estabelecemos por padrão uma √ população uniforme com média 0.5 e desvio padrão 1/ 12. Além disso, podemos indicar um vetor contendo tamanhos de amostras e também o número de amostras simuladas. Esta função retornará os histogramas da variável Z para cada tamanho de amostra especicado. São também traçadas a curva teó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)
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 população exponencial com média 1 e desvio-padrão 1
CAPÍTULO 4.
PROBABILIDADE E INFERÊNCIA
75
Figura 4.12: Ilustração do TCL para amostras √ provenientes de uma populaçã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 de interesse de uma determinada população é necessário conhecermos a distribuição de seus estimadores desses parâmetros. Essas distribuições são chamadas distribuições amostrais. Vejamos, através de exemplos, como usar o R para obter distribuições amostrais. De forma geral, devemos seguir os seguintes 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 cada uma das N amostras simuladas. Pode-se ainda fazer um histograma
destas estimativas e vericar se este sugere algum modelo conhecido;
CAPÍTULO 4.
PROBABILIDADE E INFERÊNCIA
76
• Utilizar as amostras para obter estimativas da média e da variância
populacional.
Seja então a população X ∼ N (100, 10). Vamos considerar o parâmetro µ e Pn 2 2 2 i=1 (Xi −X) . Vamos ilustrar que σ e seus respectivos estimadores X e S = n−1 2 2 (n−1)S X ∼ N (µ, σn ) e σ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ância seja igual a (10/20) = 0, 5. Como vemos, as estimativas obtidas pela simulação são bem próximas do esperado. A pequena discrepância entre estes valores é devido estarmos trabalhando com um número nito de amostras. O leitor poderá também, ao repetir esse procedimento, obter estimativas diferentes dependendo do valor da semente aleatória xada. É esperado também que a distribuição das médias amostrais sejam normalmente distribuídas. Vamos então completar a ilustração fazendo um histograma com curva teórica para 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) 2
. Como visto anteriorVamos agora considerar a estatística P = (n−1)S σ2 2 mente esta tem distribuição χn−1 este fato fato garante que: E(S 2 ) = σ 2 e 2 )2 Var(S 2 ) = 2(σ . Ilustremos então estes resultados. n−1 > 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)
CAPÍTULO 4.
PROBABILIDADE E INFERÊNCIA
77
Figura 4.13: Histograma com curva teórica para as médias amostrais simuladas
Figura 4.14: Histograma com curva teórica para as estatísticas P obtidas das amostras simuladas b 2) ≈ As estimativas para a média e variância de S 2 encontradas foram E(S d 2 ) ≈ 10, 4338 estão bem próximas dos valores teóricos E(S 2 ) = 9, 9675 e Var(S 2 10 e Var(S 2 ) = 2(10) = 10, 5263. As distribuições das estatísticas X e 20−1 P de uma população normal são facilmente obtidas analiticamente. Por
CAPÍTULO 4.
PROBABILIDADE E INFERÊNCIA
78
meio de simulação podemos investigar distribuições amostrais mais complicadas de serem obtidas analiticamente. Por exemplo, a distribuição de S/X (coeciente de variação amostral). Considerando ainda a população X ∼ N (100, 10) vamos determinar a média e a variância da estatística cv = S/X . > set.seed(458) > amos3=matrix(rnorm(10000*20, mean = 100, sd = sqrt(10)), nc = 10000) > cv=apply(amos3,2,function(x){(sd(x)/mean(x))}) > mean(cv) [1] 0.03122713 > var(cv) [1] 2.589526e-05 b v ) ≈ 0, 031 e var(c Temos então as estimativas E(c c v ) ≈ 0, 000. Tomemos agora a população Y ∼ U [0, 10]. Vamos ilustrar a distribuição da estatística Yn = max(Y). Sabemos que se Y possui distribuição uniforme no intervalo [0, θ] a densidade de Yn é dada por: fYn (y) =
n n−1 y 1l(0,θ) (y) θn
(4.1)
Desta forma temos que: E(Yn ) =
nθ n+1
e
Var(Yn ) =
nθ2 (n + 1)2 (n + 2)
Vamos inicialmente obter estimativas para média e variância de Yn utilizando o mesmo procedimento anterior, agora considerando a população Y ∼ U [0, 10] e tomando N = 10000 e n = 20: > set.seed(459) > amos4=matrix(runif(10000*20,0,10), nc = 10000) > yn=apply(amos4,2,max) > mean(yn) [1] 9.525264 > var(yn) [1] 0.2026569 = Os valores teóricos obtidos através da densidade de Yn são E(Yn ) = 20×10 21 20×102 9, 5238 e Var(Yn ) = 212 ×22 = 0, 2061. Note que as estimativas obtidas através da simulação estão bem próximas destas. Vamos agora gerar um histograma para os máximos obtidos nas amostras simuladas e acrescentaremos neste a curva teórica 4.1.
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 obtidas das 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 verossimilhança. Vamos traçar curvas de verossimilhança e log-verossimilhança, ilustrar propriedades dos estimadores de verossimilhança, etc. Consideremos então X1 , X2 , . . . , Xn uma amostra aleatória da distribuição Poisson de parâmetro λ. A função de verossimilhança (L(λ)) e log-verossimilhança (l(λ)) são dadas por: L(λ) = e−nλ λ
P
xi
e
l(λ) = Σxi ln λ − nλ
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ácos indicando 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 feito com as funções points() e lines().
Nem sempre é possível encontrar formas fechadas para os estimadores de máxima verossimilhança. Nesses casos, as estimativas são encontradas por meio de métodos numéricos. No exemplo a seguir utilizaremos o método de Newton-Rapson para obter as estimativas dos parâmetros.
CAPÍTULO 4.
PROBABILIDADE E INFERÊNCIA
81
Figura 4.16: Gráco de L(λ) e l(λ) para uma amostra da população Poisson(λ = 2)
Exemplo (Kalbeisch, 1985): k = 5 diferentes doses de um inseticida são
aplicadas sobre condições padronizadas em uma amostra de uma espécie de inseto. Os resultados são mostrados na Tabela 2. Vamos assumir que p, a probabilidade de que um inseto morra, é relacionada com a dose através de um modelo logístico. Desejamos encontrar as estimativas de máxima ˆ. verossimilhança (ˆ α, β) Tabela 4.1: Dados de um Experimento Dose-Resposta Concentração 2,6 3,8 5,1 7,7 10,2 Log Concentração 0,96 1,34 1,63 2,04 2,32 Número de insetos ni 50 48 46 49 50 Número de mortos yi 6 16 24 42 44 Fração de mortos 0,12 0,33 0,52 0,86 0,88 Se diferentes insetos são usados com diferentes doses, os Yi0 s (número de insetos mortos) serão independentes e sua densidade de probabilidade conjunta é f (y1 , y2 , . . . , y5 ) =
5 Y ni i=1
yi
pyi i (1 − pi )ni −yi
CAPÍTULO 4.
82
PROBABILIDADE E INFERÊNCIA
As funções de verossimilhança e log-verossimilhança são y i 5 Y pi L(α, β) = (1 − pi )ni 1 − p i i=1
5 X l(α, β) = yi ln i=1
pi + ni ln(1 − pi ) 1 − pi
Mas sabemos que pi possui uma relação logística com di , ou seja, pi = 1 − (1 + eα+βdi )−1 . Logo,
l(α, β) =
5 X
[yi (α + βdi ) + ni ln(1 − pi )]
i=1
Desta obtemos o vetor escore S(α, β) e a matriz de informação I(α, β): S(α, β) =
Σ(yi − µi ) Σ(yi − µi )di
I(α, β) =
Σvi Σvi di Σvi di Σvi d2i
Onde µi = ni pi e vi = ni pi (1 − pi ). Vamos inicialmente entrar com os dados da Tabela 2. > > > >
Con=c(2.6,3.8,5.1,7.7,10.2) n=c(50,48,46,49,50) y=c(6,16,24,42,44)##número de insetos mortos(dose d_i) d=log(Con)
Agora para dar início ao processo iterativo precisamos de uma estimativa inicial para os parâmetros α e β . Vamos então tomar como valores iniciais α ≈ −5 e β ≈ 3 (Veja Kalbeisch, 1985 para mais detalhes sobre este exemplo). A função NR() recebe como argumentos um vetor com o valor inicial para os parâmetros e um critério de convergência. Essa função retornará o valor das estimativas o número de iterações até a convergência, o valor das estimativas e o valor da log-verossimilhança.
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. Portanto, 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 utiliza o algoritmo BFGS (Broyden et.al., 1970) para estimação de parâmetros. Considere então o seguinte exemplo:
Exemplo (Kalbeisch, 1985): Suponha que para um teste de resistência de um componente metálico, 23 amostras(corpos de prova) foram avaliadas resultando nos valores:
CAPÍTULO 4.
17,88 28,92 68,64 68,64
PROBABILIDADE E INFERÊNCIA
33,00 41,52 42,12 68,88 84,12 93,12
84
45,60 48,48 51,84 51,96 54,12 55,56 67,80 98,64 105,12 105,84 127,92 128,04 173,40
De estudos anteriores admite-se que a resistência apresenta aproximadamente uma distribuição de Weibull, cuja densidade é dada por f (x; α, β) = αβxβ−1 exp (−αxβ ), 0 < x < ∞, onde α > 0 e β > 0. Nosso objetivo é ˆ com base na amostra observada. determinar (ˆ α, β) Vamos então aplicar a função fitdistr(). > + + > > >
x + + + + + + + +
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")
CAPÍTULO 4.
PROBABILIDADE E INFERÊNCIA
85
+ ic + }
Note que, estabelecemos como valor padrão o nível de conança de 95%. Vamos então aplicar utilizando 95% e 99% de conanç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. desconhecida IC a 99 % lim.inf lim.sup 15.07220 22.10292
Estes mesmos intervalos podem ser obtidos com a função t.test() da seguinte forma: > t.test(amos4)$conf.int [1] 16.14058 21.03455 attr(,"conf.level") [1] 0.95 > t.test(amos4,conf.level=0.99)$conf.int [1] 15.07220 22.10292 attr(,"conf.level") [1] 0.99
Usaremos agora a função t.test() para calcular o nível de conança do intervalo para a média de uma população normal com variância desconhecida usando simulação. A ideia é gerar um grade numero de amostras de tamanho n, e para cada uma delas determinar um intervalo de conança. Devemos também contar o número de intervalos que contém a verdadeira média. A proporção destes intervalos será o nível de conanç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 set.seed(556) > nivel.conf(N=1000,n=10,mu=20,sigma=4) [1] 0.944 > set.seed(643) > nivel.conf(N=1000,n=30,mu=20,sigma=4) [1] 0.963
Podemos ilustrar gracamente o que acabamos de fazer utilizando a função conf.int(). Esta função calcula intervalos de conança para amostras de uma distribuição normal padrão e estes são plotados como segmentos de reta em gráco. Neste gráco também é traçada uma linha pontilhada que representa a verdadeira média e a taxa de cobertura (coverage rate). Vejamos um exemplo onde utilizamos 100 amostras de tamanho 20. O gráco é visto na 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 uma função que retorne uma estimativa intervalar para uma proporção. Vamos considerar inicialmente o intervalo assintótico.Ou seja, sabendo que: √ n(ˆ p − p) p ∼ N (0, 1) pˆ(1 − pˆ)
Podemos calcular,
P {−zα/2
√ n(ˆ p − p) ≤p ≤ zα/2 } = 1 − α pˆ(1 − pˆ)
CAPÍTULO 4.
PROBABILIDADE E INFERÊNCIA
87
Figura 4.17: Intervalos de conança para a média de uma normal padrão para 100 amostras de tamanho 20 Logo, " IC(p, 1 − α) pˆ ± zα/2
r
pˆ(1 − pˆ) n
#
que um intervalo assintóticoPpara p e pˆ é o estimador de máxima verossimin i=1 yi lhança de p dado por: pˆ = n 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")
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 aplicando 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 para proporção baseado na correção de Wilson (Wilson, 1927). Este é dado por: pˆ +
1 2 z 2n 1−α/2
q ± z1−α/2 1+
pˆ(1−ˆ p) n
+
2 z1−α/2
4n2
1 2 z n 1−α/2
Utilizando a mesma amostra anterior vamos determinar o intervalo de Wilson e comparar o seu comprimento com o intervalo assintótico. > require(epitools) > IW=binom.wilson(sum(amos5),length(amos5));IW x n proportion lower upper conf.level 1 8 10 0.8 0.4901625 0.9433178 0.95 > #comprimento do intervalo de Wilson > comp.W=IW$upper-IW$lower;comp.W [1] 0.4531554 > > IA=binom.approx(sum(amos5),length(amos5));IA x n proportion lower upper conf.level 1 8 10 0.8 0.552082 1.047918 0.95 > #Comprimento do intervalo assintótico > comp.A=IA$upper-IA$lower;comp.A [1] 0.495836
Vemos que para esta amostra o intervalo de Wilson apresentou um menor comprimento comparado com o intervalo assintótico.
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 desconhecida: Vamos considerar a seguinte amostra retirada de uma população supostamente normal: 32,18661 29,70124 31,12365 28,71436 33,05036 32,35136 30,37871 32,51114 27,57830 31,09745
Deseja-se testar:
H0 : µ = 30 H1 : µ 6= 30
Sabendo que: √ T =
n(X − µ0 ) ∼ t(n−1) S
Vamos utilizar o R como uma calculadora e realizar o teste passo a passo. > n=length(amos6);n [1] 10 > xb=mean(amos6);xb [1] 29.71069 > s=sd(amos6);s [1] 3.169497 > #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 gracamente a região crítica do teste e também a comparação do valor da estatística do teste com o valor crítico.
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)
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édia populacional é igual a 30, ao nível de signicância de 5%. Podemos obter todos 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: amos6 t = -0.3239, df = 9, p-value = 0.7534 alternative hypothesis: true mean is not equal to 30 95 percent confidence interval: 27.63575 31.77196 sample estimates: mean of x
CAPÍTULO 4.
PROBABILIDADE E INFERÊNCIA
92
29.70386
Seja a população N (10, 4). Supondo desconhecida a verdadeira média desta população, desejamos testar:
H0 : µ = 10 H1 : µ 6= 10
Chama-se poder do teste a probabilidade de se rejeitar a hipótese H0 dado um valor qualquer de µ, especicado ou não pela hipótese alternativa, e será denotado por φ(µ). Para um µ especicado o poder do teste é dado por: X −µ X −µ √ √ + P Z > zα/2 + P Z > zα/2 + σ/ n σ/ n
Tomando valores em torno de µ = 10 e com base na expressão acima vamos calcular o desse teste para diferentes tamanhos de amostra. > > > > > > > > > > > > > > > > > >
#poder do teste set.seed(89081) amos7=rnorm(9,10,4) #valores alternativos para 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")
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 resumidas na Tabela 3. Tabela 4.2: Principais funções do R para realizar testes de hipóteses Comparação de médias de 1 média 2 médias 2 médias (populações dependentes) 2 médias com variâncias iguais Teste para proporções Comparação de variâncias
populações normais
t.test(x,...) t.test(x,y,...) t.test(x,y,paried=T) t.test(x,y,var.equal=T) prop.test() var.test()
CAPÍTULO 4.
PROBABILIDADE E INFERÊNCIA
94
.1 Apêndice Software R no Curso de Estatística da UFC Há uma série de funções e bibliotecas que são constantemente usadas em disciplinas do curso de estatística da UFC. A pagina ocial 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 e funções utilizadas no curso supracitado. Tabela 3: Principais bibliotecas e funções do R usadas nas disciplinas do curso de estatística da UFC
Disciplina Estatística Descritiva
Bibliotecas do R Principais funções Finalidade stats prettyR∗
Probabilidade e Inferência
stats
Métodos NãoParamétricos
stats
Análise de Regressão
Planejamento de Experimentos Controle estatístico da Qualidade
epitools∗ stats
stats MASS qcc∗
summary(), hist(), table() pie(), barplot() Mode() pnorm(), rnorm() pbinom(), rbinom() t.test() shapiro.test() wilcox.test() binom.exact() lm() anova() residuals() predict() aov() bartlett.test() TukeyHSD() boxcox() qcc()
Resumos estatísticos, histogramas, Tabelas de frequências Gráco em setores e em colunas Moda de um conjunto de dados Obter probabilidades e números aleatórios das distribuições normal e binomial Realiza o teste t de Student Teste de normalidade Comparação de 2 grupos Intervalos para proporção Ajustar um modelo de regressão linear Análise de variância Resíduos Valores preditos Ajuste do modelo Teste de homogeneidade Teste de Tukey Transformação boxcox Grácos de controle
Análise fatorial Componentes principais Análise Multivariada Análise de agrupamento MASS Análise discriminante linear energy∗ Teste de normalidade Multivariada chisq.test() Testes de fisher.test() associação Biometria stats mantelhaen.test() Teste Cochran-Mantel-Haenszel glm() Regressão logística ts() Denir a série Séries filter() Filtros lineares Temporáis stats acf() Correlograma arima() Ajusta modelos autoregressivos tsdiag() Diagnóstico do ajuste (*): Estas bibliotecas não fazem parte do conjunto de bibliotecas padrão do R, e devem ser instaladas posteriormente. stats
factanal() princomp() hclust() lda() mvnorm.etest()
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 trabalhar com 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] Kalbeisch, J. G. (1985). Probability and Statistical Inference, 2d edition. Springer-Verlag, New York. [5] R Development Core Team (2005). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria, URL http://www.R-project.org. [6] Wilson, E. B. (1927). Probable inference, the law of succession, and statistical inference. Journal of the American Statistical Association 22: 209-212.
95
View more...
Comments