• Nenhum resultado encontrado

Curso de R

N/A
N/A
Protected

Academic year: 2021

Share "Curso de R"

Copied!
95
0
0

Texto

(1)

APLICADA

CURSO DE R

Professora

Ana Maria Souza de Araujo

Aluno

José Roberto Silva dos Santos

(2)

1 Introdução 4 1.1 Como utilizar o R . . . 4 1.2 Pacotes Libraries . . . 5 2 Tipos de Objetos 6 2.1 Vetores . . . 6 2.2 Matrizes . . . 9 2.3 Arrays . . . 13 2.4 Data-frames . . . 16 2.5 Listas . . . 17 2.6 Funções . . . 18 2.7 Importação de dados . . . 18 2.7.1 A função read.table() . . . 19

2.7.2 Importando planilhas do Microsoft Excel (Arquivos xls) 21 3 Estatística Descritiva 22 3.1 Rotinas Grácas . . . 22

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

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

3.1.3 Funções grácas interativas . . . 23

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

3.3 Descrevendo um conjunto de dados . . . 29

3.3.1 Descrição Univariada . . . 32

3.3.2 Descrição Bivariada . . . 41

3.3.3 Alguns grácos mais elaborados . . . 48

4 Probabilidade e Inferência 53 4.1 Controle de uxo e denição de funções . . . 53

4.1.1 Execução condicional . . . 53

4.1.2 Ciclos . . . 54

4.1.3 Denindo funções . . . 55

(3)

4.2 Distribuições de Probabilidade . . . 56 4.2.1 Distribuição Normal . . . 57 4.2.2 Distribuição t-Student . . . 60 4.2.3 F-Snedecor . . . 61 4.2.4 Distribuição Gama . . . 63 4.2.5 Distribuição Binomial . . . 67 4.2.6 Distribuição de Poisson . . . 69 4.3 Inferência . . . 72

4.3.1 Teorema Central do Limite . . . 72

4.3.2 Distribuições Amostrais . . . 75

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

4.3.4 Intervalos de Conança . . . 84

4.3.5 Testes de Hipóteses . . . 89

.1 Apêndice Software R no Curso de Estatística da UFC . . . 94

(4)

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 tempo-rais,...) 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), Win-dows e MacOS.

1.1 Como utilizar o R

O R está disponível para download no site http://www.r-project.org/. Apó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 dese-jada 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

(5)

Figura 1.1: Tela inicial do R teclas.

1.2 Pacotes Libraries

Ao instalar o R, este vem com uma quantidade padrão de ferramentas que es-tão na forma de pacotes, por exemplo, os pacotes "stats"e "base"que contêm funções básicas como plot(), mean(), matrix() entre outras, são exem-plos de pacotes padrões do R. No entanto, o usuário não precisa limitar-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 adquiri-das, na forma de arquivos "zip", diretamente da home page citada na sub-seção anterior. Ou também, podem ser instaladas diretamente do ambiente R, bastando para isso, que o computador do usuário esteja conectado à in-ternet.

(6)

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:

(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]

(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

(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,...)

(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:

(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 sub-matriz 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 ma-trizes. Vejamos algumas através de exemplos.

> m1+m2 [,1] [,2] [,3] [1,] 2 6 10 [2,] 6 10 14 [3,] 10 14 18 > m1*m2 [,1] [,2] [,3] [1,] 1 8 21 [2,] 8 25 48 [3,] 21 48 81

(12)

> t(m3) [,1] [,2] [,3] [,4] [,5] [1,] 1 2 3 4 5 [2,] 6 7 8 9 10 [3,] 11 12 13 14 15 > m3%*%m2 [,1] [,2] [,3] [1,] 102 120 138 [2,] 114 135 156 [3,] 126 150 174 [4,] 138 165 192 [5,] 150 180 210 > t(m2)%*%m2 [,1] [,2] [,3] [1,] 66 78 90 [2,] 78 93 108 [3,] 90 108 126

Nos dois primeiros comandos temos adição e multiplicação das matrizes 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 retor-nam, respectivamente, o determinante, a inversa e os auto-valores e autove-tores de uma matriz. Vejamos um exemplo:

> m4=matrix(c(6,5,4,1,3,0,2,-1,1),nc=3);m4 [,1] [,2] [,3]

[1,] 6 1 2

(13)

[3,] 4 0 1 > det(m4) [1] -15 > solve(m4) [,1] [,2] [,3] [1,] -0.2 0.06666667 0.4666667 [2,] 0.6 0.13333333 -1.0666667 [3,] 0.8 -0.26666667 -0.8666667 > eigen(m4) $values [1] 8.021597 2.676943 -0.698540 $vectors [,1] [,2] [,3] [1,] -0.6895898 0.1176905 -0.3086003 [2,] -0.6083940 -0.9525448 0.6136865 [3,] -0.3928393 0.2807263 0.7267425

2.3 Arrays

Array é a generalização de uma matriz, uma vez que neste tipo de 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] [,2] [,3] [1,] 10 13 16

(14)

[2,] 11 14 17

[3,] 12 15 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] [1,] 7 10 [2,] 8 11 [3,] 9 12 , , 1, 2 [,1] [,2] [1,] 13 16 [2,] 14 17 [3,] 15 18 , , 2, 2 [,1] [,2] [1,] 19 2

(15)

[2,] 20 3

[3,] 1 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.

(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 se-gunda é 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"

(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

(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 <- as.vector(data) if (missing(nrow)) nrow <- ceiling(length(data)/ncol) else if (missing(ncol)) ncol <- ceiling(length(data)/nrow)

.Internal(matrix(data, nrow, ncol, byrow, dimnames)) }

<environment: namespace:base>

No caso das funções que não são escritas em linguagem R3, como é o caso de

min, max, lines etc, não é possível visualizar o conteúdo diretamente. Para estas, é preciso examinar os arquivos do código fonte do R. Podemos obter ajuda sobre qualquer função do R utilizando o símbolo "?". Por exemplo, para obter informações sobre a função matrix, basta digitar ?matrix e o help do R será disponibilizado. No R, é possível criar funções (isto será visto mais adiante) e também modicar as funções escritas em linguagem R já existentes. Para isto, basta utilizar o comando: fix(nome_da_função), que cria um novo "script" com o conteúdo da função desejada pronta para edição.

2.7 Importação de dados

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

(19)

2.7.1 A função read.table()

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

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

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

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

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

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

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

Exemplos:

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

(20)

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

pais Carne Porco_aves Ovos Leite Peixe Cereais

1 Albânia 10.1 1.4 0.5 8.9 0.2 42.3

2 Áustria 8.9 14.0 4.3 19.9 2.1 28.0

3 Bélgica_Luxemb. 13.5 9.3 4.1 17.5 4.5 26.6 Aqui vemos o comando usado para a importação e abaixo estão as três primeiras linhas e sete primeiras colunas do banco de dados. Note que aqui estamos informando o caminho que deve ser seguido para encontrar o arquivo, se já tivéssemos denido um diretório padrão, bastaria fazer: > read.table("consumo diário de proteína.txt",header=T,dec=",") Para obter o mesmo resultado.

2. Importando um banco de dados em formato csv, com rótulos na primeira linha, sem casas decimais e com diretório padrão denido

> read.table("dados - livro aberto-fechado.csv",header=T,sep=";") mec.f vet.f alg.a ana.a est.a

1 77 82 67 67 81

2 63 78 80 70 81

3 75 73 71 66 81

Em arquivos csv, os campos 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")

(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 con-vertidos 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.

(22)

Estatística Descritiva

No R, temos um grande número de funções para a análise descritiva de da-dos. Resumos estatísticos, bem como distribuições de frequências, cálculo 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 catego-rias:

• 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 infor-mados como argumento para a função. A principal função dessa categoria

(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 pro-duzirem 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). Geral-mente, etiquetas é um vetor de valores inteiros ou de caracteres.

abline(a,b) abline(h=y) abline(v=x)

O primeiro comando acrescenta uma reta com declive b e ordenada na 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 uti-lizando 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().

(24)

par(<nome do argumento>=<valor>, 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 dis-positivos 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, res-pectivamente, 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.

(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 exem-plo "blue". Uma lista de possíveis cores pode ser obtida com a função colors. Outra maneira de especicar cores é em termos de compo-nentes 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 val-ores 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.

(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 texto simples - 2 corresponde a texto em negrito - 3 corresponde a texto em itálico e - 4 corresponde a texto em itálico-negrito

• font.axis: Usado para 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 aprox-imado de marcas de escala nos eixos x e y, respectivamente, len es-pecica 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;

(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 mar-gens do dispositivo gráco e as marmar-gens 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, respectiva-mente, à 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.

(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 coor-dinates), isto é, como fração (em [0,1]) da região do dispositivo gráco. • omi: Um vetor da forma c(abaixo, esquerda, acima, direita)para

es-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 docu-mento de ajuda da função plot.

(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:

(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 co-lunas 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 cara-cteres 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 qualita-tivas 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:

(31)

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 Peso Altura IMC Classe Cintura Quadril RCQ Classe RCQ (Kg) (cm) IMC (cm) (cm) KCQ Ativa 61 58,2 154,0 24,5 normal 87 109 0,80 MR Sedentária 69 63,0 152,0 27,3 sobrepeso 89 104 0,86 GR Sedentária 61 70,1 158,0 28,1 sobrepeso 106 123 0,86 GR Sedentária 71 73,2 156,0 30,1 sobrepeso 110 122 0,90 GR Ativa 63 58,6 152,0 25,4 sobrepeso 99 121 0,82 MR Sedentária 71 77,0 160,0 30,1 sobrepeso 125 132 0,95 GR Sedentária 72 76,2 165,0 28 sobrepeso 115 125 0,92 GR Sedentária 68 59,8 160,0 23,4 normal 85 103 0,83 MR Ativa 66 64,3 155,0 26,8 sobrepeso 100 120 0,83 MR Sedentária 69 52,1 151,0 22,8 normal 74 83 0,89 GR Sedentária 72 62,0 156,0 25,5 sobrepeso 90 111 0,81 MR Sedentária 67 52,1 151,0 22,8 normal 76 90 0,84 MR Sedentária 63 58,0 157,0 23,5 normal 80 102 0,78 MR Sedentária 66 55,0 154,0 23,2 normal 78 96 0,81 MR Sedentária 63 50,1 157,0 20,3 normal 72 81 0,89 GR Ativa 63 57,9 160,0 22,6 normal 78 90 0,87 GR Ativa 67 56,2 152,0 24,3 normal 76 95 0,80 MR Ativa 71 68,6 159,0 27,1 sobrepeso 106 117 0,91 GR Ativa 63 51,0 150,0 22,7 normal 71 83 0,86 GR Ativa 60 53,4 150,0 23,7 normal 76 89 0,85 MR Ativa 69 61,3 154,0 25,8 sobrepeso 89 106 0,84 MR Ativa 64 53,2 158,0 21,3 normal 73 86 0,85 MR Ativa 63 54,6 150,0 24,3 normal 80 108 0,74 PR Ativa 66 56,2 152,0 24,3 normal 84 110 0,76 PR Ativa 71 60,3 156,0 24,8 normal 82 99 0,83 MR Ativa 64 54,7 158,0 21,9 normal 76 95 0,80 MR Ativa 70 60,0 160,0 23,4 normal 81 104 0,78 MR Ativa 63 51,3 154,0 21,6 normal 76 89 0,85 MR Ativa 66 50,0 153,0 21,4 normal 76 87 0,87 GR Ativa 64 49,8 150,0 22,1 normal 72 106 0,68 PR Ativa 69 55,2 156,0 22,7 normal 81 98 0,83 MR Ativa 69 58,2 160,0 22,7 normal 78 90 0,87 GR Sedentária 64 51,6 156,5 21,1 normal 76 87 0,87 GR Sedentária 63 62,7 153,0 26,8 sobrepeso 90 103 0,87 GR Sedentária 72 75,6 165,0 27,8 sobrepeso 98 110 0,89 GR Sedentária 73 65,2 154,0 27,5 sobrepeso 96 110 0,87 GR Sedentária 68 61,8 152,0 26,7 sobrepeso 82 93 0,88 GR Sedentária 71 64,3 150,0 28,6 sobrepeso 78 89 0,88 GR Sedentária 72 59,2 153,0 25,3 sobrepeso 73 82 0,89 GR Ativa 69 63,4 163,0 23,9 normal 93 120 0,78 MR Sedentária 68 66,0 160,0 25,8 sobrepeso 90 117 0,77 PR Sedentária 68 61,7 158,0 24,7 normal 90 116 0,78 MR Sedentária 73 68,2 155,0 28,4 sobrepeso 107 120 0,89 GR Sedentária 79 60,1 160,0 23,5 normal 92 110 0,84 MR

(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 ex-terno, 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 va-riá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

(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 infor-maçõ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 per-centuais 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.

(34)

Figura 3.1: Gráco de barras para a variável Categoria com padrão do R

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 73 79 2 2 8 4 4 2 4 6 1 5 4 2 1 > Ida.prop=prop.table(Ida.freq) > Ida.prop Idade 60 61 63 64 66 67 0.04444444 0.04444444 0.17777778 0.08888889 0.08888889 0.04444444 68 69 70 71 72 73 0.08888889 0.13333333 0.02222222 0.11111111 0.08888889 0.04444444 79 0.02222222 > Ida.perc=100*Ida.prop > Ida.perc Idade

(35)

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

60 61 63 64 66 67 68

4.444444 4.444444 17.777778 8.888889 8.888889 4.444444 8.888889

69 70 71 72 73 79

13.333333 2.222222 11.111111 8.888889 4.444444 2.222222 Podemos obter várias medidas resumo para esta variável, abaixo segue algu-mas delas. Para os 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

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

(37)

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

Min. 1st Qu. Median Mean 3rd Qu. Max.

60.0 63.0 68.0 67.2 71.0 79.0

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

(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 en-tão, primeiramente, examinar esta função:

Sintaxe:

cut(x,breaks,...), onde:

x é a variável que se deseja separar e breaks é um vetor contendo os pon-tos de cortes. Esses ponpon-tos 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.

> 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

1 (49.8,53.7] 9 0.20454545 20.454545 2 (53.7,57.6] 6 0.13636364 13.636364 3 (57.6,61.5] 12 0.27272727 27.272727 4 (61.5,65.3] 9 0.20454545 20.454545 5 (65.3,69.2] 3 0.06818182 6.818182 6 (69.2,73.1] 1 0.02272727 2.272727 7 (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

(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

(40)

> #Curtose

> peso.cur=kurtosis(Peso);peso.cur [1] 0.05477938

> #Distribuição leptocúrtica > summary(Peso)

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

A representação gráca é feita 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-e-Folha para a variável IMC é obtido da seguinte forma:

(41)

> stem(IMC)

The decimal point is at the | 20 | 3 21 | 13469 22 | 1677788 23 | 24455799 24 | 333578 25 | 34588 26 | 788 27 | 1358 28 | 0146 29 | 30 | 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 de-penderão dos tipos de variáveis envolvidas. Considerando duas variáveis, podemos ter as seguintes situações:

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

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

Neste caso a representação tabular será feita por meio de uma tabela 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

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

(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 i=1 (oi− ei)2 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 :

C = s χ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"

(44)

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

> #Coeficiente de contigência modificado > t=min(dim(cat.cimc.tab));t

[1] 2

> T=C/((t-1)/t)^2;T [1] 1.59734

Quantitativa vs Qualitativa

Nesta situação é comum analisarmos como se comporta a variável quantita-tiva em cada nível da variável qualitaquantita-tiva. 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

(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

(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 fre-quê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

(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 coe-cientes, 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")

(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='',

(49)

> #Definir as margens da segunda figura > par(mar=c(1,2,5,1))

> #Plotar o boxplot marginal no eixo y > boxplot(Peso, axes=F,border=4)

> title(ylab='Peso (Kg)', line=0)

> #Definir as margens da terceira figura > par(mar=c(5,1,1,2))

> #Plotar o boxplot marginal no eixo y

> boxplot(IMC, horizontal=T, axes=F,border=4) > title(xlab='IMC (Kg/m2)', line=1)

>

> par(op)

Gráco de dispersão com histogramas marginais

Neste gráco ao invés de acrescentarmos boxplots nas margens da gura, vamos acrescentar histogramas.

> #Definir os histogramas marginais > xhist=hist(IMC,plot=F)

> yhist=hist(Peso,plot=F) >

> top <- max(c(xhist$counts, yhist$counts)) > b<-matrix(c(2,0,1,3),2,2,byrow=TRUE) >

> #Criar a divisão desejada para o dispositivo >

> nf <- layout(b, widths=c(3,1), heights=c(1,3), respect=TRUE) >

> #Definir as margens da primeira figura >

> par(mar=c(4,4,1,1)) >

> #Plotar o gráfico de dispersão >

> plot(Peso,IMC) >

> #Definir as margens da segunda figura >

> par(mar=c(0,4,1,1)) >

(50)

> barplot(xhist$counts,axes=FALSE, ylim=c(0, top), space=0, + col=1, density=20, angle=-45)

>

> #Definir as margens da terceira figura >

> par(mar=c(4,0,1,1)) >

> #Plotar o histograma marginal no eixo y >

> barplot(yhist$counts, axes=FALSE, xlim=c(0, top),space=0, + col=1, density=20, angle=-45,horiz=TRUE)

(51)

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

(52)

Note que, nos histogramas marginais acrescentamos linhas como preenchi-mento. 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.

(53)

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, es-timar 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 de-pendendo se uma condição for satisfeita. A forma da instrução condicional é a seguinte:

if (expres_1) expres_2 else expres_3

onde o resultado de expres_1 deve ser um valor lógico; se este é verdadeiro(T 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 ex-pressões geralmente são construídas com o uso de operadores. Abaixo pode-mos ver a descrição dos operadores básicos da linguagem R.

(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 • <= : Menor igual • >= : Maior igual • == : Igual • != : Diferente 3. Operadores Aritméticos • + : Soma • - : Diferença • * : Produto • / : Divisão

• x%%y : Indica o resto da divisão de x por y • x %/% y : Indica a divisão inteira de x por y • %*% : Multiplicação matricial

• %x% : Produto de Kronecker

4.1.2 Ciclos

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

> for (nome in expres_1) expres_2

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

(55)

sub-expressões pode aparecer a variável de controle; esta expressão é cal-culada repetidamente à medida que a variável de controle nome percorre 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<=4){ + d[i]=a[i]+b[i] + i=i+1 + } > 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:

(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 dis-tribuições de probabilidade são: cálculo de densidade de probabilidade, cál-culo de probabilidade acumulada, obtenção de quantis e geração de nú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.

(57)

4.2.1 Distribuição Normal

A distribuição normal é referenciada no R pelo prexo norm. Os argumen-tos 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 ope-raçõ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 execu-tar: ?Normal. Vejamos então para uma N(µ = 100, σ2 = 100).

> dnorm(90,100,10) [1] 0.02419707 > pnorm(90,100,10) [1] 0.1586553 > qnorm(0.5,100,10) [1] 100 > set.seed(13) > rnorm(10,100,10) [1] 105.54327 97.19728 117.75163 101.87320 111.42526 104.15526 112.29507 [8] 102.36680 96.34617 111.05144

Vamos ilustrar gracamente a probabilidade P (N(100, 100) ≤ 90) = 0, 159. Isso pode ser feito utilizando a função polygon().

Referências

Documentos relacionados

Reforço condicionado, tema de estudos há mais de 60 anos, é um estímulo que tem sua função reforçadora estabelecida a partir da relação de contingência com outro reforçador.

I As demonstrações destas propriedades seguem basicamente as mesmas técnicas usadas na demonstração das propriedades da função raiz quadrada. Elas ficam, portanto,

O que também pode ser visto pela simetria de seu gráco em relação à origem, como na gura abaixo. Figura: Gráco de uma função ímpar com um valor mínimo local em x

Este modo é ideal para assar e cozinhar alimentos como bolos, e para a preparação de tortas em três prateleiras ao mesmo tempo.. Alguns exemplos: pastéis de nata, biscoitos

Dessa forma, Benjamim postula uma verdade para além da história, pois a verdade do passado está naquilo que ele encerra e, por isso, a tarefa do historiador será revelar

Para instalação em tubo de escoamento, retire a curva plástica, empurrando a mangueira para dentro da curva plástica e, em seguida, para cima.Nunca solte a mangueira

Requereram a concessão de medida liminar para que, até o restabelecimento da capacidade de atendimento das redes pública e privada de saúde, seja  determinado ao

Este experimento tem como finalidade mostrar o funcionamento dos para-raios, para tanto, simulou-se as descargas elétricas de um raio e a ação do para-raios em