Você está na página 1de 124

Universidade

Departamento de Cincias Exatas


Federal de

Lavras

Estatstica

Computacional

Utilizando

Daniel

Furtado

Ferreira
@dex.ufla.br

danielff

Lavras

Minas

Gerais
19 de agosto de

Brasil

2010

ii

Ferreira, D.F.

Estat stica Computacional

Prefcio a
Nestas notas de aula tivemos a inteno de abordar o tema de estat ca stica computacional que to importante para a comunidade cient e a ca e principalmente para os estudantes dos cursos de ps-graduao em estat o ca stica. Podemos armar sem medo de errar que a estat stica computacional se tornou e hoje em dia uma das e principais reas da estat a stica. Alm do mais, os conhecimentos desta rea podem e a ser e, frequentemente, so utilizados em outras reas da estat a a stica, da engenharia e da f sica. A inferncia Bayesiana um destes exemplos t e e picos em que geralmente utilizamos uma abordagem computacional. Quando pensamos nestas notas de aulas tivemos muitas dvidas do que tratar e como abordar cada tpico escolhido. Assim, u o optamos por escrever algo que propiciasse ao leitor ir alm de um simples receitue a rio, mas que, no entanto, no o zesse perder em um emaranhado de demonstraes. a co Por outro lado buscamos apresentar os modelos e os mtodos de uma forma bastante e abrangente e no restritiva. a Uma outra motivao que nos conduziu e nos encorajou a desenvolver este proca jeto, foi a nossa experincia pessoal em pesquisas com a estat e stica computacional. Tambm zemos isso pensando no benef e cio pessoal, no podemos negar, que isso a nos traria ao entrarmos em contato direto com a vasta publicao existente neste ca ramo da estat stica. No temos, todavia, a inteno de estudarmos todos os asa ca suntos e nem mesmo pretendemos para um determinado tpico esgotar todas as o possibilidades. Pelo contrrio, esperamos que estas notas sejam uma introduo a a ca estat stica computacional e que sirvam de motivao para que os alunos dos cursos ca de graduao em estat ca stica possam se adentrar ainda mais nessa rea. a Estas notas so baseadas em um livro que estamos escrevendo sobre a estat a stica computacional utilizando a linguagem Pascal. A adaptao para o R de algumas das ca rotinas implementadas neste livro foi uma tarefa bastante prazerosa e reveladora. Estat stica Computacional Ferreira, D.F.

iv Aproveitamos esta oportunidade para desvendar um pouco dos inmeros segredos u que este poderoso programa possui e descobrir um pouco sobre seu enorme potencial e tambm, por que no dizer, de suas fraquezas. Nessa primeira verso no esperae a a a mos perfeio, mas estamos completamente cientes que muitas falhas devem existir ca e esperamos contar com a colaboraao dos leitores para san-las. Estamos iniciando c a uma segunda verso revisada e ampliada, utilizando ainda o Sweave, que integra o R a
A ao L TEX. Essas notas sero constantemente atualizadas na internet. Esperamos que a

este manuscrito venha contribuir para o crescimento prossional dos estudantes de nosso programa de ps-graduao em Estat o ca stica e Experimentao Agropecuria, ca a alm de estudantes de outros programas da UFLA ou de outras instituies. Dessa e co forma nosso objetivo ter sido atingido. a Daniel Furtado Ferreira 19 de agosto de 2010

Ferreira, D.F.

Estat stica Computacional

Sumrio a
Prefcio a Lista de Tabelas Lista de Figuras 1 Introduo ao Programa R ca 1.1 1.2 1.3 1.4 1.5 Introduo ao R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca Estruturas de Controle de Programao . . . . . . . . . . . . . . . . ca Funes no R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . co Introduo a Estat ca stica Computacional . . . . . . . . . . . . . . . . Exerc cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii vii ix 1 2 9 15 18 20 23 24 29 31 33 33 34 43 55 58 63 63

2 Gerao de Realizaes de Variveis Uniformes ca co a 2.1 2.2 2.3 Nmeros Aleatrios Uniformes . . . . . . . . . . . . . . . . . . . . . u o Nmeros Aleatrios Uniformes no R . . . . . . . . . . . . . . . . . . u o Exerc cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Gerao de Variveis No-Uniformes ca a a 3.1 3.2 3.3 3.4 3.5 Introduo ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mtodos Gerais para Gerar Variveis Aleatrias . . . . . . . . . . . . e a o Variveis Aleatrias de Algumas Distribuies Importantes . . . . . a o co Rotinas R para Gerao de Variveis Aleatrias . . . . . . . . . . . . ca a o Exerc cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Gerao de Amostras Aleatrias de Variveis Multidimensionais ca o a 4.1 Introduo ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Estat stica Computacional

Ferreira, D.F.

vi 4.2 4.3 4.4 4.5 4.6

SUMARIO Distribuio Normal Multivariada . . . . . . . . . . . . . . . . . . . . ca Distribuio Wishart e Wishart Invertida . . . . . . . . . . . . . . . ca Distribuio t de Student Multivariada . . . . . . . . . . . . . . . . . ca Outras Distribuies Multivariadas . . . . . . . . . . . . . . . . . . . co Exerc cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 70 75 78 78 81 81 82 86 89 91 91 94 99

5 Algoritmos para Mdias, Varincias e Covarincias e a a 5.1 5.2 5.3 5.4 Introduo ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algoritmos Univariados . . . . . . . . . . . . . . . . . . . . . . . . . Algoritmos para Vetores Mdias e Matrizes de Covarincias . . . . . e a Exerc cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6 Aproximao de Distribuies ca co 6.1 6.2 6.3 6.4 6.5 Introduo ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modelos Probabil sticos Discretos . . . . . . . . . . . . . . . . . . . . Modelos Probabil sticos Cont nuos . . . . . . . . . . . . . . . . . . .

Funes Pr-Existentes no R . . . . . . . . . . . . . . . . . . . . . . 109 co e Exerc cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 111 113

Referncias Bibliogrcas e a Indice Remissivo

Ferreira, D.F.

Estat stica Computacional

Lista de Tabelas
3.1 Distribuies de probabilidades, nome R e parmetros dos principais co a modelos probabil stico. . . . . . . . . . . . . . . . . . . . . . . . . . . 56

Estat stica Computacional

Ferreira, D.F.

viii

LISTA DE TABELAS

Ferreira, D.F.

Estat stica Computacional

Lista de Figuras
3.1 3.2 3.3 Ilustrao do teorema fundamental da transformao de probabilidaca ca des para gerar uma varivel aleatria X com densidade f (x) = F (x). a o Mtodo da rejeio para gerar um valor x0 da varivel aleatria X e ca a o com densidade f (x). . . . . . . . . . . . . . . . . . . . . . . . . . . . Ilustrao grca do algoritmo Metropolis-Hastings, apresentando a ca a funo de transio q(x ; xt ) e a transio de x1 para x2 por meio do ca ca ca algoritmo de passeio aleatrio. . . . . . . . . . . . . . . . . . . . . . . o 3.4 C rculo unitrio mostrando um ponto aleatrio (u1 , u2 ) com a o R2 = 46 u2 + u2 representando x1 e o ngulo que o ponto (u1 , u2 ) determina a 1 2 em relao ao eixo u1 . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 40 37 35

Estat stica Computacional

Ferreira, D.F.

LISTA DE FIGURAS

Ferreira, D.F.

Estat stica Computacional

Cap tulo 1

Introduo ao Programa R ca
O programa R (R Development Core Team, 2006[14]) foi escolhido para ministrar este curso por uma srie de razes. Alm de ser um programa livre, no sentido e o e de possuir livre distribuio e cdigo fonte aberto, pode ser utilizado nas plataforca o mas Windows e Unix. Alm do mais, o R possui grande versatilidade no sentido de e possuir inmeros pacotes j prontos e nos possibilitar criar novas rotinas e funes. u a co O R a verso livre baseada na linguagem S, cuja verso comercial o S-Plus. O e a a e programa SAS, por outro lado, o programa estat e stico mais comum, mas o R e o mais popular. O programa R por ser genuinamente um programa orientado por objeto nos possibilita programar com muita ecincia e versatilidade. Outro aspecto e que bastante atrativo no R refere-se ao fato de o mesmo receber contribuies de e co pesquisadores de todo o mundo na forma de pacotes. Essa uma caracter e stica que faz com que haja grande desenvolvimento do programa em relativamente curtos espaos de tempo e que nos possibilita encontrar solues para quase todos os proc co blemas com os quais nos deparamos em situaes reais. Para os problemas que no co a conseguimos encontrar solues, o ambiente de programao R nos possibilita criar co ca nossas prprias solues. o co Nestas notas de aulas pretendemos apresentar os conceitos bsicos da estat a stica computacional de uma forma bastante simples. Inicialmente obteremos nossas pro prias solues para um determinado mtodo ou tcnica e em um segundo momento co e e mostraremos que podemos ter a mesma soluo pronta do programa R quando esta ca estiver dispon vel. Particularmente neste cap tulo vamos apresentar algumas caracter sticas do ambiente e da linguagem R para implementarmos nossas solues. co Estat stica Computacional Ferreira, D.F.

Introduo ao Programa R ca

Nosso curso no pretende dar solues avanadas e de ecincia mxima para os a co c e a problemas que abordaremos, mas propiciar aos alunos um primeiro contato com a linguagem R (ou S) e com os problemas da estat stica computacional. A linguagem R um dialeto da linguagem S que foi desenvolvida em 1980 e se espalhou pela e comunidade cient ca desde ento. a A desvantagem que o R no um programa fcil de aprender. Alguns esfore a e a os iniciais so necessrios at que consigamos obter algum benef c a a e cio. No temos a a inteno de apresentar neste curso os recursos do R para anlises de modelos lineaca a res de posto completo ou incompleto, de modelos no-lineares, de modelos lineares a generalizados ou de grcos. Eventualmente poderemos utilizar algumas destas funa es como um passo intermedirio da soluo do problema que estaremos focando. co a ca Este material ser constru com a abordagem terica do tpico e associar exema do o o a plicaes prticas dos recursos de programao R para resolver algum problema co a ca formulado, em casos particulares da teoria estudada. Este material apenas uma primeira verso que dever ter muitos defeitos. Ase a a sim, o leitor que encontr-los ou tiver uma melhor soluo para o problema poder a ca a contribuir enviando um e-mail para daniel@dex.ua.br.

1.1

Introduo ao R ca

No R os s mbolos ou variveis so objetos e podem ter as mais variadas estrua a turas, tais como vetores, matrizes, data frames, listas, funes, expresses e muitos co o outras. Vamos descrever de forma sucinta e gradativa algumas destes objetos. Os vetores so compostos de clulas cont a e guas de dados homogneos. Os vetores e podem ser de vrios tipos como, por exemplo, lgicos, inteiros, reais e caracteres. a o O modo mais simples de criar um vetor utilizar > x <- c(5, 1.5, 4.5, 6.7, 3.1). e Esta instruo faz com que concatenemos os 5 elementos anteriores com a funo c ca ca (concatenao) e o resultado um vetor de tamanho 5. Podemos acessar qualquer ca e elemento deste vetor utilizando a instruo > x[j], em que j = 1, 2, , 5 e o ca tamanho do vetor por > length(x). Se queremos ver o resultado do objeto na tela, devemos digitar o nome dele no prompt do R da seguinte forma > x. Podemos criar um vetor combinando dois vetores x, intercalados por zero da seguinte forma: > y <- c(x,0,x). Outro aspecto que devemos esclarecer que as atribuies no R podem e co ser feitas por <- ou por =. Vamos utilizar neste material a maneira menos comum Ferreira, D.F. Estat stica Computacional

1.1 Introduo ao R ca

para os usurios do R, atribuio com o =, por uma questo de emprego de outras a ca a linguagens de programao, em que o sinal de igualdade utilizado para atribuies. ca e co As instrues R devem ser preferencialmente escritas em um editor de texto como co o bloco de notas. O R nos possibilita abrir tais arquivos textos, denominados de scripts, nos quais podemos executar os cdigos digitados marcando-os e teclando o simultaneamente ctrl r ou pressionando F5 . Nossos programas exemplos no aprea sentaro o prompt > do programa R, por considerar que foram digitados em um a arquivo texto. Cada linha deve conter uma funo, uma atribuio ou uma instruca ca o. Podemos digitar mais de uma instruo por linha se as separarmos por ponto ca ca e v rgula. Vamos ilustrar o uso de vetores com o exemplo a seguir. Neste exemplo aproveitamos o ensejo para apresentar alguns outros comandos uteis da linguagem R.
> # programa R demonstrando o uso de vetores e de intru~es co > # teis para lidarmos com eles. Todos os textos aps # u o > # ser~o considerados comentrios a a > x <- c(2, 3, 4, 5.1, 3.2) > x [1] 2.0 3.0 4.0 5.1 3.2 > y <- c(x,0,1,x) > y # concatena x com o vetor [0; 1] e x # imprime o vetor # cria um vetor de tamanho 5 # imprime o vetor

[1] 2.0 3.0 4.0 5.1 3.2 0.0 1.0 2.0 3.0 4.0 5.1 3.2 > z <- c(2.4, 1.3, 3.4, 2.1, 5.7) # cria um vetor de tamanho 5 > w <- 2*x+z+1 > w [1] 7.4 8.3 12.4 13.3 13.1 # vetor de tamanho 2: c(min(x); max(x)) # imprime o vetor rx # opera~es elementares com os vetores co # imprime o vetor w

> rx <- range(x) > rx [1] 2.0 5.1 > lx <- length(x) > lx [1] 5

# tamanho do vetor x em lx # imprime lx

> x1 <- seq(from=1, to=10, by=0.5)# gera uma sequ^ncia 1 a 10 de 0.5 em 0.5 e > x1 # imprime x1

Estat stica Computacional

Ferreira, D.F.

4
[1] [11] 1.0 6.0 1.5 6.5 2.0 7.0 2.5 7.5 3.0 8.0 3.5 8.5 4.0 9.0 4.5 5.0

Introduo ao Programa R ca
5.5

9.5 10.0

> xr1 <- rep(x,times=5) > xr2 <- rep(x,each=5) > xr1

# replica x na ntegra 5 vezes # replica cada elemento de x, 5 vezes # imprime xr1

[1] 2.0 3.0 4.0 5.1 3.2 2.0 3.0 4.0 5.1 3.2 2.0 3.0 [13] 4.0 5.1 3.2 2.0 3.0 4.0 5.1 3.2 2.0 3.0 4.0 5.1 [25] 3.2 > xr2 # imprime xr2

[1] 2.0 2.0 2.0 2.0 2.0 3.0 3.0 3.0 3.0 3.0 4.0 4.0 [13] 4.0 4.0 4.0 5.1 5.1 5.1 5.1 5.1 3.2 3.2 3.2 3.2 [25] 3.2

Os vetores podem ser utilizados em expresses aritmticas, sendo as operaes o e co realizadas elemento a elemento. As operaes elementares so +, , , / e para poco a tenciao. Vrios outros operadores aritmticos so dispon ca a e a veis, como por exemplo, log, exp, sin, cos, tan e sqrt. Funoes como range retornam um vetor de tamanho c dois composto pelos valores c(min(x), max(x)) e o operador length(x) retorna o tamanho do vetor x. Podemos gerar sequncias regulares no programa R facilmente. A instruo x <e ca 1 : 5 gera um vetor x que seria obtido de forma equivalente por x <- c(1,2,3,4,5). O operador dois pontos possui a maior prioridade entre todos os operadores aritmticos e dentro de uma expresso. Assim, 2 1 : 5 ir gerar a sequncia 2,4,6,8,10. Se a a e queremos uma sequncia que se inicia em 2 (exemplo bvio) e termina em 5 com e o passo igual a 1, devemos usar a instruo (2 1) : 5, que ir produzir 2,3,4,5. A ca a instruo x1 <- seq(f rom = 1, to = 10, by = 0.5) gera uma sequncia que vai ca e de 1 a 10 utilizando um passo igual a 0,5. Podemos simplesmente utilizar x1 <seq(1, 10, by = 0.5). Se o limite superior da sequncia no for um mltiplo exato e a u do passo, ento o R ir produzir uma sequncia que ir nalizar no mltiplo mais a a e a u prximo, mas inferior, ao limite superior. Uma outra instruo que bastante util o ca e nos permite dizer o tamanho da sequncia, o valor inicial e o tamanho do passo, da e seguinte forma: seq(length = 19, f rom = 1, by = 0.5). Esta instruo ir produzir a ca a mesma sequncia do programa anterior. Podemos ainda utilizar tamanhos de passos e negativos para a sequncia, como por exemplo, seq(length=19, from=1, by=-0.5), e que ir produzir uma sequncia de 1 a 8 com tamanho de passo 0,5. a e Ferreira, D.F. Estat stica Computacional

1.1 Introduo ao R ca

Um outro importante comando o rep() que podemos utilizar para replicar e um objeto das mais diferentes formas. No exemplo anterior utilizamos duas delas. Utilizamos o comando rep(objeto, times) e o comando rep(objeto, each). Podemos gerar vetores lgicos por condies (>, >=, <, <=, ==, ! =). As cono co dies == indicam igualdade exata e ! =, diferenas. Assim, o programa a seguir co c ilustra o uso de vetores lgicos. A combinao de duas condies feita utilizando o ca co e o operador & para and (interseo), | para or (unio) e ! para negao de uma das ca a ca condies. Podemos utilizar estes operadores lgicos para realizarmos muitas tarefas co o complicadas. No exemplo apresentado a seguir formamos um novo vetor w contendo os elementos de x que so inferiores a 5. O segundo exemplo cria um vetor w2, cujos a elementos so a soma dos elementos do vetor x que so maiores ou iguais a 3 e a a adicionados de 1. Os vetores so os tipos mais importantes em R, mas outros tipos a importantes devem ser considerados. Vrias outras operaes vetoriais so poss a co a veis e sero descritas oportunamente, na medida que necessitarmos deles. a
> # programa R demonstrando o uso de vetores lgicos o > x <- c(2.2, 1.3, 4.7, 5.1, 3.2) # cria vetor de tamanho 5 > x # imprime o vetor

[1] 2.2 1.3 4.7 5.1 3.2 > y <- x > 5.0 > y # cria vetor lgico o # imprime o vetor TRUE FALSE

[1] FALSE FALSE FALSE > z <- !y > z [1] TRUE TRUE

# vetor lgico de nega~o de y o ca # imprime o vetor TRUE FALSE TRUE

> w <- x[x<5.0] > w

# vetor w com elementos de x < 5 # imprime o vetor w

[1] 2.2 1.3 4.7 3.2 > w2 <- (x+1)[x>=3.0] # elementos de x >= 3, adicionados de 1 > w2 [1] 5.7 6.1 4.2 # imprime o vetor w2

O R nos possibilita lidar com arranjos de vrias dimenses. Vamos utilizar neste a o material apenas o arranjo mais simples de duas dimenses que so as matrizes. A o a forma mais simples de gerarmos uma matriz utilizar o comando matrix(0, n, p). e Estat stica Computacional Ferreira, D.F.

Introduo ao Programa R ca

Este comando nos permite gerar uma matriz composta de elementos iguais a zero e de dimenses linha e coluna iguais a n e p, respectivamente. Os elementos desta o matriz (A) so preenchidos atribuindo, por exemplo, na linha i e coluna j, o valor a desejado 10 da seguinte forma A[i,j] <- 10. Variando-se o ndice da linha e da coluna podemos atribuir valores a quaisquer outras posies da matriz A. co Alguns operadores aplicados a matriz so executados elemento a elemento. Por a exemplo, se zermos A B, teremos uma matriz resultante do produto dos elementos de A com os elementos correspondentes da matriz B. Se desejarmos o produto matricial entre duas matrizes, devemos utilizar o operador % %. Assim, A% %B retorna a matriz resultante da multiplicao matricial de A por B. Os operadores ca nrow(A) e ncol(A) retornam o nmero de linhas e de colunas de A, respectivamente. u O operador diag depende do argumento. Se diag(x) aplicado a um vetor x, o ree sultado uma matriz diagonal cujos elementos so iguais aos elementos do vetor x. e a Se por outro lado utilizarmos diag(A), em que A uma matriz, obteremos um vetor e cujos elementos so os mesmos da diagonal principal de A. O comando solve(A) a retorna a inversa de A, ou seja, A1 . Tambm pode ser utilizado para resolver e sistemas de equaes lineares do tipo y = Ax, da seguinte forma x <- solve(A,y). co Autovalores e autovetores de uma matriz simtrica A podem ser computados por e ev <- eigen(A). Os autovalores so armazenados no objeto (vetor) ev$values e os a autovetores correspondentes, no objeto (matriz) ev$vec. Cada coluna desta matriz contm um autovetor correspondente ao elemento associado do vetor de autovalores. e Uma matriz qualquer pode ser decomposta da seguinte forma A = U DV . Esta decomposio conhecida de decomposio do valor singular e a funo R dada ca e ca ca e por udv <- svd(A). O resultado uma lista com os objetos u, d e v com signicados e o bvios. Uma lista possui objetos de diferentes tipos que podem ser acessados por objeto$componente. No exemplo, obtivemos os elementos da matriz diagonal D utilizando o comando udv$d. Os exemplos apresentados no programa a seguir ilustram as funes e os comandos retro mencionados. co
> # programa R demonstrando o uso de matrizes e de alguns de seus operadores > A <- matrix(0,2,2) # cria uma matriz 2 x 2 de zeros > A[1,1] <- 4; A[1,2] <- 1; A[2,1] <- 1; A[2,2] <- 2 # atribui valores a matriz > A # imprime a matriz [,1] [,2] [1,] [2,] 4 1 1 2

Ferreira, D.F.

Estat stica Computacional

1.1 Introduo ao R ca
> B <- matrix(c(8,-1,-1,1),2,2) # cria uma matriz 2 x 2 de outra forma > B # imprime a matriz [,1] [,2] [1,] [2,] 8 -1 -1 1

> C <- A * B # multiplica~o elemento por elemento ca > C # imprime a matriz [,1] [,2] [1,] [2,] 32 -1 -1 2

> nrow(C);ncol(C)# nmero de linhas e colunas de C u [1] 2 [1] 2 > D <- A%*%B > D [,1] [,2] [1,] [2,] 31 6 -3 1 # vetor com a diagonal principal de D # imprime o vetor resultante 1 # multiplica~o matricial A por B ca # imprime a matriz resultante

> v <- diag(D) > v [1] 31

> AI <- solve(A) # inversa de A > AI [,1] [1,] [2,] -0.1428571 # imprime a matriz resultante [,2] 0.5714286

0.2857143 -0.1428571

> ev <- eigen(A) # autovalores e autovetores de A > ev$vec [,1] [1,] -0.9238795 # imprime os autovetores [,2] 0.3826834

[2,] -0.3826834 -0.9238795 > ev$values # imprime os autovalores

[1] 4.414214 1.585786

Estat stica Computacional

Ferreira, D.F.

8
> udv <- svd(A) > udv $d [1] 4.414214 1.585786 $u [,1] [2,] -0.3826834 $v [,1] [2,] -0.3826834 [,2] 0.9238795 [1,] -0.9238795 -0.3826834 [,2] 0.9238795 [1,] -0.9238795 -0.3826834

Introduo ao Programa R ca
# decomposi~o do valor singular de A ca # imprime todos os resultados da lista: DVS

Muitos outros objetos existem no R e sero descritos oportunamente, na medida a que aparecerem nas funes que desenvolveremos posteriormente. Vamos somente co descrever, para nalizar, como podemos ler um arquivo de dados no formato texto e associ-lo a um objeto R. Vamos imaginar que tenhamos um arquivo de dados com a duas variveis X1 e X2 e n = 20 observaes. Devemos criar um arquivo com algum a co editor de texto, onde na primeira linha colocamos a identicao de cada coluna ca (varivel). Neste exemplo vamos criar um arquivo com o nome dados.txt. a Para ler estes dados do arquivo e associ-lo a um objeto R do tipo data frame, a devemos utilizar o comando read.table(). O comando usado da seguinte forma: e read.table(dados.txt,header=TRUE). A opo header=TRUE indica ao R que nosso ca arquivo possui na primeira linha a identicao das variveis. No exemplo a seguir ca a apresentamos detalhes destes comandos em um pequeno programa R. E conveniente mudarmos o diretrio de trabalho para o local onde se encontra o arquivo dados.txt o no menu File\Change dir do R. Se quisermos editar os dados e atribu -los a um novo objeto (data frame), devemos utilizar o comando > edit(dados). Um planilha ser a aberta para que sejam efetuadas as trocas necessrias. a O arquivo de dados e
X1 13.4 14.6 13.5 15.0 14.6 X2 14 15 19 23 17

Ferreira, D.F.

Estat stica Computacional

1.2 Estruturas de Controle de Programao ca


14.0 16.4 14.8 15.2 15.5 15.2 16.9 14.8 16.2 14.7 14.7 16.5 15.4 15.1 14.2 20 21 16 27 34 26 28 24 26 23 9 18 28 17 14

e o programa
> # programa R demonstrando a leitura de arquivos de dados > dados <- read.table("dados.txt",header=TRUE) # l^ o arquivo no data frame dados e > dados.novo <- edit(dados) # editando o data frame

Finalmente, devemos enfatizar que o R diferencia entre comandos digitados em maisculo e minsculo. Por exemplo na opo header=TRUE, a palavra TRUE u u ca deve estar em maisculo. Se for digitado header=True ou header=true o R acusar u a um erro e o objeto dados no ser criado. No entanto, para esta opo, o R aceita a a ca a simplicao header=T. ca

1.2

Estruturas de Controle de Programao ca

O R um ambiente de programao cujos comandos so expresses. Estas e ca a o expresses podem ser organizadas em grupos com uso de chaves {expr 1; expr 2; o ; expr m}. O valor do grupo o resultado da ultima expresso avaliada. Os e a comandos do R so separados por ponto e v a rgula ou por uma nova linha. O ponto e v rgula sempre indica o m do comando, enquanto uma nova linha pode indicar ou no o m do comando. O comando pode ser associado a um objeto ou no. Quando a a no estiver associado a um objeto, o valor do comando retornado imediatamente. a e Assim, > x <- 2 3 e > 2 3 faro a mesma coisa, mas no primeiro caso o resultado a e armazenado no objeto x e no segundo o seu valor retornado na janela de console do e Estat stica Computacional Ferreira, D.F.

10

Introduo ao Programa R ca

R. Vejamos o exemplo de alguns comandos com uso de agrupamentos no programa a seguir. Observe que nos comandos que se estendem por mais de uma linha, o prompt > se altera para +, aguardando que a continuao do comando seja digitada. ca
> # programa R demonstrando comandos agrupados e comandos > # em mais de uma linha e em apenas uma linha > x <- 1; x <- x+10 > x [1] 11 > x <- 1; x + 10 [1] 11 > { + + + } [1] 11 > z <- {x=0; y <- x + 1; x <- y + 1} # quanto vale z? > z [1] 2 x <- 1 x + 10

O if /else um importante comando de controle que avalia condies para realie co zar um determinado comando ou grupo de comandos, se o resultado for verdadeiro, ou outro comando ou grupo, se o resultado for falso. Mltiplos comandos podem u ser hierarquizados. O comando formal feito da seguinte forma: e
> if (expr 1) expr 2 else expr 3

A expr 1 avaliada e se o resultado lgico for verdadeiro, ento expr 2 exee o a e a a cutada; se o resultado for falso a expr 3 ser avaliada. Se o expr 2 no for um bloco de comandos o else deve obrigatoriamente car na mesma linha de comando de expr 1. O programa a seguir ilustra algumas das possibilidades para o uso do comando if /else. O programa no faz nada de util e algumas comparaes no a co a fazem nenhum sentido, a no ser o de exemplicar o comando. a
> # programa R demonstrando alguns usos do if/else > x <- 1 > if (x > 0.5) y <- 5 else y <- x > y [1] 5

Ferreira, D.F.

Estat stica Computacional

1.2 Estruturas de Controle de Programao ca


> z <- c(0.5,-0.5, 4.5,10) # experimente mudar valores do vetor z > if (any(z <= 0) ) w1 <- log(1+z) else w1 <- log(z) > w1 [1] 0.4054651 -0.6931472 1.7047481 2.3978953

11

> w2 <- if (any(z <= 0) ) log(1+z) else log(z) > w2 [1] 0.4054651 -0.6931472 1.7047481 2.3978953

> if (any(z <= 0)) w3 <- z[z <= 0] > w3 [1] -0.5 > # comandos compostos junto ao if > if (any(z <= 0)) + { + + + > w4 [1] -0.25 w4 <- z[z <= 0] w4 <- z[z <= 0]^2 + w4 # aqui poderia ter comando composto tambm e

+ } else w4 <- z^0.5

Neste programa os comandos > if(any(z <= 0) ) w1 <- log(1+z) else w1 <log(z) e > w2 <- if(any(z <= 0) ) log(1+z) else log(z) so equivalentes. Se houver a no vetor algum elemento menor ou igual a zero, o logaritmo neperiano ser tomado a elemento a elemento do vetor adicionado de 1 e em caso contrrio, ser tomado a a diretamente nos valores originais do vetor. Assim, os vetores w1 e w2 so iguais. a O comando > if(any(z <= 0)) w3 <- z[z <= 0], por sua vez, criar o objeto w3 a contendo o subvetor de z, cujos elementos so inferiores ou iguais a zero. No entanto, a se nenhum valor de z for inferior ou igual a zero, ento o subvetor w3 no ser criado. a a a No caso de vrios comandos aninhados ou hierarquizados temos a seguinte estrutura. a Um dos comandos numerados por nmeros pares ser executado. u a
if (expr 1) expr 2 else if (expr 3) expr 4 else if (expr 5) (expr 6)

Estat stica Computacional

Ferreira, D.F.

12
else

Introduo ao Programa R ca

expr 8

O R possui alguns comandos apropriados para realizar loops, ou seja, as chamadas estruturas de repeties. Os comandos para isso so o for, while e o repeat. co a Adicionalmente os comandos next e break fornecem controles adicionais sobre estas estruturas. O R to ex e a vel que estas estruturas retornam o ultimo valor com putado e nos permite, embora seja extremamente incomum, associar uma varivel a aos seus resultados. Uma outra vantagem do R diz respeito ao fato de que muitas operaes, especialmente as aritmticas, so vetoriais e, portanto, podemos evitar co e a os loops, que so menos ecientes. a O primeiro comando que descreveremos o repeat. Devemos tomar muito cuie dado na especicao da condio de parada para evitarmos repeties innitas ca ca co (loops innitos). A sintaxe geral do comando : e
> repeat expr

O comando expr deve ser necessariamente um grupo de comandos (comando composto). Um destes comandos ir fazer uma avaliao da condio de parada e a ca ca se esta condio for satisfeita o comando break ser usado para interromper o loop. ca a O comando break pode ser usado para cessar qualquer um dos outros comandos de repetio, que , em geral, no normal, mas no caso do repeat constitu na unica ca e a -se forma. No programa apresentado a seguir, ilustramos o uso do comando repeat. Este programa no faz nada de util e tem apenas a nalidade de ilustrar o comando. a
> # programa R demonstrando uso do repeat/break > i <- 1 > repeat + { + + + + } [1] 1 [1] 3.079442 [1] 7.297322 [1] 13.64512 [1] 21.69744 [1] 31.0642 print(i) i <- i + log(i+1)*3 if (i > 35) break

Ferreira, D.F.

Estat stica Computacional

1.2 Estruturas de Controle de Programao ca O comando while muito parecido com o repeat e a sintaxe geral : e e
> while (condiao) expr c

13

Sero repetidos os comandos do grupo expr at que a condio de parada seja a e ca satisfeita. Novamente necessrio frisar que deve-se tomar muito cuidado com a e a condio imposta para evitarmos loops innitos. Nos cdigos seguintes repetimos o ca o mesmo programa feito com o comando repeat, porm utilizando o comando while. e
> # programa R demonstrando uso do while > i <- 1 > while (i <= 35) + { + + + } [1] 1 [1] 3.079442 [1] 7.297322 [1] 13.64512 [1] 21.69744 [1] 31.0642 print(i) i <- i + log(i+1)*3

O comando for usado para repetirmos uma determinada sequncia ou grupo e e de operaes em um nmero xo de vezes. Os passos do loop no R so determinados co u a por um vetor ou sequncia do tipo ini : f im. A sintaxe geral do for para uma dada e sequncia (seq) e um grupo de comandos (expr) dada por: e e
> for (i in seq) expr

Um exemplo de programa R para ilustrar o comando for de controle de loops e dado por:
> # programa R demonstrando uso do for > x <- matrix(0,10,1) > for(i in 1:10) + { + + } > x [,1] [1,] 5.000000 x[i] <- i * 2 + 3 - log(i)

Estat stica Computacional

Ferreira, D.F.

14
[2,] [3,] [4,] 6.306853 7.901388 9.613706

Introduo ao Programa R ca

[5,] 11.390562 [6,] 13.208241 [7,] 15.054090 [8,] 16.920558 [9,] 18.802775 [10,] 20.697415

Como j salientamos dentro do grupo de comandos do for ou do while podemos a utilizar o break se alguma condio for satisfeita. Com o break o R ir executar o ca a prximo comando, se houver, aps o trmino do loop. De qualquer forma, o loop o o e ser interrompido. Outro cuidado que devemos ter, evitar o mximo poss a e a vel o uso das estruturas de repetio no R. Isso no problema, em geral, para nenhuma ca a e outra linguagem. No R, o que acontece que as estruturas de repetio so execue ca a tadas de uma forma mais lenta que comandos ou funes que no as utilizam. Isso co a se deve pela estrutura da linguagem. A linguagem R interpretada e as estruturas e de repeties possuem uma menor ecincia durante o processo de interpretao. co e ca Algumas linguagens interpretadas como o Java no compartilham essa decincia, a e talvez em razo da gerao de bytecodes, que so trechos compilados dos programas a ca a implementados. Esses bytecodes se comunicam diretamente com a mquina, sem a a necessidade de um interpretador intermedirio. Comandos especiais para evitarmos a os loops esto dispon a veis na linguagem. Por exemplo, podemos utilizar o apply, sapply, tapply, entre outras funes tornando a linguagem to eciente quanto qualquer co a outra reconhecidamente eciente. Alm disso, as operaes do R so vetoriais, o e co a que elimina a necessidade de utilizao de loops para suas aplicaes a todos os eleca co mentos do vetor. Outras alternativas a possibilidade de implementarmos cdigos e o em linguagem C ou FORTRAN. Esses cdigos so compilados e ligados aos nossos o a cdigos genuinamente escritos em linguagem R. Assim, podemos utilizar todas as o facilidades do R, associadas ` possibilidade de realizarmos implementaes to ea co a cientes quanto as que far amos utilizando linguagens de programao reconhecidas ca como sendo ecientes. Ferreira, D.F. Estat stica Computacional

1.3 Funes no R co

15

1.3

Funes no R co

O R nos possibilita criar nossas prprias funes, que so genuinamente funes o co a co R, sendo armazenadas internamente de uma forma especial e podendo ser utilizadas em novas expresses. Desta forma a linguagem ganha grande poder, convenincia o e e elegncia. O aprendizado em escrever funes uteis uma das muitas maneiras a co e de fazer com que o uso do R seja confortvel e produtivo. A sintaxe geral de uma a funo dada por: ca e
> nome = function(arg 1, arg 2, ...) expr

em que expr , normalmente, um grupo de comandos e nome o objeto que receber e e a a funo. Sua chamada se dar por um comando nome(a1, a2, ...), em que a1, a2, ca a etc. so os valores que devero ser passados como argumentos dos objetos (arg 1, a a arg 2, ...). Vamos apresentar uma funo simples para testar a hiptese H0 : = 0 a ca o partir de uma amostra simples de uma distribuio normal. Dois argumentos sero ca a utilizados: o vetor de dados x de tamanho n e o valor real hipottico 0 . A funo e ca calcular o valor da estat a stica tc do teste por: X 0
S n

tc =

(1.3.1)

A funo resultante, em linguagem R, apresentada a seguir. Neste exemplo ca e uma amostra de tamanho n = 8 foi utilizada para obter o valor da estat stica para testar a hiptese H0 : = 5,0. Podemos observar que o resultado nal da funo o ca e igual ao do ultimo comando executado, ou seja o valor da estat stica e do valor-p, por meio de um objeto do tipo lista. Se o comando e return() no for utilizado, a a funo retornar sempre como resultado, o valor da ultima operao ou comando ca a ca executado. Esta funo utiliza no seu escopo trs funes do R (funes bsicas do ca e co co a R), ainda no apresentadas. As duas primeiras, var() e mean() retornam a varincia a a e a mdia do vetor utilizado como argumento, respectivamente, e a terceira, pt(), e retorna a probabilidade acumulada da distribuio t de Student para o primeiro ca argumento da funo com graus de liberdade, que o seu segundo argumento. ca e
> # programa R demonstrando uso de uma fun~o ca > tteste <- function(x,mu0) + {

Estat stica Computacional

Ferreira, D.F.

16
+ + + + + + + + } > y <- c(3.4,5.6,4.0,6.0,7.8,9.1,3.4,4.5) > t <- tteste(y,5.0) > t $tc [1] 0.6428422 $pr [1] 0.540803 n <- length(x)

Introduo ao Programa R ca

S2 <- var(x) xb <- mean(x) t <- list(tc=c(0), pr=c(0)) t$tc <- (xb-mu0)/sqrt(S2/n) t$pr <- 2 * (1 - pt(abs(t$tc), n - 1)) return(t)

Os argumentos x e mu0 denem as variveis cujos valores sero fornecidos a a quando a funo for chamada. Os nomes destes argumentos podem ser utilizaca dos dentro do escopo desta funo e os valores devem ser fornecidos no momento ca em que funo foi chamada, como neste caso. No exemplo, os valores especicados ca anteriormente para os componentes do vetor y e o valor 5,0 para o valor hipottico e foram utilizados como argumentos da funo. Podemos utilizar valores default para ca os argumentos, como por exemplo varivel = valor. Poder a amos utilizar o default mu0 = 0 na declarao da funo. Neste caso, se o valor hipottico no for passado, ca ca e a ento a hiptese testada ser sempre H0 : = 0. a o a Assim, poder amos ter o seguinte programa resultante:
> # programa R demonstrando uso de uma fun~o ca > tteste <- function(x,mu0 = 0)#usando valor default para mu0 + { + + + + + + + + + n <- length(x) if (n <= 1) stop("Amostra deve conter mais de 1 elemento") S2 <- var(x) xb <- mean(x) # acrescentando informa~es amostrais na lista de sada co t <- list(tc=c(0), pr=c(0), mdia = xb, vari^ncia = S2, n = n) e a t$tc <- (xb-mu0)/sqrt(S2/n) t$pr <- 2 * (1 - pt(abs(t$tc), n - 1)) return(t)

Ferreira, D.F.

Estat stica Computacional

1.3 Funes no R co
+ } > y <- c(3.4,5.6,4.0,6.0,7.8,9.1,3.4,4.5) > tc1 <- tteste(x = y, mu0 = 5.0) > tc1 $tc [1] 0.6428422 $pr [1] 0.540803 $mdia e [1] 5.475 $vari^ncia a [1] 4.367857 $n [1] 8 > tc2 <- tteste(x = y) # testar H0: mu = 0 > tc2 $tc [1] 7.409602 $pr [1] 0.0001482082 $mdia e [1] 5.475 $vari^ncia a [1] 4.367857 $n [1] 8 > tc3 <- tteste(y, 5.0) # testar H0:mu = 5 > tc3 $tc [1] 0.6428422 $pr

17

Estat stica Computacional

Ferreira, D.F.

18
[1] 0.540803 $mdia e [1] 5.475 $vari^ncia a [1] 4.367857 $n [1] 8

Introduo ao Programa R ca

Neste programa demonstramos diferentes formas de invocar a funo. No caso, ca os argumentos que possuem default podem ser omitidos, desde que a ordem de entrada dos argumentos no seja alterada, ou desde que entremos com os argumentos a nomeando-os, como foi o caso dos exemplos tc1 e tc2. O R, diferentemente do S-plus, ir buscar um objeto utilizado em uma funo preferencialmente no prprio escopo a ca o da funo e somente aps no encontr-lo localmente, ser buscado o objeto global. ca o a a a O S-plus faz exatamente o contrrio, busca preferencialmente os objetos globais de a mesmo nome dos objetos locais. Iremos dar preferncias `s funes neste material e a co para executarmos tarefas e resolvermos problemas que eventualmente defrontaremos daqui por diante. O resultado de uma funo pode ser colocado em uma lista e ca o objeto que ir invocar a funo herdar os objetos desta lista. Assim, como a ca a vimos nesta funo, calculamos, alm do valor da estat ca e stica, o valor-p (pr). Se no tivssemos criado a lista t, poder a e amos ter calculado o valor-p e o valor da estat stica separadamente e terminar amos a funo utilizando o seguinte comando: ca > return(list(tc=t, valor.p=pr)). Os objetos tc1, tc2 e tc3 possuem os componentes tc e pr como resultados e so chamados, por exemplo, por tc1$tc e tc1$pr. Outras a informaes foram acrescentadas ao objeto do tipo lista t, como a mdia, a varincia co e a amostrais e o tamanho da amostra.

1.4

Introduo a Estat ca stica Computacional

Os mtodos de computao intensiva tm desempenhado um papel cada vez mais e ca e importante para resolver problemas de diferentes reas da cincia. Vamos apresentar a e algoritmos para gerar realizaes de variveis aleatrias de diversas distribuies de co a o co probabilidade, para realizar operaes matriciais, para realizar inferncias utilizando co e Ferreira, D.F. Estat stica Computacional

1.4 Introduo a Estat ca stica Computacional

19

mtodos de permutao e bootstrap, etc. Assim, buscamos realizar uma diviso e ca a deste material em uma seo bsica e em outra aplicada. As tcnicas computacionais ca a e so denominadas de estat a stica computacional se forem usadas para realizarmos inferncias, para gerarmos realizaes de variveis aleatrias ou para compararmos e co a o mtodos e tcnicas estat e e sticas. Vamos explorar mtodos de gerao de realizaes de variveis aleatrias de e ca co a o diversos modelos probabil sticos, para manipularmos matrizes, para obtermos quadraturas de funes de distribuio de diversos modelos probabil co ca sticos e de funes co especiais na estat stica e nalmente vamos apresentar os mtodos de computao ine ca tensiva para realizarmos inferncias em diferentes situaes reais. Temos a inteno e co ca de criar algoritmos em linguagem R e posteriormente, quando existirem, apresentar os comandos para acessarmos os mesmos algoritmos j implementados no R. a Vamos apresentar os mtodos de bootstrap e Monte Carlo, os testes de permue tao e o procedimento jackknife para realizarmos inferncias nas mais diferentes ca e situaes reais. Assim, este curso tem basicamente duas intenes: possibilitar ao co co aluno realizar suas prprias simulaes e permitir que realizem suas inferncias de o co e interesse em situaes em que seria altamente complexo o uso da inferncia clssica. co e a Seja na inferncia frequentista ou na inferncia Bayesiana, os mtodos de simue e e lao de nmeros aleatrios de diferentes modelos probabil ca u o sticos assumem grande importncia. Para utilizarmos de uma forma mais eciente a estat a stica computacional, um conhecimento m nimo de simulao de realizaes de variveis aleatrias ca co a o uma necessidade que no deve ser ignorada. Vamos dar grande nfase a este ase a e sunto, sem descuidar dos demais. Apresentaremos neste material diversos algoritmos desenvolvidos e adaptados para a linguagem R. Simular a arte de construir modelos segundo Naylor et al. (1971) [11], com e o objetivo de imitar o funcionamento de um sistema real, para averiguarmos o que aconteceria se fossem feitas alteraes no seu funcionamento (Dachs, 1988 [2]). Este co tipo de procedimento pode ter um custo baixo, evitar preju zos por no utilizarmos a procedimentos inadequados e otimizar a deciso e o funcionamento do sistema real. a Precaues contra erros devem ser tomadas quando realizamos algum tipo de co simulao. Podemos enumerar: ca 1. escolha inadequada das distribuies; co 2. simplicao inadequada da realidade; e ca Estat stica Computacional Ferreira, D.F.

20 3. erros de implementao. ca

Introduo ao Programa R ca

Devemos fazer o sistema simulado operar nas condies do sistema real e vericar co por meio de alguns testes se os resultados esto de acordo com o que se observa no a sistema real. A este processo denominamos de validao. Ento, a simulao uma ca a ca e tcnica que usamos para a soluo de problemas. Se a soluo alcanada for mais e ca ca c rpida, de menor custo e de fcil interpretao em relao a outro mtodo qualquer, a a ca ca e o uso de simulao justicvel. ca e a

1.5

Exerc cios
= [4, 2, 1, 5] e B = [6, 3, 8, 9] e concaten-los fora mando um unico vetor. Obter o vetor C = 2A B e o vetor D = B A. Criar uma sequncia cujo valor inicial igual a 2 e o valor nal 30 e cujo passo e e e e igual a 2. Replicar cada valor da sequncia 4 vezes de duas formas diferentes e (valores replicados cam agregados e a sequncia toda se replica sem que os e valores iguais quem agregados).

1.5.1 Criar no R os vetores A

1.5.2 Selecionar o subvetor de x = [4, 3, 5, 7, 9, 10] cujos elementos so menores ou a iguais a 7. 1.5.3 Criar a matriz A= 10 1 1 2

e determinar os autovalores e a decomposio espectral de A. ca 1.5.4 Construir uma funo para vericar quantos elementos de um vetor de dimenca so n so menores ou iguais a uma constante k, real. Utilize as estruturas a a de repeties for, while e repeat para realizar tal tarefa (cada uma destas esco truturas dever ser implementada em uma diferente funo). Existe algum a ca procedimento mais eciente para gerarmos tal funo sem utilizar estruturas ca de repeties? Se sim, implement-lo. co a 1.5.5 Implementar uma funo R para realizar o teste t de Student para duas amosca tras independentes. Considerar os casos de varincias heterogneas e homoga e e neas. Utilizar uma estrutura condicional para aplicar o teste apropriado, caso Ferreira, D.F. Estat stica Computacional

1.5 Exerc cios

21

as varincias sejam heterogneas ou homogneas. A deciso deve ser baseada a e e a em um teste de homogeneidade de varincias. Para realizar tal tarefa implea mentar uma funo espec ca ca assumindo normalidade das amostras aleatrias. o 1.5.6 Criar uma funo para obter a inversa de Moore-Penrose de uma matriz qualca quer n m, baseado na decomposio do valor singular, funo svd do R. Seja ca ca para isso uma matriz A, cuja decomposio do valor singular A = U DV , ca e em que D a matriz diagonal dos valores singulares e U e V so os vetores e a singulares correspondentes. A inversa de Moore-Penrose de A denida por e A+ = V D1 U .

Estat stica Computacional

Ferreira, D.F.

22

Introduo ao Programa R ca

Ferreira, D.F.

Estat stica Computacional

Cap tulo 2

Gerao de Realizaes de ca co Variveis Uniformes a


Neste cap tulo vamos considerar a gerao de nmeros aleatrios para o modelo ca u o probabil stico uniforme. A partir do modelo uniforme podemos gerar realizaes de co variveis aleatrias de qualquer outro modelo probabil a o stico. Para gerar realizaes co de uma distribuio uniforme, precisamos gerar nmeros aleatrios. Isso no pode ca u o a ser realizado por mquinas. Na verdade qualquer sequncia produzida por uma a e mquina na verdade uma sequncia previs a e e vel. Dessa forma, a denominamos de sequncia de nmeros pseudo-aleatrios. e u o Uma sequncia de nmeros ser considerada aleatria do ponto de vista compue u a o tacional se o programa que a gerar for diferente e estat sticamente no correlacionado a com o programa que a usar. Assim, dois geradores de nmeros aleatrios deveriam a u o produzir os mesmos resultados nas suas aplicaes. Se isso no ocorrer, um deles no co a a pode ser considerado um bom gerador de nmeros aleatrios (Press et al., 1992 [13]). u o Os conceitos de nmeros uniformes e nmeros aleatrios podem ser muitas vezes u u o confundidos. Nmeros uniformes so aqueles que variam aleatoriamente em uma u a faixa determinada de valores com probabilidade constante. No entanto, devemos diferenciar nmeros aleatrios uniformes de outros tipos de nmeros aleatrios, como u o u o por exemplo, nmeros aleatrios normais ou gaussianos. Estes outros tipos so geralu o a mente provenientes de transformaes realizadas nos nmeros aleatrios uniformes. co u o Ento, uma fonte convel para gerar nmeros aleatrios uniformes determina o sua a u o cesso de mtodos estocsticos de inferncia e de todo processo de simulao Monte e a e ca Estat stica Computacional Ferreira, D.F.

24 Carlo.

Gerao de Realizaes de Variveis Uniformes ca co a

2.1

N meros Aleatrios Uniformes u o

Nmeros uniformes aleatrios so aqueles que, a princ u o a pio, se situam dentro de uma determinada amplitude, geralmente entre 0 e 1, para os quais no podemos a produzir uma sequncia previs de valores. Em vrios programas estes nmeros e vel a u so gerados utilizando o comando random ou comandos similares. Em Pascal, por a exemplo, se este comando for utilizado com o argumento n, random(n), nmeros u aleatrios inteiros U do intervalo 0 U n 1 so gerados e se o argumento n no o a a for usado, os nmeros gerados so valores aleatrios reais do intervalo [0; 1[. u a o Em geral, os programas utilizam o mtodo congruencial. Sejam os nmeros e u uniformes inteiros U1 , U2 , U3 , . . . entre 0 e m 1, em que m representa um grande nmero inteiro. Podemos gerar estes nmeros utilizando o mtodo congruencial por u u e meio da relao recursiva: ca Ui+1 = (aUi + c) mod m (2.1.1)

em que m chamado de mdulo, a e c so inteiros positivos denominados de mule o a tiplicador e incremento, respectivamente. O operador mod retorna o resto da diviso do argumento (aUi + c) por m. A sequncia recorrente (2.1.1) se repete em a e um per odo que no maior que m, por razes bvias. Se a, c e m so adequadaa e o o a mente escolhidos, a sequncia tem tamanho mximo igual a m. A escolha do valor e a inicial U0 tambm muito importante. O valor do nmero uniforme correspondente e e u no intervalo de 0 a 1 dado por Ui+1 /m, que sempre menor que 1, mas podendo e e ser igual a zero. Vamos apresentar um exemplo didtico para ilustrar o gerador de nmeros alea u atrios. Sejam U0 = a = c = 7 e m = 10, logo, o U1 = (7 7 + 7) U2 = (7 6 + 7) mod 10 = 56 mod 10 = 49 mod 10 = 6 mod 10 = 9

e assim sucessivamente. Obtemos a sequncia de nmeros aleatrios: e u o {7, 6, 9, 0, 7, 6, 9, 0, 7, 6, 9, } Ferreira, D.F. Estat stica Computacional

2.1 N meros Aleatrios Uniformes u o

25

e vericamos que o per odo igual a 4 {7,6, 9, 0, }, que menor do que m = 10. e e Este mtodo tem a desvantagem de ser correlacionado em srie. Se m, a ou c e e no forem cuidadosamente escolhidos a correlao pode comprometer a sequncia a ca e gerada em srie. Por outro lado, o mtodo tem a vantagem de ser muito rpido. e e a Podemos perceber que a cada chamada do mtodo, somente alguns poucos clculos e a so executados. Escolhemos, em geral, o valor de m pelo maior inteiro que pode ser a representado pela mquina, qual seja, 232 . Um exemplo que foi utilizado por muitos a anos nos computadores IBM mainframe, que representam uma pssima escolha e e a = 65.539 e m = 231 . A correlao serial no o unico problema desse mtodo. Os bits de maior ordem ca a e e so mais aleatrios do que os bits de menor ordem (mais signicantes). Devemos a o gerar inteiros entre 1 e 20 por j = 1 + int(20 random(semente)), ao invs de e usar o mtodo menos acurado j = 1 + mod (int(1000000 random(semente)),20), e que usa bits de menor ordem. Existem fortes evidncias, emp e ricas e tericas, que o o mtodo congruencial e Ui+1 = aUi mod m (2.1.2)

to bom quanto o mtodo congruencial com c = 0, se o mdulo m e o multiplicador e a e o a forem escolhidos com cuidado (Press et al., 1992[13]). Park e Miller (1988)[12] propuseram um gerador padro m a nimo baseado nas escolhas: a = 75 = 16.807 m = 231 1 = 2.147.483.647 (2.1.3)

Este gerador de nmeros aleatrios no perfeito, mas passou por todos os testes u o a e a qual foi submetido e tem sido usado como padro para comparar e julgar outros a geradores. Um problema que surge e que devemos contornar que no poss e a e vel implementarmos diretamente em uma linguagem de alto-n a equao (2.1.2) com vel ca as constantes de (2.1.3), pois o produto de a e Ui excede, em geral, o limite mximo a de 32 bits para inteiros. Podemos usar um truque devido a Schrage (1979)[15] para multiplicar inteiros de 32-bits e aplicar o operador de mdulo e que garante uma o portabilidade para ser implementado em praticamente todas as linguagens e em todas as mquinas. O algoritmo de Schrage baseia-se na fatorao aproximada de a ca m dada por: m = aq + r; Estat stica Computacional i.e., q = m/a ; r = m mod a (2.1.4) Ferreira, D.F.

26

Gerao de Realizaes de Variveis Uniformes ca co a

em que z denota a parte inteira do nmero z utilizado como argumento. Para um u nmero Ui entre 1 e m 1 e para r pequeno, especicamente para r < q, Schrage u (1979) [15] mostraram que ambos a(Ui mod q) e r Ui /q pertencem ao intervalo 0 m 1 e que aUi mod m = a(Ui a(Ui mod q) r Ui /q se maior que 0 (2.1.5)

mod q) r Ui /q + m caso contrrio. a

Computacionalmente observamos que a relao: ca a(Ui mod q) = a(Ui q Ui /q )

se verica. No R pode-se optar por usar o operador %% (mod ), que retorna o resto da operao entre dois inteiros e o operador %/% (div ), que retorna o resultado do divica dendo para operaes com inteiros. A quantidade Ui mod q = Ui (Ui co div q)q pode ser obtida em R simplesmente com Ui %% q. Atribu mos o resultado a uma varivel qualquer denida como inteiro. Para aplicarmos o algoritmo de Schrage `s a a constantes de (2.1.3) devemos usar os seguintes valores: q = 127.773 e r = 2.836. A seguir apresentamos o algoritmo do gerador padro m a nimo de nmeros aleau trios: o
> # gerador padr~o mnimo de nmeros aleatrios adaptado de Park and a u o > # Miller. Retorna desvios aleatrios uniformes entre 0 e 1. Fazer o > # "sem" igual a qualquer valor inteiro para iniciar a sequ^ncia; e > # "sem" n~o pode ser alterado entre sucessivas chamadas da sequ^ncia a e > # se "sem" for zero ou negativo, um valor dependente do valor do relgio o > # do sistema no momento da chamada usado como semente. Constantes e > # usadas a = 7^5 = 16.807; m = 2^31 - 1 = 2.147.483.647 > # e c = 0 > gna0 <- function(n,sem) + { + + + + + + + + + } gnu0 <- function (sem) # fun~o local ca { k <- sem %/% iq # divis~o de inteiros a # calculando sem <- mod(ia * sem, im) sem provocar overflow- Schrage sem <- ia * (sem - k * iq) - ir * k if (sem < 0) sem <- sem+im ran0 <- am * sem # converte sem para ponto flutuante return(list(ran0 = ran0, sem = sem))

Ferreira, D.F.

Estat stica Computacional

2.1 N meros Aleatrios Uniformes u o


+ + + + + + + + + + + + + + + + + + + } return(u) } u <- matrix(0, n, 1) # inicia o vetor de resultados amostra <- gnu0(sem) #chama gnu0 u[1] <- amostra$ran0 # inicia o primeiro elemento for (i in 2:n) { amostra <- gnu0(amostra$sem) u[i] <- amostra$ran0 ia <- 16807;im <- 2147483647;am <- 1.0/im iq <- 127773;ir <- 2836 if (sem<=0) { library(R.utils) #library necessria a asem <- GString$getBuiltinTime(format="%H:%M:%S") #depende relgio/sistema o sem <- as.numeric(substr(asem,1,2)) * 60 * 60 + as.numeric(substr(asem,4,5)) * 60 + as.numeric(substr(asem,7,8))

27

+ } # fun~o ca > #uso da fun~o para gerar o vetor X de n nmeros uniformes 0, 1 ca u > n <- 5 > x <- gna0(n,0) > x [,1] [1,] 0.27471339 [2,] 0.10790161 [3,] 0.50241437 [4,] 0.07828064 [5,] 0.66280040

Devemos apresentar algumas consideraes a respeito desse algoritmo escrito em co linguagem R: a) a funo gna0 (gerador de nmeros aleatrios m ca u o nima) retorna um nmero real entre 0 e 1. Este tipo de especicao determina que as variveis u ca a possuam preciso dupla. A preciso dupla (double) possui nmeros na faixa de 5,0 a a u 10324 1,7 10308 , ocupa 8 bytes de memria e possui 15 16 d o gitos signicantes; b) o valor da semente denido pelo usurio e declarado na funo como parmetro e a e ca a de referncia. Isso signica que a varivel do programa que chama a funo e que e a ca e passada como semente deve ser atualizada com o novo valor modicado em gna0. Se o seu valor inicial for zero ou negativo, a funo atribui um inteiro dependente ca Estat stica Computacional Ferreira, D.F.

28

Gerao de Realizaes de Variveis Uniformes ca co a

da hora do sistema no momento da chamada; c) o sinal # indica comentrio no a R; d) o comando > list(u=amostra$ran0, sem=amostra$sem) passa o valor de amostra para o resultado da funo em uma lista contendo o novo valor da semente ca e o nmero aleatrio ran0 gerado; e) a funo tem dependncia do pacote R.utils, u o ca e que por sua vez depende dos pacotes R.methodsS3 e R.oo. Essa dependncia se e caracteriza por usar uma funo para capturar a hora do sistema. ca A rotina iniciada com os valores de n e da semente fornecidos pelo usurio. e a Se a semente for nula ou negativa, atribu mos um novo valor dependente do relgio o do sistema no momento da chamada usando funes do R para isso. A partir deste co ponto o programa deve chamar reiteradas vezes a funo gna0, que retorna o valor ca do nmero aleatrio 0 e 1 utilizando o algoritmo descrito anteriormente, at que a u o e sequncia requerida pelo usurio seja completada. Nas sucessivas chamadas desta e a funo, o valor da semente sempre igual ao valor do ultimo passo, uma vez que ca e sem da ultima chamada deve ser passada como parmetro de referncia para a a e funo gna0 a partir do bloco do programa que a chamou. ca O per odo de gna0 da ordem de 231 2,15109 , ou seja, a sequncia completa e e superior a 2 bilhes de nmeros aleatrios. Assim, podemos utilizar gna0 para a e o u o maioria dos propsitos prticos. Evitamos o valor zero na funo gna0 devido ao o a ca fato de todos os valores da sequncia serem nulos para um valor inicial de semente e igual a zero. No entanto, para sementes positivas nunca ocorrer o valor 0 na gerao a ca da sequncia. e Como j salientamos o gerador padro m a a nimo de nmeros aleatrios possui u o duas limitaes bsicas, quais sejam, sequncia curta e correlao serial. Assim, co a e ca como existem mtodos para eliminar a correlao serial e que aumentam o per e ca odo da sequncia, recomendamos que sejam adotados. Claro que a funo apresentada e ca teve por objetivo ilustrar como podemos programar nossas prprias funes para geo co rarmos nmeros aleatrios uniformes. O R, no entanto, possui seu prprio gerador u o o de nmeros uniformes, que veremos na sequncia. Um dos melhores e mais inteu e ressantes geradores de nmeros aleatrios o Mersenne Twister (MT). Mersenne u o e Twister um gerador de nmeros pseudo-aleatrios desenvolvido por Makoto Mate u o sumoto e Takuji Nishimura nos anos de 1996 e 1997 [9]. MT possui os seguintes mritos segundo seus desenvolvedores: e 1. foi desenvolvido para eliminar as falhas dos diferentes geradores existentes; Ferreira, D.F. Estat stica Computacional

2.2 N meros Aleatrios Uniformes no R u o

29

2. possui a vantagem de apresentar o maior per odo e maior ordem de equidistribuio do que de qualquer outro mtodo implementado. Ele fornece um ca e per odo que da ordem de 219.937 1 4,3154 106001 , e uma equidistribuio e ca 623-dimensional; 3. um dos mais rpido geradores existentes, embora complexo; e a 4. faz uso de forma muito eciente da memria. o Existem muitas verses implementadas deste algoritmo, inclusive em Fortran e o C e que esto dispon a veis na internet. Como o R nos possibilita incorporar funes co escritas nestas linguagem, podemos utilizar este algoritmo. Felizmente, o R j possui a este algoritmo implementado, sendo inclusive usado como default. Por se tratar de um tpico mais avanado, que vai alm do que pretendemos apresentar nestas notas o c e de aulas, no descreveremos este tipo de procedimento para incorporaes de funes a co co escritas em outras linguagens.

2.2

N meros Aleatrios Uniformes no R u o

No SAS o comando usado para gerarmos nmeros uniformes aleatrios Rau o e nuni(semente). Neste caso devemos usar o argumento semente para especicar uma sequncia reproduz de nmeros aleatrios, sendo que seu valor deve ser um e vel u o inteiro. Se o valor 0 for especicado como argumento, o programa escolher autoa maticamente um valor para semente que depende da hora e da data do sistema. No programa R podemos gerar nmeros aleatrios uniformes cont u o nuos utilizando uma funo pr-programada. Os nmeros aleatrios uniformes so gerados pelo comando ca e u o a runif(n, min, max), em que n o tamanho da sequncia, min e max so are e a gumentos que delimitam o valor m nimo e mximo da sequncia a ser gerada. O a e controle da semente para se gerar uma sequncia reproduz e vel de nmeros uniforu mes dada pelo comando set.seed(semente), onde o argumento semente deve ser e um nmero inteiro. O R automaticamente determina a cada chamada uma nova u semente. Conseguimos gerar diferentes sequncias em cada chamada do comando e runif(n, min, max), sem nos preocuparmos com a semente aleatria. Devemos o reiterar que o programa R utiliza por default o algoritmo Mersenne Twister. No programa apresentado a seguir ilustramos como podemos gerar n nmeros u Estat stica Computacional Ferreira, D.F.

30

Gerao de Realizaes de Variveis Uniformes ca co a

aleatrios uniformes entre 0 e 1 utilizando a funo runif do R. O programa resulo ca tante compacto, simples e eciente. e
> # programa R demonstrando o uso de gera~o de n nmeros aleatrios uniformes ca u o > # por meio do comando runif > n <- 5 # determina o tamanho do vetor aleatrio o > x <- runif(n, 0, 1) # gera o vetor uniforme > x # imprime o vetor x [1] 0.05621721 0.71699502 0.03871974 0.80180021 [5] 0.33919527

Fizemos um programa para comparar o tempo de execuo das funes gna0 ca co e runif e observamos que o tempo mdio para cada varivel gerada no gna0 de e a e 2,9 105 e no runif de 1,7 107 . Desta forma vericamos que o algoritmo runif e aproximadamente 170 vezes mais rpido do que gna0. Obviamente temos que e a considerar que o algoritmo runif foi implementado em outra linguagem e a funo ca compilada que est associada ao R. O algoritmo gna0 por sua vez foi implementado e a em linguagem R, que interpretada. Assim, naturalmente o algoritmo runif deveria e ser mais rpido do que qualquer outro algoritmo feito em linguagem interpretada a R. Para obtermos este resultado utilizamos um Intel Core 2 CPU, U7700, 1,33 GHz (centrino) e 2 GB de memria RAM. Foram gerados 1.000.000 de nmeros aleatrios o u o do algoritmo gna0 e 10.000.000 do algoritmo runif. O trecho do programa utilizado foi:
> # programa R demonstrando a compara~o de tempos dos algoritmos ca > # de gera~o de n nmeros aleatrios uniformes ca u o > # a fun~o gna0 deve ser carregada previamente ca > # tempo gna0 > n > ini > x > fim > tempo1.seg user system elapsed <- 1000000 <- proc.time() <- gna0(n,0) <- proc.time()

> tempo1.seg <- (fim-ini)/n

1.538e-05 7.000e-08 1.548e-05 > # tempo de runif > n > ini <- 10000000 <- proc.time()

Ferreira, D.F.

Estat stica Computacional

2.3 Exerc cios


> x > fim > tempo2.seg user system elapsed <- runif(n,0,1) <- proc.time()

31

> tempo2.seg <- (fim - ini)/n

4.1e-08 3.0e-09 4.3e-08 > tempo1.seg / tempo2.seg user 375.12195 system elapsed

23.33333 360.00000

2.3

Exerc cios
nencial f (x) = ex . Sabemos do teorema da transformao de probabica lidades, que se U tem distribuio uniforme, X = F 1 (U ) tem distribuio ca ca de probabilidade com densidade f (x) = F (x); em que F (x) =
x f (t)dt

2.3.1 Utilizar o gerador gna0 para gerar n realizaes de uma distribuio expoco ca

a funo de distribuio de X e F 1 (y) a sua funo inversa para o e ca ca e ca valor y. Para a exponencial a funo de distribuio de probabilidade : ca ca e F (x) =
x t dt 0 e

= 1 ex . Para obtermos a funo inversa temos que ca

igualar u a F (x) e resolver para x. Assim, u = 1 ex e resolvendo para x temos: x = ln (1 u)/. Devido ` simetria da distribuio uniforme 1 u a ca pode ser trocado por u. O resultado nal : x = ln (u)/. Para gerar e nmeros da exponencial basta gerar nmeros uniformes e aplicar a relao u u ca x = ln (u)/. Fazer isso para construir uma funo que gera n realizaes ca co exponenciais. Aplicar a funo para obter amostras aleatrias da exponencial ca o de tamanho n = 100 e obter o histograma da amostra simulada. Calcule a mdia e a varincia e confronte com os valores tericos da distribuio expoe a o ca nencial. 2.3.2 Para gerar nmeros de uma distribuio normal, cuja densidade dada por u ca e f (x) = 1/( 2 2 ) exp{(x )2 /(2 2 )}, qual seria a diculdade para podermos utilizar o teorema anunciado no exerc 2.3.1? cio 2.3.3 Como poder amos adaptar o algoritmo apresentados nesse cap tulo para gerar nmeros aleatrios uniformes utilizando os valores propostos por Park e Miller, u o Estat stica Computacional Ferreira, D.F.

32

Gerao de Realizaes de Variveis Uniformes ca co a ou seja, a = 48.271 e m = 231 1? Implementar o algoritmo, tomando cuidado em relao aos novos multiplicador q e resto r da fatorao de m? ca ca

2.3.4 Comparar a velocidade de processamento das funes apresentadas (runif e co rna0 ) nesse cap tulo para gerar 10.000.000 de nmeros aleatrios uniformes u o entre 0 e 1. Como voc poderia propor um teste estat e stico simples para avaliar a aleatoriedade da sequncia de nmeros uniformes gerados por esses e u algoritmos? Implementar sua ideia.

Ferreira, D.F.

Estat stica Computacional

Cap tulo 3

Gerao de Variveis ca a No-Uniformes a


Neste cap tulo vamos apresentar alguns mtodos gerais para gerarmos variveis e a aleatrias de outras distribuies de probabilidade, como, por exemplo, dos modelos o co exponencial, normal e binomial. Implementaremos algumas funes em linguagem co R e nalizaremos com a apresentao das rotinas otimizadas e j implementadas no ca a R.

3.1

Introduo ca

Vamos estudar a partir deste instante um dos principais mtodos, determinado e pela lei fundamental de transformao de probabilidades, para gerarmos dados de ca distribuies de probabilidades cont co nuas ou discretas. Para alguns casos espec cos, vamos ilustrar com procedimentos alternativos, que sejam ecientes e computacionalmente mais simples. Esta transformao tem por base o modelo uniforme 0, 1. ca Por essa razo a gerao de nmeros uniformes to importante. a ca u e a Veremos posteriormente nestas notas de aulas algoritmos para obtermos numericamente a funo de distribuio F (x) e a sua funo inversa x = F 1 (p), em que ca ca ca p pertence ao intervalo que vai de 0 a 1. Este conhecimento fundamental para a e utilizao deste principal mtodo. ca e Neste cap tulo limitaremos a apresentar a teoria para alguns poucos modelos probabil sticos, para os quais podemos facilmente obter a funo de distribuio de ca ca Estat stica Computacional Ferreira, D.F.

34

Gerao de Variveis No-Uniformes ca a a

probabilidade e a sua inversa analiticamente. Para os modelos mais complexos, embora o mtodo determinado pela lei fundamental de transformao de probabilidades e ca seja adequado, apresentaremos apenas mtodos alternativos, uma vez que este, em e geral, pouco eciente em relao ao tempo gasto para gerarmos cada varivel alee ca a atria. Isso se deve ao fato de termos que obter a funo inversa numericamente da o ca funo de distribuio de probabilidade dos modelos probabil ca ca sticos mais complexos.

3.2

Mtodos Gerais para Gerar Variveis Aleatrias e a o

Podemos obter variveis aleatrias de qualquer distribuio de probabilidade a a o ca partir de nmeros aleatrios uniformes. Para isso um importante teorema pode ser u o utilizado: o teorema fundamental da transformao de probabilidades. ca Teorema 3.1 (Teorema fundamental da transformao de probabilidades). Sejam ca U uma varivel uniforme U (0, 1) e X uma varivel aleatria com densidade f e a a o funo de distribuio F cont ca ca nua e invert vel, ento X = F 1 (U ) possui densidade a f . Sendo F 1 a funo inversa da funao de distribuio F . ca c ca Demonstrao: Seja X uma varivel aleatria com funo de distribuio F e ca a o ca ca funo de densidade f . Se u = F (x), ento o jacobiano da transformao du/dx = ca a ca e F (x) = f (x). Assim, a varivel aleatria X = F 1 (U ) tem densidade f dada por: a o fX (x) = g(u) du = g [FX (x)] f (x) = f (x), dx 0<u<1

e g(u) = 0 para outros valores de u. Em outras palavras a varivel aleatria X = a o F 1 (U ) possui funo densidade fX (x), estabelecendo o resultado almejado e assim, ca a prova ca completa. Para variveis aleatrias discretas, devemos modicar o teorema para podermos a o contemplar funes de distribuies F em escada, como so as funes de distribuio co co a co ca de probabilidades associadas a essas variveis aleatrias. a o Na Figura 3.1 representamos como podemos gerar uma varivel aleatria X com a o densidade f e funo de distribuio F . Assim, basta gerarmos um nmero uniforme ca ca u u0 e invertermos a funo de distribuio F neste ponto. Computacionalmente a ca ca diculdade obtermos analiticamente uma expresso para a funo F 1 para muitos e a ca modelos probabil sticos. Em geral, essas expresses no existem e mtodos numo a e e ricos so requeridos para inverter a funo de distribuio. Neste cap a ca ca tulo vamos Ferreira, D.F. Estat stica Computacional

3.2 Mtodos Gerais para Gerar Variveis Aleatrias e a o

35

apresentar este mtodo para a distribuio exponencial e nos prximos cap e ca o tulos estudaremos os mtodos numricos de obteno das funes de distribuies de ine e ca co co u meros modelos probabil sticos.

1 .0

u = F (x )

u
0

0 .8

0 .6

0 .4

0 .2

-2 .4

-1 .2

0 .0

x 01 .2

2 .4

Figura 3.1: Ilustrao do teorema fundamental da transformao de probabilidades ca ca para gerar uma varivel aleatria X com densidade f (x) = F (x). A a o partir de um nmero aleatrio uniforme u0 a funo de distribuio u o ca ca e invertida neste ponto para se obter x0 , com densidade f (x). Um outro mtodo bastante geral que utilizaremos denominado de mtodo da e e e amostragem por rejeio. Esse mtodo tem um forte apelo geomtrico. Procuca e e raremos, a princ pio, descrever esse mtodo de uma forma bastante geral. Postee riormente, aplicaremos este mtodo para gerarmos variveis aleatrias de alguns e a o modelos probabil stico. A grande vantagem deste mtodo contempla o fato de no e a precisarmos obter a funo de distribuio de probabilidade e nem a sua inversa. ca ca Estas estratgias s podem ser aplicadas em muitos dos modelos probabil e o sticos existentes, se utilizarmos mtodos numricos iterativos. Seja f (x) a densidade para e e a qual queremos gerar uma amostra aleatria. A rea sob a curva para um intervalo o a qualquer de x corresponde ` probabilidade de gerar um valor x nesse intervalo. Se a pudssemos gerar um ponto em duas dimenses, digamos (X,Y ), com distribuio e o ca Estat stica Computacional Ferreira, D.F.

36

Gerao de Variveis No-Uniformes ca a a

uniforme sob a rea, ento a coordenada X teria a distribuio desejada. a a ca Para realizarmos de uma forma eciente a gerao de variveis aleatrias com ca a o densidade f (x), evitando as complicaes numricas mencionadas anteriormente, co e poder amos denir uma funo qualquer g(x). Essa funo tem que ter algumas ca ca propriedades especiais para sua especicao. Deve possuir rea nita e ter para toca a dos os valores x densidade g(x) superior a f (x). Essa funo denominada de funo ca e ca de comparao. Outra caracter ca stica importante que g(x) deve ter possuir funo e ca de distribuio G(x) analiticamente computvel e invert ca a vel, ou seja, x = G1 (u). Como a funo g(x) no necessariamente uma densidade, vamos denominar a rea ca a e a sob essa curva no intervalo para x de interesse por A =
g(x)dx.

Como G1 e

conhecida, podemos gerar pontos uniformes (x,y) que pertencem ` rea sob a curva aa g(x) facilmente. Para isso basta gerarmos um valor de uma varivel aleatria unia o forme u1 entre 0 e A e aplicarmos o teorema (3.1). Assim, obtemos o primeiro valor do ponto (x0 ,y0 ) por x0 = G1 (u1 ). Para gerarmos a segunda coordenada do ponto no podemos gerar um valor de uma varivel aleatria uniforme no intervalo de 0 a a o a A, sob pena de gerarmos um ponto que no est sob a curva g(x). Assim, calcua a lamos o valor de g no ponto x0 por g(x0 ). Geramos y0 = u2 , sendo u2 o valor de uma varivel aleatria uniforme entre 0 e g(x0 ). Assim, obtemos um ponto (x0 ,y0 ) a o uniforme sob a curva g(x). A diculdade deste mtodo justamente estabelecer essa e e funo g(x) com as propriedades exigidas. ca Vamos agora traar as curvas correspondentes a g(x) e f (x) no mesmo grco. c a Se o ponto uniforme (x0 ,y0 ) est na rea sob a curva f (x), ou seja se y0 f (x0 ), a a ento aceitamos x0 como um valor vlido de f (x); se por outro lado o ponto estiver a a na regio entre as densidades f (x) e g(x), ou seja se f (x0 ) < y0 g(x0 ), ento a a rejeitamos x0 . Uma forma alternativa de apresentarmos esse critrio tomarmos y0 e e de uma distribuio U (0,1) e aceitarmos ou rejeitarmos x0 se y0 f (x0 )/g(x0 ) ou se ca y0 > f (x0 )/g(x0 ), respectivamente. Ilustramos esse mtodo na Figura (3.2), sendo e que a A representa a rea total sob a curva g(x). a Vamos ilustrar o primeiro mtodo e salientar que o segundo mtodo o que e e e ocorre na maioria dos casos de gerao de variveis aleatrias. A exponencial uma ca a o e distribuio de probabilidade em que facilmente podemos aplicar o teorema 3.1 para ca gerarmos amostras aleatrias. Assim, optamos por iniciar o processo de gerao o ca de nmeros aleatrios nesta distribuio, uma vez que facilmente podemos obter a u o ca funo de distribuio e a sua inversa. Seja X uma varivel aleatria cuja densidade ca ca a o Ferreira, D.F. Estat stica Computacional

3.2 Mtodos Gerais para Gerar Variveis Aleatrias e a o

37

u
1

( x )

g ( x
0

f ( x ) R

e j e i t a r

x
0

g ( x )

A 0
x 0

c e i t a r
x

u
2

Figura 3.2: Mtodo da rejeio para gerar um valor x0 da varivel aleatria X com e ca a o densidade f (x) que menor do que g(x) para todo x. e apresentamos por:

f (x) = ex em que > 0 o parmetro da distribuio exponencial e x > 0. e a ca A funo de distribuio exponencial dada por: ca ca e
x

(3.2.1)

F (x) =
0

et dt

F (x) = 1 ex . E a funo de distribuio inversa x = F 1 (u) dada por: ca ca e ln(1 u)

(3.2.2)

x = F 1 (u) = Estat stica Computacional

(3.2.3) Ferreira, D.F.

38 em que u um nmero uniforme (0, 1). e u

Gerao de Variveis No-Uniformes ca a a

Devido ` distribuio uniforme ser simtrica, podemos substituir 1u na equao a ca e ca (3.2.3) por u. Assim, para gerarmos uma varivel exponencial X, a partir de uma a varivel aleatria uniforme, utilizamos o teorema 3.1 por intermdio da equao: a o e ca

x=

ln(u)

(3.2.4)

O algoritmo R para gerarmos variveis aleatrias exponenciais dado por: a o e


> # programa R demonstrando a gera~o de n realiza~es de variveis ca co a > # aleatrias exponenciais com par^metro lamb, utilizamos o a > # o algoritmo \textit{runif} para > # gerarmos nmeros aleatrios uniformes u o > rexpon <- function(n, lamb) + { + + + + } > # exemplo > rexpon(5, 1) [1] 2.9492443 0.3011249 0.5290411 0.3709017 0.1144046 u <- runif(n, 0, 1) x <- -log(u) / lamb return(x) # gera vetor u (U(0,1)) # gera vetor x com distrib. exp. # retorna o vetor x

Podemos utilizar a funo pr-existente do R para realizarmos a mesma tarefa ca e denominada rexp. Simplesmente digitamos rexp(n,lamb) e teremos uma amostra aleatria de tamanho n de uma exponencial com parmetro < lamb. O R faz o a com que a estat stica computacional seja ainda menos penosa e portanto acess vel para a maioria dos pesquisadores. Um mtodo muito utilizado em matemtica, f e a sica ou estat stica para gerarmos dados de uma densidade para a qual dif obter amostras diretamente o e cil e Metropolis-Hastings. Este algoritmo um caso particular do mtodo da rejeio. e e ca Na inferncia bayesiana poss e e vel utilizar este mtodo na simulao Monte Carlo e ca em cadeias de Markov para aproximar distribuies, gerar o histograma, ou calcular co integrais para obter, por exemplo, o valor esperado. Este algoritmo recebeu este nome em referncia a Nicholas Metropolis e W.K. Hastings que apresentaram este e algoritmo para uma situao particular, no primeiro caso, e para uma situao geral, ca ca no segundo. Ferreira, D.F. Estat stica Computacional

3.2 Mtodos Gerais para Gerar Variveis Aleatrias e a o

39

Para gerarmos dados de uma densidade f (x), precisamos apenas obter o valor da densidade no ponto x. Ao aplicarmos o algoritmo, iremos gerar uma cadeia de Markov em que a realizao da varivel aleatria no estgio t + 1, (xt+1 ), depende ca a o a apenas da realizao no estgio prvio t (xt ). O algoritmo usa uma funo auxiliar, ca a e ca denominada funo candidata, q(x ; xt ), que depende do estado corrente xt , para ca gerar o novo valor x , candidato a ser o valor do prximo estgio xt+1 . Assim, se o o a valor x poder ser aceito ou rejeitado de acordo com o seguinte critrio: a e

u < min 1, f (x )q(xt ; x ) f (xt )q(x ; xt ) u min 1, f (x )q(xt ; x ) f (xt )q(x ; xt )

ento, xt+1 = x a (3.2.5) ento, xt+1 = xt a

A funo de densidade candidata q(x ; xt ) deve ser escolhida a partir de algumas ca caracter sticas espec cas, como possuir o mesmo dom nio da distribuio alvo, emca bora no haja necessidade de ser um envelope, q(x) > f (x), para todos os valores a da varivel aleatria, alm de possuir funo de distribuio e inversa da funo de a o e ca ca ca distribuio conhecidas ou algum mtodo simples de gerar observaes. Assim, a ca e co funo candidata, para ns de ilustrao, poderia ser a distribuio normal centrada ca ca ca no ponto xt e com varincia 2 , ou seja, a q(x ; xt ) N (xt , 2 ), que neste caso representa o algoritmo denominado passeio aleatrio. o Esta funo candidata nos permitiria gerar realizaes da varivel aleatria em ca co a o 2 . E natural admitirmos que este processo torno do estado atual xt com varincia a possa ser generalizado para dimenses maiores do que 1. Na sua forma original, o o algoritmo Metropolis requeria que a funo candidata fosse simtrica, ou seja, ca e q(x ; xt ) = q(xt ; x ), mas, a partir do trabalho de Hastings, esta restrio foi elimica nada. Alm do mais, permitido que a funo q(x ; xt ) no dependa de xt , o que e e ca a denominado de algoritmo de cadeias de Markov independentes para o Metropolise Hastings, que difere do exemplo anterior, onde se ilustrou o algoritmo passeio aleato rio. Este algoritmo muito eciente se a escolha da funo candidata for adequada, e ca mas pode possuir fraco desempenho se a escolha for inadequada, o que requer algum tipo de conhecimento da f (x). Recomenda-se que a taxa de aceitao esteja em ca Estat stica Computacional Ferreira, D.F.

40

Gerao de Variveis No-Uniformes ca a a

torno de 60%. Se o seu valor for muito alto, a amostra caminhar lentamente em a torno do espao e convergir lentamente para f (x); se por outro lado, a aceitao for c a ca muito baixa, a funo candidata est gerando valores em uma regio de densidade ca a a muito pequena. Na Figura 3.3 ilustramos o algoritmo Metropolis-Hastings, para um caso particular do passeio aleatrio, onde a funo de transio inicialmente est o ca ca a centrada em x1 e, no passo seguinte, est centrada em x2 . a f (x)

q(x ; x1 )

q(x ; x2 )

x1

x2

Figura 3.3: Ilustrao grca do algoritmo Metropolis-Hastings, apresentando a ca a funo de transio q(x ; xt ) e a transio de x1 para x2 por meio do ca ca ca algoritmo de passeio aleatrio. o No exemplo a seguir ilustramos a gerao de realizaes de variveis normais com ca co a mdia e varincia 2 utilizando o algoritmo Metropolis-Hastings. Denominamos e a o algoritmo de MH Norm e utilizamos a funo auxiliar rtdf para gerar realizaes ca co de variveis t da distribuio t com mdia media, parmetro de disperso sigma2 a ca e a a e graus de liberdade df. Da mesma forma utilizamos a funo dtdf para calcularca mos a densidade da distribuio t, com os parmetros recm denidos. A funo ca a e ca candidata escolhida foi a t e, importante que se enfatize que utilizamos inclusive e recursos redundantes, embora no entraremos neste mrito, uma vez que o objetivo a e ilustrarmos o uso do algoritmo Metropolis-Hastings. Devemos tambm enfatizar e e que o R capaz de gerar amostras aleatrias da normal diretamente por algoritmos e o mais eciente que este. Novamente reiteramos, que escolhemos o modelo normal pela familiaridade que possu mos com este modelo e com seus resultados e para que Ferreira, D.F. Estat stica Computacional

3.2 Mtodos Gerais para Gerar Variveis Aleatrias e a o

41

houvesse uma maior facilidade de ilustrarmos as caracter sticas do algoritmo. Neste caso iniciamos com o valor inicial igual ao parmetro e o valor candidato da sea gunda realizao geramos de uma t com mdia igual ao valor anterior (inicial no ca e segundo passo) e parmetro de disperso igual a varincia da normal 2 . Escolhea a a mos uma t com = 3 graus de liberdade como funo candidata. Em geral, como j ca a dissemos, o ponto cr tico na utilizao deste algoritmo justamente a determinao ca e ca apropriada da funo candidata. ca
> # retorna uma v.a. de uma t univariada com df graus de liberdade, e > # par^metros media e sigma2 a > rtdf <- function (n, media=0, sigma2 = 1, df = 1) + { + + + } > # retorna a densidade de uma t univariada com df graus de liberdade, e par media e sigma2 > dtdf <- function (x, media=0, sigma2 = 1, df = 1) + { + + + } > # Fun~o para exemplificar o uso do Metropolis-Hastings ca > # Este exemplo pretende mostrar a gera~o de normais (mu=0, sig=1) com ca > # uso de uma candidata t(nu=3). > # Vamos utilizar rtdf(n,media,sigma2,df) para gerar dados da t. > MH_Norm = function(n, mu=0, sig=1) + { + + + + + + + + + + + + + + nu <- 3 x0 <- mu # valor inicial da cadeia x { y0 <- rtdf(1,x0,sig**2, nu) # valor candidato com random walk qy0 <- dtdf(y0,x0,nu*sig**2/(nu-2),nu) # densidade da t no ponto y0 if (i>2) qx0 <- dtdf(x0,x[i-2],nu*sig**2/(nu-2),nu) #dens. da t no ponto x0 qx0 <- dtdf(x0,x[1], nu*sig**2/(nu-2), nu) # densidade da t no ponto x0 px0 <- dnorm(x0,mu,sig) # densidade da normal no ponto x0 py0 <- dnorm(y0,mu,sig) # densidade da normal no ponto y0 axy <- min(1,qx0*py0/(px0*qy0)) u <- runif(1) # nmero uniforme para verificar se aceita ou descarta u if (u <= axy) <- x0 for (i in 2:n) dt <- gamma((df+1)/2) / ((pi*df)**0.5 * gamma(df)*sigma2**0.5) * (1 + (x-media)**2 / (df*sigma2))**(-(df+1)/2) return( (rmvnorm(n, mean=c(0),sigma=as.matrix(sigma2,1,1))/sqrt(rchisq(n, df)/df)) + media)

Estat stica Computacional

Ferreira, D.F.

42
+ + + + + + + } > library(mvtnorm) > n <- 5000; mu <- 100;sig <- 20 > x <- MH_Norm(n, mu, sig) > par(mfrow = c(1, 2)) > hist(x) > plot(density(x)) > var(x) [,1] [1,] 462.4621 > mean(x) [1] 100.4018 } return(x) { x <- rbind(x, y0) x0 <- y0 } else x <- rbind(x, x0)

Gerao de Variveis No-Uniformes ca a a

Histogram of x

density.default(x = x)

800

600

Frequency

400

Density 40 80 x 120 160

200

0.000

0.005

0.010

0.015

50

100

150

N = 5000 Bandwidth = 3.542

Ferreira, D.F.

Estat stica Computacional

3.3 Variveis Aleatrias de Algumas Distribuies Importantes a o co

43

3.3

Variveis Aleatrias de Algumas Distribuies Ima o co portantes

Vamos descrever nesta seo alguns mtodos espec ca e cos para gerarmos algumas variveis aleatrias. Vamos enfatizar a distribuio normal. Apesar de o mesmo a o ca mtodo apresentado na seo 3.2 poder ser usado para a distribuio normal, daree ca ca mos nfase a outros processos. Para utilizarmos o mesmo mtodo anterior ter e e amos que implementar uma funo parecida com rexpon, digamos rnormal. No lugar ca do comando x = -log(u)/lamb dever amos escrever x= invnorm(u)* + , sendo que invnorm(u) a funo de distribuio normal padro inversa. A distribuio e ca ca a ca normal padro dentro da fam normal, denida pelos seus parmetros e 2 , a lia a e aquela com mdia nula e varincia unitria. Esta densidade ser referenciada por e a a a N (0,1). Essa deve ser uma funo externa escrita pelo usurio. Os argumentos e ca a da funo so a mdia e o desvio padro da distribuio normal que pretendemos ca a e a ca gerar. A funo de densidade da normal : ca e
(x)2 2 2

f (x) =

1 2 2

(3.3.1)

Nenhuma outra funo utilizando o teorema 3.1 ser novamente apresentada, ca a uma vez que podemos facilmente adaptar as funes rexpon se tivermos um ecico ente algoritmo de inverso da funo de distribuio do modelo probabil a ca ca stico alvo. A diculdade deste mtodo a necessidade de uma enorme quantidade de clculo e e a para a maioria das densidades. Isso pode tornar ineciente o algoritmo, pois o tempo de processamento elevado. e Podemos ainda aproveitar a relao entre algumas funes de distribuies para ca co co gerarmos variveis aleatrias de outras distribuies. Por exemplo se X normal a o co e com densidade (3.3.1), N (, 2 ), podemos gerar Y = eX . Sabemos que fazendo tal transformao Y ter distribuio log-normal, cuja densidade com parmetros de ca a ca a locao () e escala () : ca e
ln(y) 2

f (y) =

y 2

1 2

y > 0.

(3.3.2)

Um importante mtodo usado para gerar dados da distribuio normal o de e ca e Box-Mller, que baseado na generalizao do mtodo da transformao de prou e ca e ca Estat stica Computacional Ferreira, D.F.

44

Gerao de Variveis No-Uniformes ca a a

babilidades para mais de uma dimenso. Para apresentarmos esse mtodo, vamos a e considerar p variveis aleatrias X1 , X2 , . . . , Xp com funo de densidade conjunta a o ca f (x1 ,x2 , . . . , xp ) e p variveis Y1 , Y2 , . . . , Yp , funes de todos os Xs, ento a funo a co a ca de densidade conjunta dos Y s : e

x1 y1

f (y1 , . . . , yp )dy1 . . . dyp = f (x1 , . . . , xp )

. . .

... .. . ...

x1 yp

. . .

dx1 . . . dxp

(3.3.3)

xp y1

xp yp

em que J = |()/()| o Jacobiano da transformao dos Xs em relao aos Y s. e ca ca Vamos considerar a transformao (3.3.3) para gerar dados Y normais com denca sidade dadas por (3.3.1), devidamente adaptada para acomodar Y e no X. Para a aplicarmos a transformao de Box-Mller, vamos considerar duas variveis aleca u a atrias uniformes entre 0 e 1, representados por X1 e X2 e duas funes delas, o co representadas por Y1 e Y2 e dadas por:

y1 =

2 ln x1 cos (2x2 ) (3.3.4)

y2 =

2 ln x1 sin (2x2 )

Ao explicitarmos X1 e X2 em (3.3.4) obtemos alternativamente:

x1 = e 2 (y1 +y2 ) (3.3.5) x2 = 1 arctan 2 y2 y1

Sabendo que a seguinte derivada dk arctan(g)/dx dada por k(dg/dx)/(1 + g 2 ), e em que g uma funo de X, ento o Jacobiano da transformao : e ca a ca e
x1 y1 x2 y1 x1 y2 x2 y2

y1 e0,5(y1 +y2 ) y2 e0,5(y1 +y2 ) =


2 2y1

y2
y2 1+ 2 2 y1

1 2y1 1+
2 y2 2 y1

(3.3.6)

= Ferreira, D.F.

1 0,5(y1 +y2 ) 2 2 e 2 Estat stica Computacional

3.3 Variveis Aleatrias de Algumas Distribuies Importantes a o co

45

Assim, a funo de densidade conjunta de Y1 e Y2 dada por f (x1 ,x2 )|J|, sendo ca e portanto:

2 y1 1 f (y1 ,y2 ) = e 2 2

2 y2 1 e 2 . 2

(3.3.7)

Desde que a densidade conjunta de Y1 e Y2 o produto de duas normais indee pendentes, podemos armar que as duas variveis geradas so normais padro indea a a pendentes, como pode ser visto em Johnson e Wichern (1998)[6] e Ferreira (2008)[5]. Assim, podemos usar esse resultado para gerarmos variveis aleatrias normais. a o A diculdade, no entanto, apenas computacional. A utilizao de funes trigoe ca co nomtricas como seno e co-seno pode limitar a performance do algoritmo gerado e tornando-o lento. Um truque apresentado por Press et al. (1992)[13] bastante e interessante para evitarmos diretamente o uso de funes trigonomtricas. Esse truco e que representa uma melhoria do algoritmo de Box-Mller e devido a Marsaglia e u e Bray (1964)[8]. Ao invs de considerarmos os valores das variveis aleatrias uniformes x1 e x2 e a o de um quadrado de lado igual a 1 (quadrado unitrio), tomarmos u1 e u2 como coora denadas de um ponto aleatrio em um c o rculo unitrio (de raio igual a 1). A soma de a seus quadrados R2 = u2 +u2 um valor de uma varivel aleatria uniforme que pode a o 1 2 e ser usada como x1 . J o ngulo que o ponto (u1 , u2 ) determina em relao ao eixo a a ca u1 pode ser usado como um ngulo aleatrio dado por = 2x2 . Podemos apontar a o que a vantagem da no utilizao direta da expresso (3.3.4) refere-se ao fato do a ca a co-seno e do seno poderem ser obtidos alternativamente por: cos (2x2 ) = u1 / R2 e sin (2x2 ) = u2 / R2 . Evitamos assim as chamadas de funes trigonomtricas. co e Na Figura 3.4 ilustramos os conceitos apresentados e denominamos o ngulo que o a ponto (u1 , u2 ) determina em relao ao eixo u1 por . ca Agora podemos apresentar o funo BoxMuller para gerar dados de uma normal ca utilizando o algoritmo de Box-Mller. Essa funo utiliza a funo Polar para gerar u ca ca dois valores aleatrios, de variveis aleatrias independentes normais padro Y1 e o a o a Y2 . A funo BoxMuller : ca e
> # fun~o BoxMller retorna uma amostra de tamanho n de ca u > # uma distribui~o normal com mdia mu e vari^ncia sigma^2 ca e a > # utilizando o mtodo de Box-Mller modificado (polar) e u > BoxMuller <- function(n, mu = 0, sigma = 1)

Estat stica Computacional

Ferreira, D.F.

46

Gerao de Variveis No-Uniformes ca a a

r = 1 u
2

( u 1,u 2)

u
1

Figura 3.4: C rculo unitrio mostrando um ponto aleatrio (u1 , u2 ) com R2 = u2 +u2 a o 1 2 representando x1 e o ngulo que o ponto (u1 , u2 ) determina em relao a ca ao eixo u1 .

+ { + + + + + + + + + + + + + + + + + # Polar a fun~o que retorna dois nmeros normais e ca u # padr~o em cada chamada do procedimento a Polar <- function() #fun~o sem argumento ca { repeat { u <- runif(2,-1,1) # gera dois nmeros uniformes U(-1, 1) u R2 <- u%*%u # toma o seu quadrado if ((R2 > 0) & (R2 < 1)) break } # fim de repeat ff <- sqrt(-2 * log(R2) / R2) y <- ff * u # vetor de dim. 2 com v.a. normais padr~o indep. a return(y) } # fim de Polar if (n %% 2 == 0) # n par e { k <- n %/% 2 # divis~o de inteiros a

Ferreira, D.F.

Estat stica Computacional

3.3 Variveis Aleatrias de Algumas Distribuies Importantes a o co


+ + + + + + + + + + + + + + + + + + + + + { for (ki in 1:k) { if (ki == 1) x <- c(Polar()) else x <- c(x,Polar()) } # for x <- c(x, Polar()[1]) } #else interno } #else n par x <- x * sigma + mu return(x) { k <- n %/% 2 if (k == 0) { x <- Polar()[1] } else for (ki in 1:k) { if (ki == 1) x <- c(Polar()) else x <- c(x,Polar()) } # for } else # n mpar e

47

+ } # fim de BoxMller u > # Exemplos de utiliza~o ca > x <- BoxMuller(12) > x

[1] [5]

0.1079725 0.1678491

0.7326828 -0.2022847 0.7237620 -1.4646265 0.1084302

0.0897090 0.5310334

[9] -0.4457733

0.2388208 -2.1125400

> y <- BoxMuller(12,100,10) > y

[1] [6]

98.49614

99.98866

93.11359 101.27180

93.68498

94.25800 112.48838

98.75438 105.46853 106.56416

[11] 103.82584 107.79371

> par(mfrow = c(1,1)) > plot(density(BoxMuller(1000,100,10)))

Estat stica Computacional

Ferreira, D.F.

48

Gerao de Variveis No-Uniformes ca a a

density.default(x = BoxMuller(1000, 100, 10))

Density

0.00 60

0.01

0.02

0.03

80

100

120

140

N = 1000 Bandwidth = 2.265

Algumas aproximaes so apresentadas em Atkinson e Pearce (1976) [1] e seco a ro apenas descritas na sequncia. Uma das aproximaes faz uso da densidade a e co Tukey-lambda e aproxima a normal igualando os quatro primeiros momentos. Esse algoritmo, alm de ser uma aproximao, tem a desvantagem de utilizar a exponene ca ciao que uma operao lenta. Utilizando essa aproximao podemos obter uma ca e ca ca varivel normal X a partir de uma varivel uniforme U U (0,1) por: a a

X = [U 0,135 (1 U )0,135 ]/0,1975. Outro mtodo baseado na soma de 12 ou mais variveis uniformes (Ui U (0,1)) e e a independentes. Assim, a varivel X = a
12 i Ui 6

tem distribuio aproximadamente ca

normal com mdia 0 e varincia 1. Isso ocorre em decorrncia do teorema do limite e a e central e em razo de cada uma das 12 variveis uniformes possu a a rem mdia 1/2 e e varincia 1/12. a Estas duas aproximaes tem valor apenas didtico e no devem ser recomendaco a a das como uma forma de gerar variveis normais. Muitas vezes esse fato ignorado a e Ferreira, D.F. Estat stica Computacional

3.3 Variveis Aleatrias de Algumas Distribuies Importantes a o co

49

em problemas que requerem elevada preciso e conabilidade dos resultados obtia dos. Quando isso acontece concluses incorretas ou no m o nimo imprecisas podem ser obtidas. Vamos ilustrar a partir deste instante a gerao de variveis aleatrias discreca a o tas. Escolhemos a distribuio binomial para exemplicar. A distribuio binomial ca ca de forma surpreendente extremamente importante nas aplicaes da estat e co stica. Esta distribuio aparece nas mais variadas situaes reais e tericas. Por exemca co o plo, o teste no-paramtrico do sinal utiliza a distribuio binomial, a ocorrncia a e ca e de animais doentes em uma amostra de tamanho n pode ser muitas vezes modelada pela distribuio binomial. Inmeros outros exemplos poderiam ser citados. A ca u distribuio binomial a primeira distribuio discreta de probabilidade, entre as ca e ca distribuies j estudadas. A varivel aleatria X com distribuio de probabilidade co a a o ca binomial tem a seguinte funao de probabilidade: c

P (X = x) =

n x p (1 p)nx , x

x = 0,1, , n e n 1,

(3.3.8)

em que os parmetros n e p referem-se, respectivamente, ao tamanho da amostra a e a probabilidade de sucesso de se obter um evento favorvel em uma amostragem a de 1 unico elemento ao acaso da populao. O termo ca denido por:
n x

o coeciente binomial e

n x

n! . x!(n x)!

A probabilidade de sucesso p, em amostras de tamanho n da populao, ou ca seja, em n ensaios de Bernoulli, deve permanecer constante e os sucessivos ensaios devem ser independentes. O parmetro n em geral determinado pelo pesquisador a e e deve ser um inteiro maior ou igual a 1. Se n = 1, ento a distribuio binomial se a ca especializa na distribuio Bernoulli. Assim, a distribuio binomial a repetio ca ca e ca de n ensaios Bernoulli independentes e com probabilidade de sucesso constante. Os seguintes teoremas e lemas so importantes, para a denio de alguns mtodos que a ca e apareceram na sequncia. Estes lemas sero apresentados sem as provas. e a Teorema 3.2 (Gnese). Seja X o nmero de sucessos em uma sequncia de n e u e Estat stica Computacional Ferreira, D.F.

50

Gerao de Variveis No-Uniformes ca a a

ensaios Bernoulli com probabilidade de sucesso p, ou seja,


n

X=
i=1

I(Ui p)

em que U1 , U2 , , Un so variveis uniformes (0,1) i.i.d. e I() uma funo a a e ca indicadora. Ento, X tem distribuio binomial (n, p). a ca Lema 3.1 (Soma de binomiais). Se X1 , X2 , , Xk so variveis aleatrias binomia a o ais independentes com (n1 , p), , (nk , p), ento a com parmetros ( a
k i=1 ni , p). k i=1 Xi

tem distribuio binomial, ca

Lema 3.2 (Tempo de espera - propriedade 1). Sejam G1 , G2 , variveis aleata o rias geomtricas independentes e, X, o menor inteiro tal que e
X+1

Gi > n.
i=1

Assim, X tem distribuio binomial (n, p). ca As variveis geomtricas citadas no lema 3.2 so denidas a seguir. Se G tem a e a distribuio geomtrica com probabilidade de sucesso constante p (0,1), ento, a ca e a funo de probabilidade : ca e

P (G = g) = p(1 p)g1 ,

g = 1,2

(3.3.9)

A geomtrica a distribuio do tempo de espera at a ocorrncia do primeiro e e ca e e sucesso no g-simo evento, numa sequncia de ensaios Bernoulli independentes, ine e cluindo o primeiro sucesso. Assim, supe-se que venham a ocorrer g 1 fracassos, o cada um com probabilidade de ocorrncia constante 1 p, antes da ocorrncia de e e um sucesso no g-simo ensaio, com probabilidade p. Finalmente, o segundo lema do e tempo de espera pode ser anunciado por: Lema 3.3 (Tempo de espera - propriedade 2). Sejam E1 , E2 , variveis aleatrias a o exponenciais i.i.d., e X o menor inteiro tal que
X+1 i=1

Ei > ln(1 p). ni+1

Logo, X tem distribuio binomial (n, p). ca Ferreira, D.F. Estat stica Computacional

3.3 Variveis Aleatrias de Algumas Distribuies Importantes a o co

51

As propriedades especiais da distribuio binomial, descritas no teorema e nos ca lemas, formam a base para dois algoritmos binomiais. Estes dois algoritmos so a baseados na propriedade de que uma varivel aleatria binomial soma de n a o e a variveis Bernoulli obtidas em ensaios independentes e com probabilidade de sucesso a constante p. O algoritmo binomial mais bsico baseia-se na gerao de n variveis a ca a independentes U (0,1) e no cmputo do total das que so menores ou iguais a p. Este o a algoritmo denominado por Kachitvichyanukul e Schmeiser (1988) [7] de BU dado e por: 1. Faa x = 0 e k = 0 c 2. Gere u de uma U (0,1) e faa k = k + 1 c 3. Se u p, ento faa x = x + 1 a c 4. Se k < n v para o passo 2 a 5. Retorne x de uma binomial (n, p) O algoritmo BU tem velocidade proporcional a n e depende da velocidade do gerador de nmeros aleatrios, mas possui a vantagem de no necessitar de variveis u o a a de setup. O segundo algoritmo atribu a Devroy 1980 [3] denominado de BG e do e baseado no lema 3.2. O algoritmo BG pode ser descrito por: e 1. Faa y = 0, x = 0 e c = ln(1 p) c 2. Se c = 0, v para o passo 6 a 3. Gere u de uma U (0,1) 4. y = y + ln(u)/c + 1, em que denotam a parte inteira do argumento 5. Se y n, faa x = x + 1 e v para o passo 3 c a 6. Retorne x de uma binomial (n, p) O algoritmo utilizado no passo 4 do algoritmo BG baseado em truncar uma e varivel exponencial para gerar uma varivel geomtrica, conforme descrio feita a a e ca por Devroy (1986) [4]. O tempo de execuo desse algoritmo proporcional a np, ca e Estat stica Computacional Ferreira, D.F.

52

Gerao de Variveis No-Uniformes ca a a

o que representa uma considervel melhoria da performance. Assim, p > 0,5, podea se melhorar o tempo de execuo de BG explorando a propriedade de que se X ca e binomial com parmetro n e p, ento n X binomial com parmetros n e 1 p. a a e a Especicamente o que devemos fazer substituir p pelo min(p,1 p) e retornar x e se p
1 2

ou retornar n x, caso contrrio. A velocidade, ento, proporcional a n a a e

vezes o valor min(p,1 p). A desvantagem desse procedimento que so necessrias e a a vrias chamadas do gerador de variveis aleatrias uniformes, at que um sucesso a a o e seja obtido e o valor x seja retornado. Uma alternativa a esse problema pode ser conseguida se utilizarmos um gerador baseado na inverso da funo de distribuio a ca ca binomial. Como j hav a amos comentado em outras oportunidades o mtodo da inverso o e a e mtodo bsico para convertermos uma varivel uniforme U em uma varivel aleatria e a a a o X, invertendo a funo de distribuio. Para uma varivel aleatria cont ca ca a o nua, temos o seguinte procedimento: Gerar um nmero uniforme u u Retornar x = F 1 (u) O procedimento anlogo para o caso discreto requer a busca do valor x, tal que: a

F (x 1) =
i<x

P (X = i) < u
ix

P (X = i) = F (x).

A maneira mais simples de obtermos uma soluo no caso discreto realizarmos ca e uma busca sequencial a partir da origem. Para o caso binomial, este algoritmo da inverso, denominado de BINV, pode ser implementado se utilizarmos a frmula a o recursiva:

P (X = 0) = (1 p)n (3.3.10) P (X = x) = P (X = x 1) para x = 1,2, ,n da seguinte forma: 1. Faa pp = min(p,1 p), qq = 1 pp, r = pp/qq, g = r(n + 1) e f = qq n c Ferreira, D.F. Estat stica Computacional nx+1 p x 1p

3.3 Variveis Aleatrias de Algumas Distribuies Importantes a o co 2. Gere u de uma U (0,1) e faa x = 0 c 3. Se u r, ento v para o passo 5 a a
g 4. Faa u = u f , x = x + 1, f = f ( x r) e v para o passo 3 c a

53

1 a a 5. Se p 2 , ento retorne x de uma binomial (n, p), seno retorne n x de uma

binomial (n, p) A velocidade deste algoritmo proporcional a n vezes o valor min(p, 1 p). A e vantagem desse algoritmo que apenas uma varivel aleatria uniforme gerada e a o e para cada varivel binomial requerida. Um ponto importante o tempo consumido a e para gerar qq n substancial e dois problemas potenciais podem ser destacados. O e primeiro a possibilidade de underow no clculo de f = qq n , quando n muito e a e grande e, o segundo, a possibilidade do clculo recursivo de f ser uma fonte de e a erros de arredondamento, que se acumulam e que se tornam srios na medida que e n aumenta (Kachitvichyanukul e Schmeiser, 1988 [7]). Devroy (1986) [4] menciona que o algoritmo do tempo de espera BG baseado no lema 3.2 deve ser usado no lugar de BINV para evitarmos esses fatos. Por outro lado, Kachitvichyanukul e Schmeiser (1988) [7] mencionam que basta implementar o algoritmo em preciso dupla que a esses problemas so evitados. a
> # Exemplifica~o de algoritmos para gerar variveis aleatrias binomiais B(n, p). ca a o > # Os algoritmos BU, BG e BINV foram implementados > > BU <- function(n,p) + { + + + + + + + + + x <- 0; k <- 0 repeat { u <- runif(1,0,1) k <- k + 1 if (u <= p) x <- x + 1 if (k == n) break } # repeat return(x)

+ } # function BU > BG <- function(n,p) + { + if (p > 0.5) pp <- 1 - p else pp <- p

Estat stica Computacional

Ferreira, D.F.

54
+ + + + + + + + + + + + + + + y <- 0; x <- 0; c <- log(1 - pp) if (c < 0) { repeat { u <- runif(1, 0, 1) y <- y + trunc(log(u) / c) + 1 if (y <= n) { x <- x + 1 } else break } # repeat if (p > 0.5) x <- n - x } # if c <= 0 return(x)

Gerao de Variveis No-Uniformes ca a a

+ } # function BG > BINV <- function(n,p) + { + + + + + + + + + + + + + + + if (p > 0.5) pp <- 1 - p else pp <- p q r g u x { u <- u - f x <- x + 1 f <- f * (g / x - r) } # while if (p > 0.5) x <- n - x return(x) <- 1 - pp <- pp / q <- r * (n + 1) <- runif(1, 0, 1) <- 0; f <- qn qn <- q**n # forma alternativa de obter pot^ncias e

while (u > f)

+ } # function BINV > # Exemplo de utiliza~o da fun~o BINV ca ca > n <- 1000 > x <- BINV(10,0.5) > for (i in 2:n) x <- c(x, BINV(10, 0.5)) > par(mfrow = c(1,1)) > hist(x) > mean(x)

Ferreira, D.F.

Estat stica Computacional

3.4 Rotinas R para Gerao de Variveis Aleatrias ca a o


[1] 5.016 > var(x) [1] 2.538282

55

Histogram of x
250 Frequency 0 50 100 150 200

4 x

10

Procedimentos de gerao de nmeros aleatrios poderiam ser apresentados para ca u o muitas outras distribuies de probabilidades. Felizmente no R no temos este tipo co a de preocupao, pois estas rotinas j existem e esto implementadas em linguagem ca a a no interpretada. Inclusive para os modelos considerados temos rotinas prontas em a R. Veremos uma boa parte delas na prxima seo. o ca

3.4

Rotinas R para Gerao de Variveis Aleatrias ca a o

Nesta seo, veremos alguns dos principais comandos R para acessarmos os proca cessos de gerao de realizaoes de variveis aleatrias de diferentes modelos proca c a o babil sticos. Os modelos probabil sticos contemplados pelo R esto apresentados na a Tabela 3.1. Estat stica Computacional Ferreira, D.F.

56

Gerao de Variveis No-Uniformes ca a a

Tabela 3.1: Distribuies de probabilidades, nome R e parmetros dos principais co a modelos probabil stico. Distribuio ca beta binomial Cauchy quiquadrado exponencial F gama geomtrica e hipergeomtrica e log-normal log stica binomial negativa normal Poisson t de Student uniform Weibull Wilcoxon Nome R beta binom cauchy chisq exp f gamma geom hyper lnorm logis nbinom norm pois t unif weibull wilcox Parmetros a shape1, shape2, ncp size, prob location, scale df, ncp rate df1, df1, ncp shape, scale prob m, n, k meanlog, sdlog location, scale size, prob mean, sd lambda df, ncp min, max shape, scale m, n

Se acrescentarmos os prexos d para densidade, p para CDF (funo de disca tribuio de probabilidades), q para quantis e r para simulao (realizaes de ca ca co variveis aleatrias), ento poderemos utilizar as funes bsicas da Tabela 3.1 em a o a co a diferentes contextos. No caso particular deste cap tulo temos interesse na gerao ca de realizaes de variveis aleatrias e, portanto, no comando rmodelo. O primeiro co a o argumento x para dmodelo, q para pmodelo, p para qmodelo and n for rmodelo e (exceto para rhyper e rwilcox, nos quais o primeiro argumento nn). Estas excees e co se devem ao fato de que n usado como um argumento da funo (parmetro). e ca a Assim, nn representa o tamanho da amostra que queremos gerar. Em algum modelos probabil sticos no centrais existe a possibilidade de utilizar o parmetro de a a no-centralidade (ncp). a O uso destas funes para gerarmos nmeros aleatrios bastante simples. Se, co u o e Ferreira, D.F. Estat stica Computacional

3.4 Rotinas R para Gerao de Variveis Aleatrias ca a o

57

por exemplo, quisermos gerar dados de uma distribuio beta com parmetros = 1 ca a e = 2, podemos utilizar o programa ilustrativo apresentado na sequncia. Podee mos utilizar funes semelhantes a funo beta, de acordo com a descrio feita na co ca ca Tabela 3.1, para gerarmos n dados de qualquer outra funo de densidade ou funca o de probabilidade. Este procedimento mais eciente do que utilizarmos nossas ca e prprias funes, pois estas funes foram implementadas em geral em C ou Fortran o co co e so mais ecientes. Se para algum modelo particular desejarmos utilizar nossas a prprias funes e se iremos cham-las milhares ou milhes de vezes conveniente o co a o e que implementemos em C ou em Fortran e as associemos ao R. A forma de associarmos as rotinas escritas em C ou Fortran ao R foge do escopo deste material e por isso no explicaremos como faz-lo. a e

> # Exemplo de algoritmos para gerar dados de > # variveis aleatrias Beta(alpha; beta) a o > # usando as fun~es R diretamente. co > #Gera uma amostra de tamanho n e plota o histograma. > n <- 5000 > alpha <- 1.0 > beta <- 2.0 > x <- rbeta(n, alpha, beta) > plot(density(x)) > mean(x)

[1] 0.333853

> var(x)

[1] 0.05528908

Estat stica Computacional

Ferreira, D.F.

58

Gerao de Variveis No-Uniformes ca a a

density.default(x = x)

Density

0.0

0.5

1.0

1.5

0.0

0.2

0.4

0.6

0.8

1.0

N = 5000 Bandwidth = 0.03862

3.5

Exerc cios

3.5.1 Seja f (x) = 3x2 uma funo de densidade de uma varivel aleatria cont ca a o nua X com dom nio denido no intervalo [0; 1]. Aplicar o mtodo da inverso e e a descrever um algoritmo para gerar variveis aleatrias dessa densidade. Implea o mentar em R e gerar uma amostra de tamanho n = 1.000. Estimar os quantis 1%, 5%, 10%, 50%, 90%, 95% e 99%. Confrontar com os quantis tericos. o 3.5.2 Os dados a seguir referem-se ao tempo de vida, em dias, de n = 40 insetos. Considerando que a distribuio do tempo de vida a exponencial e que o ca e parmetro pode ser estimado pelo estimador de mxima verossimilhana a a c n = 1/X, em que X = c i=1 Xi /n, obter o intervalo de 95% de conana utilizando o seguinte procedimento: i) gerar uma amostra da exponencial de tamanho n = 40, utilizando o algoritmo rexpon, considerando o parmetro a igual a estimativa obtida; ii) determinar a estimativa da mdia = 1/ por X e Ferreira, D.F. Estat stica Computacional

3.5 Exerc cios

59

nesta amostra simulada de tamanho n = 40; iii) repetir 1.000 vezes os passos (i) e (ii) e armazenar os valores obtidos; iv) ordenar as estimativas e tomar os quantis 2,5% e 97,5%. Os valores obtidos so o intervalo de conana ala c mejado, considerando como verdadeira a densidade exponencial para modelar o tempo de vida dos insetos. Este procedimento denominado de bootstrap e paramtrico. Os dados em dias do tempo de vida dos insetos so: e a 8,521 2,604 12,578 0,864 1,781 4,187 1,689 2,029 8,514 2,564 2,516 5,626 0,595 4,977 5,359 1,913 6,361 0,445 0,576 2,307 8,780 5,068 3,601 1,503 1,530 5,912 3,031 7,829 0,475 8,105 0,761 1,128 1,383 1,041 3,151 12,037 1,385 1,934 0,301 8,628

Repetir esse processo, gerando 100.000 amostras de tamanho n = 40. Compare os resultados e verique se o custo adicional de ter aumentado o nmero de u simulaes compensou a poss maior preciso obtida. co vel a 3.5.3 Gerar uma amostra de n = 5.000 variveis normais padro utilizando as aproa a ximaes: X = [U 0,135 (1 U )0,135 ]/ 0,1975 e da soma de 12 ou mais variveis co a uniformes (Ui U (0,1)) independentes, dada por X =
12 i Ui

6. Confron-

tar os quantis 1%, 5%, 10%, 50%, 90%, 95% e 99% esperados da distribuio ca normal com os estimados dessa distribuio. Gerar tambm uma amostra de ca e mesmo tamanho utilizando o algoritmo Polar-Box-Mller. Estimar os mesmos u quantis anteriores nesta amostra e comparar com os resultados anteriores. 3.5.4 Se os dados do exerc 3.5.2 pudessem ser atribu cio dos a uma amostra aleato ria da distribuio log-normal, ento estimar os parmetros da log-normal e ca a a utilizar o mesmo procedimento descrito naquele exerc cio, substituindo apenas a distribuio exponencial pela log-normal para estimar por intervalo a mdia ca e populacional. Para estimar os parmetros da log-normal utilizar o seguinte a procedimento: a) transformar os dados originais, utilizando Xi = ln(Xi ); b) determinar a mdia e o desvio padro amostral dos dados transformados e a estas estimativas so as estimativas de e . Utilizar estas estimativas para a gerar amostras log-lognormais. Realizar os mesmos procedimentos descritos para exponencial, confrontar os resultados e discutir a respeito da diculdade de se tomar uma deciso da escolha da distribuio populacional no processo a ca Estat stica Computacional Ferreira, D.F.

60

Gerao de Variveis No-Uniformes ca a a de inferncia. Como em situaes reais nunca se sabe de qual distribuio os e co ca dados so provenientes com preciso, ento voc teria alguma ideia de como a a a e fazer para determinar qual a distribuio que melhor modela os dados do ca tempo de vida dos insetos? Justicar sua resposta adequadamente com os procedimentos numricos escolhidos. e

3.5.5 Fazer reamostragens com reposio a partir da amostra do exerc ca cio 3.5.2 e estimar o intervalo de 95% para a mdia populacional, seguindo os passos dese critos a seguir e utilizar um gerador de nmeros uniformes para determinar u quais elementos amostrais devem ser selecionados: i) reamostrar com reposio os n = 40 elementos da amostra original e compor uma nova amostra por: ca Xi ; ii) calcular a mdia desta nova amostra por X = n Xi /n; iii) armae i=1 zenar este valor e repetir os passos (i) e (ii) B 1 vezes; iv) agrupar os valores com o valor da amostra original; e v) ordenar os valores obtidos e determinar os quantis 2,5% e 97,5% desse conjunto de B valores. Escolher B = 1.000 e B = 100.000 e confrontar os resultados obtidos com os obtidos nos exerc cios anteriores para a distribuio exponencial e log-normal. Os resultados que estica verem mais prximos deste resultado devem fornecer um indicativo da escolha o da distribuio mais apropriada para modelar o tempo de vida de insetos. Este ca procedimento sugerido neste exerc o bootstrap no-paramtrico. A sua cio e a e grande vantagem no precisar fazer suposio a respeito da distribuio dos e a ca ca dados amostrais. 3.5.6 Uma importante relao para obtermos intervalos de conana para a mdia ca c e de uma distribuio exponencial, f (x) = ex , refere-se ao fato de que a ca soma de n variveis exponenciais com parmetro igual a uma gama f (y) a a e =
1 ()

(y/)1 e

com parmetros = n e = 1/. Assim, assumir a

que os dados do exerc 3.5.2 tm distribuio exponencial com parmetro cio e ca a = 1/X. Considerando estimado pelo rec proco da mdia amostral, ou seja, e que a varivel X tem distribuio gama padro com parmetro = n, ento a ca a a a = X/. Neste caso Y tem distribuio da soma de n variveis obtenha Y = X ca a exponenciais, ou seja, distribuio gama com parmetros = n e = . Como ca a queremos a distribuio da mdia, devemos obter a transformao Y = Y /n. ca e ca Gerar amostras de tamanho n = 1.000 e n = 100.000 e estimar os quantis 2,5% e 97,5% da distribuio de Y , em cada uma delas. Confrontar os intervalos ca Ferreira, D.F. Estat stica Computacional

3.5 Exerc cios

61

de conana, dessa forma obtidos, com os do exerc 3.5.2. Quais so suas c cio a concluses? Qual a vantagem de utilizar a distribuio gama? o e ca 3.5.7 Duas amostras binomiais foram realizadas em duas (1 e 2) diferentes populaes. Os resultados do nmero de sucesso foram y1 = 2 e y2 = 3 em amostras co u de tamanho n1 = 12 e n2 = 14, respectivamente, de ambas as populaes. Esco timar os parmetros p1 e p2 das duas populaes por: p1 = y1 /n1 e p2 = y2 /n2 . a co Para testarmos a hiptese H0 : p1 = p2 ou H0 : p1 p2 = 0, podemos utilizar o o seguinte algoritmo bootstrap paramtrico: a) utilizar p1 e p2 para gerarmos e amostras de tamanho n1 e n2 de ambas as populaes; b) estimar p = y1j /n1 co 1j e p = y2j /n2 na j-sima repetio desse processo; c) calcular dj = p p ; e ca 2j 1j 2j d) repetir os passos de (a) a (c) B 1 vezes; e) unir com o valor da amostra original; f) ordenar os valores e obter os quantis 2,5% e 97,5% da distribuio ca bootstrap de dj ; e g) se o valor hipottico 0 estiver contido nesse intervalo, e no rejeitar H0 , caso contrrio, rejeitar a hiptese de igualdade das propores a a o co binomiais das duas populaes. co

Estat stica Computacional

Ferreira, D.F.

62

Gerao de Variveis No-Uniformes ca a a

Ferreira, D.F.

Estat stica Computacional

Cap tulo 4

Gerao de Amostras Aleatrias ca o de Variveis Multidimensionais a


Os modelos multivariados ganharam grande aceitao no meio cient ca co em funo das facilidades computacionais e do desenvolvimento de programas especializaca dos nesta rea. Os fenmenos naturais so em geral multivariados. Um tratamento a o a aplicado em um ser, a um solo ou a um sistema no afeta isoladamente apenas uma a varivel, e sim todas as variveis. Ademais, as variveis possuem relaes entre si e a a a co qualquer mudana em uma ou algumas delas, afeta as outras. Assim, a gerao de c ca realizaes de vetores ou matrizes aleatrias um assunto que no pode ser ignorado. co o e a Vamos neste cap tulo disponibilizar ao leitor mecanismos para gerar realizaes de co variveis aleatrias multidimensionais. a o

4.1

Introduo ca

Os processos para gerarmos variveis aleatrias multidimensionais so muitas a o a vezes considerados dif ceis pela maioria dos pesquisadores. Uma boa parte deles, no entanto, podem ser realizados no R com apenas uma linha de comando. Embora tenhamos estas facilidades, nestas notas vamos apresentar detalhes de alguns processos para gerarmos dados dos principais modelos probabil sticos multivariados como, por exemplo, a normal multivariada, a Wishart e a Wishart invertida, a t de Student e algumas outras distribuies. co Uma das principais caracter sticas das variveis multidimensionais a correlao a e ca Estat stica Computacional Ferreira, D.F.

64

Gerao de Amostras Aleatrias de Variveis Multidimensionais ca o a

entre seus componentes. A importncia destes modelos praticamente indescrit a e vel, mas podemos destacar a inferncia paramtrica, a inferncia Bayesiana, a estimao e e e ca de regies de conana, entre outras. Vamos abordar nas prximos sees formas o c o co de gerarmos realizaes de variveis aleatrias multidimensionais para determinados co a o modelos utilizando o ambiente R para implementarmos as rotinas ou para utilizarmos as rotinas pr-existentes. Nossa aparente perda de tempo, descrevendo funes e co menos ecientes do que as pr-existentes no R, tem como razo fundamental pere a mitir ao leitor ir alm de simplesmente utilizar rotinas previamente programadas e por terceiros. Se o leitor ganhar, ao nal da leitura deste material, a capacidade de produzir suas prprias rotinas e entender como as rotinas pr-existentes funcionam, o e nosso objetivo ter sido alcanado. a c

4.2

Distribuio Normal Multivariada ca

A funo de densidade normal multivariada de um vetor aleatrio X dada por: ca o e

1 p 1 fX (x) =(2) 2 || 2 exp (x ) 1 (x ) 2

(4.2.1)

em que e so, respectivamente, o vetor de mdia e a matriz de covarincias, a e a simtrica e positiva denida, e p a dimenso do vetor aleatrio X. e e a o Um importante resultado diz respeito a combinaes lineares de variveis normais co a multivariadas e ser apresentado no seguinte teorema. a Teorema 4.1 (Combinaes lineares). Seja o vetor aleatrio normal multivariado co o X = [X1 , X2 , , Xp ] com mdia e covarincia e seja C uma matriz (p p) e a de posto p, ento a combinao linear Y = CX (p 1) tem distribuiao normal a ca c multivariada com mdia Y = C e covarincia Y = CC . e a

Prova: se C possui posto p, ento existe C 1 e portanto a

X = C 1 Y . O Jacobiano da transformao J = |C|1 e a distribuio de Y dada por ca e ca e fY (y) = fX (x)|J|. Se X tem distribuio normal multivariada, ento ca a Ferreira, D.F. Estat stica Computacional

4.2 Distribuio Normal Multivariada ca

65

1 1 fY (y) =(2)p/2 || 2 exp (C 1 y ) 1 (C 1 y ) |C|1 2

=(2)p/2 |C|1/2 || 2 |C|1/2 1 exp (y C) 2


1 2 1

1 C 1 (y C)

=(2)p/2 CC

1 exp (y C) 2

CC

(y C)

que a densidade normal multivariada do vetor aleatrio Y com mdia Y = C e o e e covarincia Y = CC . Portanto combinaes lineares de variveis normais a co a multivariadas so normais multivariadas. a C.Q.D. O teorema 4.1 nos fornece o principal resultado para gerarmos dados de uma normal multivariada. Assim, como nosso objetivo gerar dados de uma amostra normal e multivariada com vetor de mdias e matriz de covarincias pr-estabelecidos, e a e devemos seguir os seguintes procedimentos. Inicialmente devemos obter a matriz raiz quadrada de , representada por 1/2 . Para isso, vamos considerar a decomposio espectral da matriz de covarincias dada por = P P . Logo, podemos ca a denir a matriz raiz quadrada de por 1/2 = P 1/2 P , em que a matriz e diagonal dos autovalores, 1/2 a matriz diagonal contendo a raiz quadrada destes e elementos e P a matriz de autovetores, cada um destes vetor disposto em uma de e suas colunas. Desta decomposio facilmente podemos observar que = 1/2 1/2 . ca Assim, podemos utilizar o seguinte mtodo para gerarmos uma realizao pe ca variada de uma normal multivariada. Inicialmente devemos gerar um vetor aleatrio o Z = [Z1 , Z2 , , Zp ] de p variveis normais padro independentes utilizando, por a a exemplo, o algoritmo de Box-Mller. Isto que dizer que Z = 0 e que Cov(Z) = I. u Este vetor deve sofrer a seguinte transformao linear: ca

Y =1/2 Z + .

(4.2.2)

De acordo com o teorema 4.1, o vetor Y possui distribuio normal multivariada ca com mdia Y = 1/2 Z + = e matriz de covarincias 1/2 I1/2 = . Este e a Estat stica Computacional Ferreira, D.F.

66

Gerao de Amostras Aleatrias de Variveis Multidimensionais ca o a

ser o mtodo que usaremos para obter a amostra p-dimensional de tamanho n de a e uma normal multivariada com mdia e covarincia . Para obtermos a matriz e a raiz quadrada no R, podemos utilizar o comando para a obteno da decomposio ca ca espectral svd ou alternativamente o comando chol, que retorna o fator de Cholesky de uma matriz positiva denida, que na verdade um tipo de raiz quadrada. Gerae remos um vetor de variveis aleatrias normal padro independentes Z utilizando a o a o comando rnorm. A decomposio do valor singular neste caso se especializa na ca decomposio espectral, pois a matriz simtrica. ca e e Vamos ilustrar e apresentar o programa de gerao de variveis normais multivaca a riada para um caso particular bivariado (p = 2) e com vetor de mdias = [10, 50] e e matriz de covarincias dada por: a = O programa resultante dado por: e
> # Exemplifica~o e algoritmo para gerar $n$ vetores aleatrios normais ca o > # multivariados com vetor de mdias mu e covari^ncia Sigma. e a > > rnormmv <- function(n,mu,Sigma) + { + + + + + + + + + + + + + + + p sig.svd <- nrow(Sigma) <- svd(Sigma)

4 1 1 1

Sigmaroot <- sig.svd$u%*%diag(sqrt(sig.svd$d))%*%t(sig.svd$v) z <- rnorm(p,0,1) x <- t(Sigmaroot%*%z+mu) if (n > 1) { for (ii in 2:n) { z <- rnorm(p,0,1) y <- Sigmaroot%*%z+mu x <- rbind(x,t(y)) } # for ii in 2:n } # if $n > 1$ return(x) # matriz n x p dos dados

+ } # rnormmv > # exemplo de utiliza~o ca >

Ferreira, D.F.

Estat stica Computacional

4.2 Distribuio Normal Multivariada ca


> Sigma <- matrix(c(4, 1, 1, 1), 2, 2) > mu <- c(10,50) > n <- 2500 > x <- rnormmv(n,mu,Sigma) > xb <- apply(x, 2, mean) # aplica uma fun~o (mean) `s colunas de X - op. 2 ca a > xb [1] 10.01171 50.02623 > var(x) [,1] [,2]

67

[1,] 4.0422984 0.9813755 [2,] 0.9813755 0.9932804 > par(mfrow = c(1,1)) > plot(x)

q q q q q q q q q q qqq q q q q q qq q q qq q q q q q q q q q qq q q q q q q q q q qq q q q q q q q q q qq q qq q q q q qq q q q q qq q q q q qq q qq qq q q q q qq q qq q q qq q qq qq q q q q q q q q q q q q qqq q q q q q q q q q q q q q q qq qqq qqq q q qqq q q q q q qqq q q q qqqqq qqqqqq q q q q q qq q q q q q q q q q q qq q q q q q q q q q q qq qq q qqq q qq qq qqq q q q qqq q qq q qq q qq q q qq qqq q q q q q q q qq q q q q q q qq q qq qqq q q q q q q qqq qq q qq qqqq qqqqqqqqq qqqq q q q q q q qqq qqqqq qq q qqqq qq q qq q qq q qq q qq q q qqq qq q qq q qq q q qq q q q q qq q q q q q qq q qqqqqqqq q qq q q qqqqq q q q q q qq q q q q q qq qqq q q qq q qq qqqqq q q q qqqqqqqq qqqq q qq qq qq q q qq qqqqq qq qqqq q qqqqq q q qq q q q q q q qq q qq q q qq q q q q qq q q qq qq qq qqqqq qqqqq qq q q qq q q q qq q qqq q q qqqq qqq qqqqq qq qq q q q qq q q q q q qq qq q qqqq qq qqqq q q q qq q q qq q qqq qq qq qq qqqq qq qqqq qqq q qqq q q q q q q q q qqqq qqqqq qqqqqqqqqq qqqqqq q qq q q q q q qq qq q qqq qq qq q q q q q q q q qqq q qq qqq q qq q q q qq qqqqq qqqqqqq qqqq qqq q q qq q q q q q q qq q q qq q q q q q q qq q qq qqqqqq qq qqqq qq q q qq q q q q q q q qq qq q q q qqqq q qq qq q q q q qq q qqqqq qqqqq qqqqqqqqqqq q q q qqq qq qqqq qqqq qq q qq q q q q q qqqqqq qq qqq qqq q q q qqq q q q q q q q q q qqqqqq q qq qq q q q qq qqq q q q q qqqqqqq q q q q q q q q q q q q q q qq qq q q q q qqqq q q q q qq qq q q qq q qq qqqqqqqq q q q qqqqqqq qqq q qqqqq q q q q q q q qq q q qqqqqqqq qqqqqqqqqqqq q qqqqq qq qq qq q q q q q qq q q q q qq q qq qq qqqqqqqqq q qqq qqq qqqqq qqqq qqq qqq qq q q q q qq q qq qqqqqqq qqq q q qq qqqqq q q q q q qq q qq qqqqqqqqqqqq qq q q q q q q qq qq qq qqqqq qqqqqqqqqqqqq q q q q q q q q q qq qqqqq qqqqqqqqqq q q qq q q qq qqq q qq q q q q q q qq qq qqq qq q q q q qq qqqqqqqq qqqq qqqqqqq q q q qq qqqqqqqqqqqqq qq qqq q qq q q q q q q qq q qq qq qqqqqqqqqqqqqqq qqqq qqq q q q q q q q qqqq qq q q q q qq qq qqqqq qqqqqqq qqq q q q q q q q q q qq qq qqq qqqqqqq qqqqqqq q q q q q qqqqq qqqqq qqqq qq q q q q q q q q qqqqqqq qq q q q q q qqqqqqq qqqqqqqq q q q q q qq q qqq qqqqqqq q qq qq q q q q q q q qq q qqqqq qq qqqqqqqqq qqqqqqqqqq q q q q q q qqq q q q qq q q q q q qqqqq qq q q q qqqqq q q qq qqq q q q q q q qq qq q qqqqqqq qqq qqqq qqq qq qq q qqq q q q qq q q q q qq q q q qq q q q q q qqqqq qqqqqqqq q q qq q q qq qq q q q q qq q q q qq q qqq q q q q q q qq q qq qqqq qqqqqqqqqqqq q qq q qq q qq q qqqqqqqqqqqq q q q q q q q q q q q qq qqqqq q qqqqq q qq q q q q q q q q q qq qqqqqq qqqq q q q q qq qq q q q q q qq q qqqq q qq qqq q q q qqq q q q q q q qqq qqqqqqqq q q q q q qq q qq qq qqq q qqqqqqq qqq qq q q qq q q q q q qq qq qq qq q q qq q qq q q q q qq q q q qqq q qq q q q q q q qqq qqqq q qq qqq q q q qq q q q q qq q q qq qq q q q q qq q q q q q q q qq q qq qq q qq q qq q q qq qqqqq q q qqqq q q qq q qq q qq q q q q q q qq q q q q q qqq q q qqq qq qqqqq q qq q qq qq qq q q q qq qq q qqq q q q q qq q q q q q q q q q q q q qq q q qq q q q qq q q q q q qqqq qq q q q q q q q q q q qq q q q q q q qq q q q q q q q q q q qq q q q q qq q q q q q

qq

q q

52

x[,2]

46

48

50

10 x[,1]

12

14

16

Uma alternativa realizarmos uma implementao que no exige loops. Realizae ca a mos isso e vericamos um grande ganho em ecincia da funo obtida. O resultado e ca apresentado a seguir. e Estat stica Computacional Ferreira, D.F.

68

Gerao de Amostras Aleatrias de Variveis Multidimensionais ca o a

> # Exemplifica~o e algoritmo para gerar $n$ vetores aleatrios normais ca o > # multivariados com vetor de mdias mu e covari^ncia Sigma. e a > # vers~o otimizada, que n~o usa loops a a > > rnormmultv <- function(n,mu,Sigma) + { + + + + + + p sig.svd <- nrow(Sigma) <- svd(Sigma)

Sigmaroot <- sig.svd$u%*%diag(sqrt(sig.svd$d))%*%t(sig.svd$v) x <- (matrix(rnorm(n * p), n, p) %*% Sigmaroot) + matrix(rep(mu, each = n), n, p) return(x) # matriz n x p dos dados

+ } # rnormmv > # exemplo de utiliza~o ca > > Sigma <- matrix(c(4, 1.9, 1.9, 1), 2, 2) > mu <- c(10, 50) > n <- 2500 > x <- rnormmultv(n, mu, Sigma) > xb <- apply(x, 2, mean) # aplica uma fun~o (mean) `s colunas de X - op. 2 ca a > xb [1] 10.02750 50.01015 > var(x) [,1] [,2]

[1,] 3.973899 1.8950390 [2,] 1.895039 0.9954307 > plot(x) > n <- 15000 > time1 <- proc.time() > x <- rnormmv(n, mu, Sigma) > time2 <- proc.time() > tg1 <- (time2 - time1) / n > n <- 50000 > time1 <- proc.time() > x <- rnormmultv(n, mu, Sigma) > time2 <- proc.time() > tg2 <- (time2 - time1) / n > tg1 / tg2 # raz~o dos tempos mdios gastos a e user 566.6667 system elapsed

NaN 283.3333

Ferreira, D.F.

Estat stica Computacional

4.2 Distribuio Normal Multivariada ca


> tg1 user system elapsed

69

0.0001133333 0.0000000000 0.0001133333 > tg2 user 2e-07 system elapsed 0e+00 4e-07

q q q q q q q q qq qq q q q q q q q q q qqq q q q q q q qqq q qq q qqqq qq q q qq qq qqq q q qq q q q qq qq q q q qq qqq q q qqqqqq q q q q qq q qqq qq q qq qqq q qq qqqqq q qq qqq q q q qqqqqqq q q qqq qqq qq qqq q q q qq qqqqqq q q qqqqqq q q q qqqq qq q qqq qq q q qq qq q qq q qqqqq qq qqqqqqqqq q qq qq q q q qqq qq q q qqqq q q q qqq q q qqq q qqqqqqqqq q q qq qqqqq qq q q q q q qqqqqqqqq qq q qq qqq q q q q qq q qqqqqqqq qq q qqqqqqqqq q q q qqqqqqqqqq q q qq q qqq qqqq qq q qq q q q qqqqqqqqq qqq qq qqq q q qqqqqqqqqq qq qqqq q qqqqqqq q q qq q qqqqqqqq qq qqq q q q q qqqqq q q qqqqqqq qqq q qq q q qqqqq q q qqq qq qqqqqqqqq q qqqqqqqq qqqqqqqqq q q q qqqq q qqqq qq q qq q qqqqqqqqqqqq q qqqqqqqq qq q qqqqqqq q qq q q q qqq q qq qqqqqqq q qqqqqqqqqq q q qq qqqqqqqqqqqqq q qqqqqq qqq q q q qqqq q qq qqqqqqq q q q qqq q qqqq qq q qqq q q qqqqqqqqqqqq q qq q qqqqqqqqqqqqq q qqqqqq q qqq qqqqqqqq q qqqqqqqq qqq qq q q q qqqqqqq qq qqqqqqqqqqqqq q q q qq qqq q q q qqqqq q qqq q q q qqqqqqqqqqq qq qqq qq q qq qqqqqqq q q qqqqq q q q qqqq q q qqqqqqqqqqqq qqqqqqq q q qqqqqqqqq q q qqqqqqqqqq q qq qqq q qqqq qq qqq qq q q q qqqqqq q q qqqqqqqqqq q q q qqqqqq qqq qqq q qqqqqqqqq q q qqq q qq qqqqqqqq q q q q qq qqqqq qq q q q qq qqq q qqqqq qqqqqq q qq qq qqqq qq q qqqqqqqqqq q qq q q qqqqqqq qq q q qqq qq q qqqqq q qqqqqqqqqqq q qqqqqqqqqq q q qqqqqqqqqqq q q q qq q q qqq q q q qqqqqqqq qqqq qqqqqqqqqq q qqqqqqqqqqqqqq q qq qqqqqqqq q qq qqqqqq q qq qqqqqq qqq q qqq qq q q qq q qqqqqqq q q q qqqq q q q qq q q q qqqqqqqq q qq qq q q q qq qqqqqqqqqqq qq q qq q qqqq q qqqqqqqqq q q q q qqq q qq qqq qq qqqqqq q q q qqqqq q qq q q qqqqqqq q q qq qqqqqq q q q qqqqqqqqqqqq q qq q qqqqqqqqqq qq qqqqqqq q q qq qq q q q q qqqqqqq q q qq q q q q qq q qq q q q qq q q qq q q qqqqqqqqq q qqqq q qq q q qqqqqqqqqqq q qqq q qq qq qq q qq q qq qq qqq q qq qqq q q qqqqqqqq q qq qq q qqqq qqqq q q qqq qq q q q qq q qqqqq q qq qqqq q qq qqq q q q qqqqq q qq q qqq qqqq q qq q q q q q qq qq q q qqq q q q q q qqqq qq q qq q qqq qq q q q q q qq q q q q q q qqqq q q q q qqq q qq q qq qqq q q qqq q q qq qqq qqq qq qqq qq q q q q q q qq q q q q qq q q q q q q q q q q q

x[,2]

46

47

48

49

50

51

52

53

qq

10 x[,1]

12

14

16

Podemos em vez de utilizar as funes implementadas anteriormente, gerar dados co da normal multivariada a partir da funo mvrnorm(n, mu, Sigma) do pacote MASS ca ou a partir da funo rmvnorm(n, mean, sigma) do pacote mvtnorm. O pacote ca MASS refere-se as funes disponibilizadas em Modern Applied Statistics with S e co conhecido tambm por pacote VR. E extremamente simples gerarmos dados de e e normais multivariadas utilizando tais funes, pois no necessitamos programar os co a geradores aleatrios. Vamos demonstrar o uso destas duas funes no programa o co ilustrativo apresentado na sequncia. Devemos reiterar que pacotes so carregados e a para a memria com o comando library(pacote). O programa resultante : o e Estat stica Computacional Ferreira, D.F.

70

Gerao de Amostras Aleatrias de Variveis Multidimensionais ca o a

> # Exemplo para gerarmos n vetores aleatrios normais multivariados o > # com vetor de mdias mu e covari^ncia Sigma, a partir das fun~es e a co > # dos pacotes MASS e mvtnorm. > # pacote MASS > > Sigma <- matrix(c(4, 1.9, 1.9, 1), 2, 2) > mu <- c(10, 50) > n <- 30 > library(MASS) > x <- mvrnorm(n, mu, Sigma) > library(mvtnorm) > y <- rmvnorm(n, mu, Sigma) > xb <- apply(x, 2, mean)# aplica uma fun~o (mean) `s colunas de X - op. 2 ca a > xb # mdia x e [1] 9.917398 50.076444

> var(x) # covari^ncia x a [,1] [,2]

[1,] 4.839741 2.212095 [2,] 2.212095 1.103102

4.3

Distribuio Wishart e Wishart Invertida ca

As distribuies Wishart e Wishart invertida so relativas `s matrizes de somas co a a de quadrados e produtos no-corrigidas W obtidas de amostras de tamanho da a distribuio normal multivariada com mdia 0. Seja Xj = [X1 , X2 , , Xp ] ca e normal com mdia 0 e covarincia , ento a matriz aleatria e a a o

j-simo vetor (j = 1, 2, , ) de uma amostra aleatria de tamanho de uma e o

W =
j=1

Xj Xj

possui distribuio Wishart com graus de liberdade e parmetro (matriz positiva ca a denida). Da mesma forma, se temos uma amostra aleatria de tamanho n de uma distrio buio normal multivariada com mdia e covarincia , a distribuio da matriz ca e a ca aleatria o
n

W =
j=1

(Xj X)(Xj X)

Ferreira, D.F.

Estat stica Computacional

4.3 Distribuio Wishart e Wishart Invertida ca Wishart com = n 1 graus de liberdade e parmetro . e a

71

A funo de densidade Wishart de uma matriz aleatria W de somas de quaca o drados e produtos e representada por Wp (,) denida por: e

fW (w|,) =

||/2 |w|(p1)/2
p

2p/2 p(p1)/4
i=1 x1 x e dt 0 t

i+1 2

1 exp tr 1 w 2

(4.3.1)

em que (x) =

funo gama. e ca

Assim, para gerarmos variveis Wishart com parmetros inteiro e positiva a a denida, podemos utilizar um gerador de amostras aleatrias normais multivariadas o e obter a matriz de somas de quadrados e produtos amostrais. Esta matriz ser uma a realizao de uma varivel aleatria Wishart, que uma matriz de dimenso p p. ca a o e a A seguinte funo pode ser utilizada para obtermos realizaes aleatrias de uma ca co o Wishart:
> # Exemplifica~o para gerarmos matrizes de somas de quadrados e produtos ca > # aleatrias W com distribui~o Wishart(nu, Sigma) o ca > # utiliza o pacote mvtnorm para gerar amostras normais. > > rWishart <- function(nu, Sigma) + { + + + + + + } > # exemplo de utiliza~o ca > > library(mvtnorm) # Carregar o pacote mvtnorm antes de chamar a fun~o ca > Sigma <- matrix(c(4, 1, 1, 1), 2, 2) > nu > w > w [,1] [2,] -0.8996416 [,2] 8.4891862 <- 5 <- rWishart(nu, Sigma) p y w <- nrow(Sigma) <- rmvnorm(nu + 1, mu, Sigma) <- nu * var(y) # var(y) retorna a mat. de cov., logo (n-1)var(y) = W mu <- matrix(0, p)

return(w)

[1,] 10.7270707 -0.8996416

Estat stica Computacional

Ferreira, D.F.

72

Gerao de Amostras Aleatrias de Variveis Multidimensionais ca o a Outra distribuio relacionada que aparece frequentemente na inferncia mulca e

tivariada a Wishart invertida. Seja W uma matriz aleatria Wp (, ), ento a e o a distribuio de S = W 1 , dada pela funo de densidade ca ca |1 |/2 |s|(+p+1)/2
p

fS (s|,) =

2p/2 p(p1)/4
i=1

i+1 2

1 exp tr 1 s1 2

(4.3.2)

1 a Wishart invertida que vamos representar por Wp (, ). e

Se quisermos gerar uma matriz aleatria de uma distribuio Wishart invero ca tida em vez de uma Wishart precisamos simplesmente realizar a transformao ca S = W 1 . Assim, vamos alterar o programa anterior para gerar simultaneamente realizaes aleatrias de distribuio Wishart e Wishart invertida. E importante co o ca salientar que em nossa notao os parmetros da Wishart invertida so aqueles da ca a a Wishart. Isto relevante, pois alguns autores apresentam os parmetros da Wishart e a invertida e no da Wishart e devemos estar atentos para este fato, seno estaremos a a gerando variveis aleatrias de densidades diferentes. a o
> # Exemplifica~o para gerarmos matrizes de somas de quadrados e produtos ca > # aleatrias W com distribui~o Wishart(nu, Sigma) e Wishart invertida o ca > # WI(nu, Sigma). Utiliza o pacote mvtnorm para gerar amostras normais. > > rWishart <- function(nu, Sigma) + { + + + + + + + } > # exemplo de utiliza~o ca > > library(mvtnorm) # Carregar o pacote mvtnorm antes de chamar a fun~o ca > Sigma <- matrix(c(4, 1, 1, 1), 2, 2) > nu > x > x$w <- 5 <- rWishart(nu, Sigma) # Wishart [,1] [,2] p y w <- nrow(Sigma) <- rmvnorm(nu + 1, mu, Sigma) <- nu * var(y) # var(y): matriz de covari^ncia, logo (n-1)var(y) = W a mu <- matrix(0, p)

wi <- solve(w) return(list(w = w, wi = wi))

Ferreira, D.F.

Estat stica Computacional

4.3 Distribuio Wishart e Wishart Invertida ca


[1,] 5.114953 1.100179 [2,] 1.100179 3.395917 > x$wi # Wishart invertida [,1] [1,] [2,] -0.06808226 [,2] 0.31652800

73

0.21014908 -0.06808226

Um aspecto importante que precisamos mencionar sobre a necessidade de gee rarmos variveis Wishart ou Wishart invertida com graus de liberdade reais. Para a isso podemos utilizar o algoritmo descrito por Smith e Hocking (1972)[16]. Seja a decomposio da matriz dada por = 1/2 1/2 que utilizaremos para realizarca mos uma transformao na matriz aleatria gerada, que de acordo com propriedades ca o de matrizes Wishart, ser Wishart. Devemos inicialmente construir uma matriz tria angular inferior T = [tij ] (i,j = 1, 2, , p), com tii 2 +1i e tij N (0,1) se i > j e tij = 0 se i < j. Na sequncia devemos obter a matriz = T T , que possui e distribuio Wp (, I). Desta forma obteremos W = 1/2 1/2 com a distribuio ca ca desejada, ou seja, com distribuio Wp (,). Fica claro que com esse algoritmo ca podemos gerar variveis Wishart com graus de liberdade reais ou inteiros. a
> # Fun~o mais eficiente para gerarmos matrizes de somas de quadrados ca > # e produtos aleatrias W com distribui~o Wishart(nu, Sigma) e o ca > # Wishart invertida WI(nu, Sigma) > > rWWI <- function (nu, Sigma) + { + + + + + + + + + + + S w p <- nrow(Sigma) df <- (nu + nu - p + 1) - (nu - p + 1):nu if (p > 1) { T <- diag(sqrt(rgamma(c(rep(1, p)), df/2, 1/2))) T[lower.tri(T)] <- rnorm((p * (p - 1)/2)) } else T <- sqrt(rgamma(1, df/2, 1/2)) <- chol(Sigma) # fator de Cholesky <- t(S) %*% T %*% t(T) %*% S

wi <- solve(w) return(list(w = w, wi = wi))

+ } # fun~o rWWI ca > # Exemplo de uso >

Estat stica Computacional

Ferreira, D.F.

74
> nu

Gerao de Amostras Aleatrias de Variveis Multidimensionais ca o a


<- 5

> Sigma <- matrix(c(4, 1, 1, 1), 2, 2) > rWWI(nu, Sigma) $w [,1] [2,] $wi [,1] [1,] [2,] -0.3332525 [,2] 1.0220127 0.1795621 -0.3332525 [,2] [1,] 14.10499 4.599280 4.59928 2.478170

Vamos chamar a ateno para alguns fatos sobre esta funo, pois utilizamos ca ca alguns comandos e artif cios no mencionados at o presente momento. Inicialmente a e utilizamos o comando T <- diag(sqrt(rgamma(c(rep(1, p)), df/2, 1/2))) para preencher a diagonal da matriz T com variveis aleatrias quiquadrado. Os artif a o cios usados foram: a) usamos o comando c(rep(1, p)) para criar um vetor de 1s de dimenso p 1; b) usamos o comando rgamma(c(rep(1, p)), df/2, 1/2) para produzir a um vetor de variveis aleatrias gama com parmetros < df /2 e < 2; c) o a o a comando sqrt aplicado no vetor formado e o comando diag para criar uma matriz e com os elementos deste vetor. Resta nos justicar que o gerador de nmeros aleu atrios da gama foi utilizado como um artif o cio para gerarmos variveis aleatrias a o quiquadrado aproveitando a relao da gama com a quiquadrado. Um distribuio ca ca gama com parmetros e e uma quiquadrado com parmetro tm a seguinte a a e relao: 2 () = Gama( = /2, = 2). O segundo detalhe, de extrema importnca a cia, refere-se ao fato de que no R, o parmetro o rec a e proco do terceiro argumento da funo rgamma(). Por isso entramos com 1/2 e no com 2 para este argumento. ca a A escolha do gerador de variveis aleatrias gama foi feita apenas para ilustrar a a o relao da distribuio quiquadrado com a gama. ca ca Outro aspecto interessante que merece ser mencionado o uso do fator de Choe lesky no lugar de obter a matriz raiz quadrada de . O fator de Cholesky utiliza a decomposio = SS , em que S uma matriz triangular inferior. O R por ca e meio da funo chol(Sigma), retorna a matriz S . Finalmente, se o nmero de vaca u riveis igual a 1, a distribuio Wishart se especializa na quiquadrado e a Wishart a e ca invertida na quiquadrado invertida. Assim, quando p = 1 o algoritmo retornar vaa Ferreira, D.F. Estat stica Computacional

4.4 Distribuio t de Student Multivariada ca

75

riveis 2 X e 1/( 2 X) com distribuies proporcionais a distribuio quiquadrado a co ca e quiquadrado invertida, respectivamente. As mais importantes funes pr-existentes do R so a funo rwishart do pacote co e a ca bayesm que se assemelha muito com a implementao que realizamos rWWI e a ca funo rwish do pacote MCMCpack que possui tambm implementao parecida. ca e ca Em ambos os casos utilizado o gerador de variveis aleatrias quiquadrado. e a o

4.4

Distribuio t de Student Multivariada ca

A fam de distribuies el lia co pticas muito importante na multivariada e nas e aplicaes Bayesianas. A distribuio t de Student multivariada um caso particuco ca e lar desta fam lia. Esta distribuio tem particular interesse nos procedimentos de ca comparao mltipla dos tratamentos com alguma testemunha avaliada no experica u mento. A funo de densidade do vetor aleatrio X = [X1 , X2 , , Xp ] ca o com parmetros dados pelo vetor de mdias = [1 , 2 , , p ] a e simtrica e positiva denida (p p) e e fX (x) = g((x ) 1 (x )) ||1/2
+p 2

Rp

Rp e matriz

+p 1 2 = 1 + (x ) 1 (x ) p/2 (/2)||1/2 () em que a funo g dada por g(z) = ca e

(4.4.1)

+p z (+p)/2 2 1+ . A varivel a p/2 (/2) () aleatria X tem mdia e matriz de covarincias /( 2) no caso de > 2. o e a Se efetuarmos a transformao Y = 1/2 (X ) obteremos a distribuio t ca ca multivariada esfrica simtrica, cuja densidade dada por: e e e

+p 1 2 1+ y y fY (y) = p/2 (/2) ()

+p 2

(4.4.2)

A varivel aleatria Y ter vetor de mdias nulo e covarincias I/( 2) e a a o a e a densidade ter contornos esfricos de mesma probabilidade. a e Vamos apresentar a forma geral para gerarmos variveis aleatrias p-dimensionais a o t multivariada com graus de liberdade e parmetros e . Seja um vetor aleatrio a o Z com distribuio Np (0, I) e a varivel aleatria U com distribuio quiquadrado ca a o ca Estat stica Computacional Ferreira, D.F.

76

Gerao de Amostras Aleatrias de Variveis Multidimensionais ca o a

com graus de liberdade, ento o vetor aleatrio Y , dado pela transformao a o ca Y = Z , U (4.4.3)

possui distribuio t multivariada esfrica com graus de liberdade. O vetor X ca e obtido pela transformao linear ca X = 1/2 Y + , (4.4.4)

possui distribuio t multivariada el ca ptica com graus de liberdade e parmetros a e . Assim, devemos aplicar a transformao (4.4.4) n vezes a n diferentes vetores ca aleatrios Y e variveis U . Ao nal deste processo teremos uma amostra de tamanho o a n da distribuio t multivariada almejada com graus de liberdade. Assim, para ca gerarmos dados de uma t multivariada com dimenso p, graus de liberdade (no a a necessariamente inteiro), vetor de mdia nulo e matriz positiva denida podemos e utilizar a seguinte funo, substituindo na expresso (4.4.4) a matriz raiz quadrada ca a pelo fator de Cholesky F de :
> # Fun~o para gerarmos variveis aleatrias t ca a o > # multivariadas (n, p, nu, Sigma). Devemos carregar o > # pacote mvtnorm antes de usar a fun~o ca > # usa o comando: library(mvtnorm) > > rtmult <- function (n, sigma = diag(3), df = 1) + { + + + + + } > # Exemplo de uso > > nu <- 4 > par(mfrow = c(1,2)) > plot(rtmult(2000,diag(2), nu)) > Sigma <- matrix(c(4, 1.9, 1.9, 1), 2, 2) > x <- rtmult(3000,Sigma, nu) # t com correla~o 0,95 entre X1 e X2 ca > var(x) # valor esperado nu Sigma/(nu - 2) e library(mvtnorm) F <- chol(sigma) p <- nrow(sigma) return((rmvnorm(n, sigma = diag(p))/sqrt(rchisq(n, df)/df))%*%F)

Ferreira, D.F.

Estat stica Computacional

4.4 Distribuio t de Student Multivariada ca


[,1] [,2]

77

[1,] 8.485475 3.888208 [2,] 3.888208 2.006120

> nu * Sigma / (nu - 2) # valor esperado

[,1] [,2] [1,] [2,] 8.0 3.8 3.8 2.0

> plot(x)

10

q q

10

rtmult(2000, diag(2), nu)[,2]

q q q q q q qq q q qq q q q q q q qq q q q qq q q q q q q qq q q q q q qq q qqq q q q qq q qq q q q q qqq qq qqq q q q q q qqqq qq q qq q qqqqq q q qq q qqqqqq q q qq qqqq qq q q qq qqq q q qq qqq q q q q q q q qqqqqqq qq qqqqqq q qqqq qqq q qqqqq qqq qqqqq q q qqqqqqq qq qqqqqqqq q qqq qq q qqqqqq qqqq q q qqqq qqq q qqqqqqqqq q q qqq q q qqqq qqqqqqq q qqqqqq q qqqqq qq q q qqqqqqqqqqqq qqqq q qqqqq q qqqqqq q qqq qqqqqqqq qq qqqq qqqqqqq qqqqqqqq qq q qq qqqqqqq qqqqqq q qqqqq q qq qqq q qqqqqqqq qqqqqqqqq q q qqq qqqqqq q qqq q qqqqqq q qqq qqqqqqq q qq q qq q qqqqqqqqqq qqqqqq q q q q qqqqqqqqqqqqq qqqqqq qq qqqqqq q qqqqqqqq q qqq qqqq qqqqqq q q qqqqq qqqqqqqq q qqqq q q qqqq qqqqqq q q qqqqqqqqqq q q qqqqq q qqqqqqqqq qqqqq q qqqqq q qq qqqqq q q qqqqqq q qqqqq qqq q qqqqqq qqqqq q q qqq q qqqqqq qqqqq qq q q q qq q qqq qq qq qqqq qqqqqq q q qqqqqqq qqqqqqq qqqq qq q qqqqq qqqqq qqqqqqq qqq q q qqqq qqq q q qqqqq q q q q qqq q q qqqqq qqqq q q qq q q q q q qq q qqqq qq q qq q q qqq q qqqq qq q q qq q q qqqq q q qq q qqq qqq q qqq q q q qqqqq q q qqqq q qq q qq q qq qqq q q q qq q q q qq qq qq q q q qqqqq qq q q q q q qq q q q q qq q q q qq q q qq q q q q q qq q q q q

q q q q qq q q q q q qq qq q qq q q q q qq q q q q q qq q qqq qq qqqq qq qq q qq q q qq q qq q qq qqqqq q q qq qq qq qqq qq qqq q q q qq qq qqq qq qq qq q q qq qq q qqq qq q qqq q q qq qq qqq qqqq qqq q qqqq qq qqq qq q q q qq qq qq q qqqq qq qq qq q qq q q q qq qq qq qq qq q q qqq qq qq q qq qq qq qq qq qq q qq qq q qq qq qqq q qq qq q qq qq qq qqq q qqq qq qq q qq q qqq qqq qq qq qq q qq q q qq q qq qqq qq q q qqq q q qq qq qq q q qq q qqq qq qq qq q qq q qq q qq q q qqq q qqq qq q qqq qqq q qq q qq qq qq qq qqq qq qq q qqq qq qq q qqq qqq qq qqq q qqq q q q qq q qq q qq q q q qqq q q q qq q q qq q qq q q

x[,2] 10 5
q

20

0 10 x[,1]

30

rtmult(2000, diag(2), nu)[,1]

Podemos utilizar a implementao determinada pela funo rmvt, do pacote ca ca mvtnorm, para gerarmos dados da distribuio t multivariada centrada em zero. ca Graus de liberdade reais positivos podem ser utilizados como argumento da funo. ca Foram denidos para os parmetros e , os valores I3 e 1, respectivamente, como a default. Estat stica Computacional Ferreira, D.F.

78

Gerao de Amostras Aleatrias de Variveis Multidimensionais ca o a

4.5

Outras Distribuies Multivariadas co

Existem muitas outras distribuies multivariadas. Vamos mencionar apenas co mais duas delas: a log-normal e a normal contaminada multivariadas. A gerao de ca um vetor coluna aleatrio de dimenso p com distribuio log-normal multivariada o a ca feita tomando-se o seguinte vetor W = [exp(Z1 ), exp(Z2 ), , exp(Zp )] , em e que Z Np (, ). Para gerarmos realizaes da normal contaminada multivariada co consideramos a simulao de um vetor aleatrio X cuja densidade de probabilidade ca o dada por: e (x 1 ) 1 (x 1 ) 1 2 (x 2 ) 1 (x 2 ) 2 2

fX (x) =(2)p/2 |1 |1/2 exp

+ (1 )(2)p/2 |2 |1/2 exp em que i positiva denida, i = 1, 2 e 0 1.

4.6

Exerc cios
com vetor de mdias = [5,10, 15] e e 5 1 = 2 matriz de covarincias a 1 2 3 2 . 2 7

4.6.1 Gerar uma amostra de tamanho (n = 10) uma distribuio normal trivariada ca

Estimar a mdia e a covarincia amostral. Repetir este processo 1.000 vezes e e a estimar a mdia das mdias amostrais e a mdia das matrizes de covarincias e e e a amostrais. Estes valores correspondem exatamente aos respectivos valores esperados? Se no, apresentar a(s) principal(is) causa(s). a 4.6.2 A partir da alterao da funo rnormmv, realizada para que a matriz X ca ca (n p) de observaes multivariadas normais seja obtida sem a necessidade co de utilizao o loop, ou seja, sem a estrutura de repetio determinada pelo ca ca comando for, funo rnormmultv, utilizar o fator de Cholesky, no lugar da maca triz raiz quadrada obtida a partir da decomposio espectral de . Vericar se ca houve melhoria no desempenho em relao ao tempo mdio de processamento ca e Ferreira, D.F. Estat stica Computacional

4.6 Exerc cios

79

de cada varivel aleatria, vetor p-dimensional. Testar isso usando um grande a o valor para n. 4.6.3 Para gerar variveis Wishart e Wishart invertida demonstrar como utilizar as a funes rwishart do pacote bayesm e rwish do pacote MCMCpack. co 4.6.4 Sabemos que variveis Wishart possuem mdia . Apresentar um programa a e para vericar se o valor esperado, ignorando o erro de Monte Carlo, alcanado e c com o uso das funes apresentadas para gerar variveis Wishart. Utilizar co a 10.000 repeties de Monte Carlo. Isso seria uma forma simples, embora no co a conclusiva, de checar se a funo est realizando as simulaes corretamente. ca a co 4.6.5 Implementar funes R para gerarmos variveis aleatrias log-normal e normalco a o contaminada el pticas multivariadas. 4.6.6 Implementar uma funo R para gerarmos variveis aleatrias t multivariada ca a o com parmetros , e de dimenso p. Utilizar vetor de mdias no nulo a a e a e possibilitar a especicao de valores reais positivos para o parmetro , o ca a que diferenciaria esta funo da rtmult. ca

Estat stica Computacional

Ferreira, D.F.

80

Gerao de Amostras Aleatrias de Variveis Multidimensionais ca o a

Ferreira, D.F.

Estat stica Computacional

Cap tulo 5

Algoritmos para Mdias, e Varincias e Covarincias a a


Muitos algoritmos para o clculo de mdias, varincias e covarincias so ima e a a a precisos, podendo gerar resultados nais contendo grandes erros. A necessidade de utilizarmos algoritmos ecientes para realizarmos estas tarefas simples so evidentes a e sero descritos neste cap a tulo.

5.1

Introduo ca

Felizmente o R utiliza algoritmos precisos para clculo da mdia, da varincia e a e a de covarincia. Vamos buscar esclarecer como a utilizao de algoritmo inecientes a ca podem levar a resultados inconsistentes e imprecisos. Nosso objetivo neste cap tulo e apresentar os algoritmos ecientes para estimarmos estes parmetros e mostrar como a as frmulas convencionais podem falhar se utilizadas nos algoritmos diretamente. o Estes algoritmos ecientes so particularmente uteis quando os dados possuem a grande magnitude ou esto muito prximos de zero. Neste caso particular, algumas a o planilhas eletrnicas, como o Excel nas suas verses mais antigas, podiam falhar o o (McCullough e Wilson, 1999[10]). O conhecimento de algoritmos que conduziro a a maiores precises numricas pode levar o pesquisador a no cometer os mesmos o e a erros encontrados em alguns softwares. Estat stica Computacional Ferreira, D.F.

82

Algoritmos para Mdias, Varincias e Covarincias e a a

5.2

Algoritmos Univariados

A ideia bsica de utilizarmos algoritmos para mdia, para a soma de potncias a e e dos desvios em relao a mdia ou para soma de produtos de desvios aplicarmos ca e e recursivamente as frmulas existentes. Se desejamos, por exemplo, obter a mdia de o e n observaes, podemos inicialmente calcular a mdia da primeira observao, que co e ca a prpria. Em um segundo estgio, propor uma expresso para atualizarmos a e o a a mdia da primeira observao, contemplando a segunda e assim sucessivamente. O e ca mesmo procedimento de atualizao aplicado `s varincias ou `s covarincias, no ca e a a a a caso de termos mais de uma varivel. a Para uma amostra de tamanho n dada por X1 , X2 , , Xn , a mdia e a varincia e a amostral convencionais so obtidas, respectivamente, por: a
n

Xi , X. = i=1 n n 1 2 S = Xi2 n1 i=1 (5.2.1a)


n 2

Xi
i=1

(5.2.1b)

Alguns algoritmos existentes procuraram melhorar os algoritmos dos livros textos que so as frmulas das equaes (5.2.1a e 5.2.1b) procurando fazer adaptaes, a o co co repassando a amostra duas vezes. Estes algoritmos podem ser ecientes do ponto de vista da preciso, mas no so rpidos, justamente por repassarem duas vezes a a a a os dados. West (1979)[17] props utilizar um algoritmo que faz uma unica passada, o atualizando a mdia e a varincia em cada nova observao. Podemos facilmente e a ca mostrar que para uma amostra de tamanho n, que a mdia igual a X1 se n = 1, e e (X1 + X2 )/2 se n = 2 e assim por diante. No (k-1)-simo passo podemos especicar e o estimador da mdia por: e
k1

Xi . Xk1 = i=1 k1 No k-simo passo teremos observado Xk e a mdia atualizada : e e e Ferreira, D.F. Estat stica Computacional

5.2 Algoritmos Univariados

83

Xi Xk =
i=1

(5.2.2)

A pergunta que fazemos podemos expressar a mdia do k-simo passo em e e e funo da mdia do (k-1)-simo passo? A resposta a esta pergunta sim e o ca e e e resultado nos fornece o algoritmo desejado. Ento, a partir da equao (5.2.2) a ca obtemos:
k1

Xi + Xk Xk =
i=1

k
k1

(k 1) =
i=1

Xi +

Xk (k 1)k k k1 Xk (k 1)X = + k k Xk1 Xk =Xk1 + k k resultando na equao recursiva nal ca Xk Xk1 , Xk =Xk1 + k para 2 k n, sendo que X1 = X1 . Da mesma forma se denirmos a soma de quadrados corrigidas das k primeiras observaes amostrais 1 < k n por: co
k k 2

(5.2.3)

Xi Xi2
i=1

W 2k =
i=1

2 veremos que a varincia correspondente dada por Sk = W 2k /(n 1). Se expandira e

mos esta expresso isolando o k-simo termo e simplicarmos a expresso resultante a e a teremos: Estat stica Computacional Ferreira, D.F.

84

Algoritmos para Mdias, Varincias e Covarincias e a a

k1 k1

Xi + Xk Xi2 +
2 Xk

W 2k =
i=1

i=1

k
2

=W 2k1 + k Xk Xk

/(k 1)

(5.2.4)

A expresso que desenvolvemos (5.2.4) equivalente a apresentada por West a e (1979)[17]. Isso pode ser demonstrado facilmente se substituirmos Xk obtida na equao (5.2.3) na equao (5.2.4), de onde obtivemos: ca ca

W 2k =W 2k1 + (k 1) Xk Xk1

/k

(5.2.5)

para 2 k n, sendo que W 21 = 0. A varincia obtida por S 2 = W 2n /(n 1). a e Para demonstrarmos diretamente a expresso (5.2.5) temos: a
k1 k1 2

Xi + Xk
2 Xi2 + Xk i=1

W 2k =
i=1

k
k1 2 k1

k1

Xi
2 Xi2 + Xk i=1

+ 2Xk
i=1

2 Xi + Xk

=
i=1

k
k1 2 k1

k1

(k 1)
2 Xi2 + Xk i=1

Xi

+ 2(k 1)Xk
i=1

2 Xi + (k 1)Xk

=
i=1

k(k 1)
2 k1 2 k1

k1 k1

Xi Xi2
i=1

Xi
2 + Xk + 2 i=1

2(k 1)Xk
i=1

Xi

=
i=1

k1
k1

k(k 1)
k1

k(k 1)

2 Xk k

Xi =W 2k1 +
i=1

2(k 1)Xk
i=1

Xi +

k(k 1) k(k 1) 2 2 (k 1)Xk1 2(k 1)Xk Xk1 (k 1)Xk =W 2k1 + + , k k k Estat stica Computacional

2 (k 1)Xk k

Ferreira, D.F.

5.2 Algoritmos Univariados resultando em W 2k = W 2k1 + (k 1) Xk Xk1


2

85

/k.

Podemos generalizar essa expresso para computarmos a covarincia S(x,y) entre a a uma varivel X e outra Y . A expresso para a soma de produtos dada por: a a e

W 2k,(x,y) =W 2k1,(x,y) + (k 1) Xk Xk1

Yk Yk1 /k

(5.2.6)

para 2 k n, sendo W 21,(x,y) = 0. O estimador da covarincia obtido por a e S(x,y) = W 2n,(x,y) /(n 1). Podemos observar, analisando todas estas expresses, que para efetuarmos os o clculos da soma de quadrados e da soma de produtos corrigida necessitamos do a clculo das mdias das variveis no k-simo passo ou no passo anterior. A vantagem a e a e que em uma unica passagem pelos dados, obtemos todas as estimativas. Podemos e ainda estender estes resultados para obtermos somas das terceira e quarta potncias e dos desvios em relao a mdia. As expresses que derivamos para isso so: ca e o a (k 2 3k + 2)(Xk Xk1 )3 3(Xk Xk1 )W 2k1 k2 k 3 4k 2 + 6k 3)(X X k1 )4 (k k W 4k =W 4k1 + + k3 6(Xk Xk1 )2 W 2k1 4(Xk Xk1 )W 3k1 + k2 k W 3k =W 3k1 + para 2 k n, sendo W 31 = 0 e W 41 = 0. Desta forma podemos implementar a funo medsqk() que retorna a mdia, a ca e soma de quadrado, cubo e quarta potncia dos desvios em relao a mdia e varincia e ca e a a partir de um vetor de dados X de dimenso n. a
> # fun~o para retornar a mdia, somas de desvios em rela~o a mdia ca e ca e > # ao quadrado, ao cubo e quarta pot^ncia e vari^ncia e a > medsqk <- function(x) + { + + + + + n <- length(x) if (n <= 1) stop("Dimens~o do vetor deve ser maior que 1!") a xb <- x[1] W2 <- 0 W3 <- 0

(5.2.7a)

(5.2.7b)

Estat stica Computacional

Ferreira, D.F.

86
+ + + + + + + + + + + + + } } S2 <- W2 / (n - 1) W3 W2 xb W4 <- 0 for (ii in 2:n) { aux <- x[ii] - xb W4

Algoritmos para Mdias, Varincias e Covarincias e a a

<- W4 + (ii**3 - 4 * ii**2 + 6 * ii - 3) * aux**4 / ii**3 + 6 * W2 * aux**2 / ii**2 - 4 * W3 * aux / ii <- W3 + (ii**2 - 3 * ii + 2) * aux**3 / ii**2 - 3 * W2 * aux / ii <- W2 + (ii - 1) * aux**2 / ii <- xb + aux / ii

list(media = xb, variancia = S2, SQ2 = W2, W3 = W3, W4 = W4)

> x <- c(1, 2, 3, 4, 5, 7, 8) > medsqk(x) $media [1] 4.285714 $variancia [1] 6.571429 $SQ2 [1] 39.42857 $W3 [1] 22.04082 $W4 [1] 338.4030

5.3

Algoritmos para Vetores Mdias e Matrizes de Coe varincias a

Vamos apresentar nesta seo a extenso multivariada para obtermos o vetor ca a de mdias e as matrizes de somas de quadrados e produtos e de covarincias. Por e a essa razo no implementamos uma funo espec a a ca ca para obtermos a covarincia a entre duas variveis X e Y . Seja uma amostra aleatria no espao Rp dada por X1 , a o c X2 , , Xj , , Xn , sendo que estes vetores sero dispostos em uma matriz X de a dimenses (n p). Para estendermos os resultados da seo anterior, utilizaremos o ca Ferreira, D.F. Estat stica Computacional

5.3 Algoritmos para Vetores Mdias e Matrizes de Covarincias e a

87

as mesmas expresses, tomando o devido cuidado para adapt-las para lidar com o a operaes matriciais e vetoriais. Assim, para estimarmos o vetor de mdias popuco e lacionais, devemos em vez de utilizar o estimador clssico dos livros textos dado a por
n

Xi X=
i=1

utilizaremos a expresso recursiva dada por a Xk Xk1 , Xk =Xk1 + k para 2 k n, sendo que X1 = X1 . Da mesma forma, a adaptao para p dimenses da expresso (5.2.5) direta e ca o a e o resultado obtido : e (5.3.1)

Wk =Wk1 + (k 1) Xk Xk1

Xk Xk1

/k

(5.3.2)

para 2 k n, sendo W1 = 0, uma matriz de zeros de dimenses (p p). O o estimador da matriz de covarincias obtido por S = Wn /(n 1). a e Implementamos a funo medcov() apresentada a seguir para obtermos o vetor ca de mdias, a matriz de somas de quadrados e produtos e a matriz de covarincias. O e a argumento desta funo deve ser uma matriz de dados multivariados com n linhas ca (observaes) e p colunas (variveis). O programa resultante e um exemplo so co a a apresentados na sequncia. Escolhemos um exemplo onde geramos uma matriz de e dados de uma normal multivariada.
> # fun~o para retornar o vetor de mdias, a matriz de somas de ca e > # quadrados e produtos e a matriz de covari^ncias a > medcov <- function(x) + { + + + + + + + n p <- nrow(x) <- ncol(x)

if (n <= 1) stop("Dimens~o linha da matriz deve ser maior que 1!") a xb <- x[1,] W { <- matrix(0, p, p) for (ii in 2:n)

Estat stica Computacional

Ferreira, D.F.

88
+ + + + + + + } > n <- 1000 > p <- 5 } S <- W / (n - 1) aux <- x[ii,] - xb W xb

Algoritmos para Mdias, Varincias e Covarincias e a a

<- W + (ii - 1) * aux %*% t(aux) / ii <- xb + aux / ii

list(vetmedia = xb, covariancia = S, SQP = W)

> library(mvtnorm) # Para gerarmos dados da normal multivariada > x <- rmvnorm(n,matrix(0, p, 1), diag(p)) # simular da normal pentavariada > medcov(x) $vetmedia [1] 0.034709786 0.031682455 -0.005699316 -0.022222691 [5] -0.026155710 $covariancia [,1] [1,] 0.987513320 [2,] 0.004244648 [,2] 0.004244648 [,3] 0.023069039 0.966687665 0.002890498

1.119328910 -0.024326088

[3,] 0.023069039 -0.024326088 [4,] 0.017183805 -0.088985999 [5,] 0.030172158 [,4] [1,] [3,] [4,] [5,] $SQP [,1] [1,] 986.525807 [2,] [3,] [4,] [5,] [1,] [2,] [3,] 23.045969 17.166621 30.141986 [,5] 30.141986 11.778531 -4.189014 [,2] 4.240403 0.017183805 [2,] -0.088985999 0.989603164 0.017933274 [,5] 0.030172158 0.011790321 0.017933274 0.945023147

0.011790321 -0.004193207

0.002890498 -0.004193207

[,3] 23.045969

[,4] 17.166621 2.887607 17.915341

4.240403 1118.209581 -24.301762 -88.897013 -24.301762 965.720978 -88.897013 11.778531 -4.189014 2.887607 988.613560

Ferreira, D.F.

Estat stica Computacional

5.4 Exerc cios


[4,] 17.915341

89

[5,] 944.078124 > var(x) [,1] [1,] 0.987513320 [2,] 0.004244648 # comparar com resultado da nossa fun~o ca [,2] 0.004244648 [,3] 0.023069039 0.966687665 0.002890498

1.119328910 -0.024326088

[3,] 0.023069039 -0.024326088 [4,] 0.017183805 -0.088985999 [5,] 0.030172158 [,4] [1,] [3,] [4,] [5,] 0.017183805 [2,] -0.088985999 0.989603164 0.017933274 [,5] 0.030172158 0.011790321 0.017933274 0.945023147

0.011790321 -0.004193207

0.002890498 -0.004193207

> apply(x, 2, mean) # comparar com resultado da nossa fun~o ca [1] 0.034709786 0.031682455 -0.005699316 -0.022222691

[5] -0.026155710

Felizmente, devido ao R usar preciso dupla e utilizar algoritmos de tima quaa o lidade para estas tarefas, no precisaremos nos preocupar com a implementao de a ca funes como as apresentadas neste cap co tulo. Mas se formos utilizar um compilador da linguagem Pascal, Fortran ou C e C++ , deveremos nos atentar para estes algoritmos, pois somente assim teremos elevada preciso, principalmente se tivermos a lidando com dados de grande magnitude ou muito prximos de zero. o

5.4

Exerc cios

5.4.1 Mostrar a equivalncia existente entre as expresses (5.2.4) e (5.2.5). e o 5.4.2 Implementar em R uma funo para obtermos a soma de produtos, equao ca ca (5.2.6), e covarincia entre as n observaes de duas variveis e cujos valores a co a esto dispostos em dois vetores X e Y . Criar uma matriz com n linhas e a p = 2 colunas de algum exemplo e utilizar a funo medcov() para comparar ca os resultados obtidos. 5.4.3 Os coecientes de assimetria e curtose amostrais so funes das somas de a co potncias dos desvios em relao a mdia. e ca e Estat stica Computacional O coeciente de assimetria e Ferreira, D.F.

90 dado por

Algoritmos para Mdias, Varincias e Covarincias e a a b1 = (W 3n /n)/(W 2n /n)3/2 e o coeciente de curtose b2 = e

(W 4n /n)/(W 2n /n)2 . Implementar uma funo R, utilizando a funo medsqk ca ca para estimar o coeciente de assimetria e curtose univariados. 5.4.4 Utilizar uma amostra em uma rea de sua especialidade e determinar a mdia, a e varincia, soma de quadrados, soma de desvios ao cubo e na quarta potncia. a e Determinar tambm os coecientes de assimetria e curtose. e

Ferreira, D.F.

Estat stica Computacional

Cap tulo 6

Aproximao de Distribuioes ca c
Algoritmos para a obtenao de probabilidades foram alvos de pesquisas de muic tas dcadas e ainda continuam sendo. A importncia de se ter algoritmos que sejam e a rpidos e precisos indescrit a e vel. A maior diculdade que a maioria dos modelos e probabil sticos no possui funo de distribuio explicitamente conhecida. Assim, a ca ca mtodos numricos sosticados so exigidos para calcularmos probabilidades. Um e e a outro aspecto a necessidade de invertermos as funes de distribuio para obe co ca termos quantis da varivel aleatria para uma probabilidade acumulada conhecida. a o Nos testes de hipteses e nos processos de estimao por intervalo e por regio quase o ca a sempre utilizamos estes algoritmos indiretamente sem nos darmos conta disso. Neste cap tulo vamos introduzir estes conceitos e apresentar algumas ideias bsia cas de mtodos gerais para realizarmos as quadraturas necessrias. Mtodos nume a e e ricos particulares sero abordados para alguns poucos modelos. Tambm abordarea e mos separadamente os casos discreto e cont nuo. Para nalizarmos apresentaremos as principais funes pr-existentes do R para uma srie de modelos probabil co e e sticos.

6.1

Introduo ca

No temos muitas preocupaes com a obteno de probabilidades e quantis se a co ca estamos utilizando o R, pois a maioria dos modelos probabil sticos e funes especiais co j est implementada. Nosso objetivo est alm deste fato, pois apesar de estarmos a a a e utilizando o ambiente R, nossa inteno buscar os conhecimentos necessrios para ca e a que possamos ir adiante e para que entendamos como determinada funo opera e ca quais so suas potencialidades e limitaes. a co Estat stica Computacional Ferreira, D.F.

92

Aproximao de Distribuies ca co Vamos iniciar nossa discusso com a distribuio exponencial para chamarmos a ca

a ateno para a principal diculdade existente neste processo. Assim, escolhemos ca este modelo justamente por ele no apresentar tais diculdades. Seja uma varia a vel aleatria X com distribuio exponencial com parmetro , ento a funo de o ca a a ca densidade dada por: e

f (x) =ex , e a funo de distribuio exponencial ca ca e

x>0

(6.1.1)

F (x) = 1 ex .

(6.1.2)

Para este modelo probabil stico podemos calcular probabilidades utilizando a funo de distribuio (6.1.2) e obter quantis com a funo de distribuio inversa ca ca ca ca que dada por: e

q = F 1 (p) =

ln(1 p) .

(6.1.3)

Implementamos, em R, as funoes de densidade, de distribuio e inversa da c ca distribuio e as denominamos pdfexp, cdfexp e icdfexp, respectivamente. Estas ca funes so: co a
> # fun~o de densidade exponencial ca > # f(x) = lambda*exp(-lambda * x) > pdfexp <- function(x, lambda = 1) + { + + + + } > # fun~o de distribui~o exponencial ca ca > # F(x) = 1 - exp(-lambda * x) > cdfexp <- function(x, lambda = 1) + { + + + + } if (any(x < 0)) stop("Elementos de x devem ser todos positivos!") Fx <- 1 - exp(-lambda * x) return(Fx) if (any(x < 0)) stop("Elementos de x devem ser todos n~o-negativos!") a fx <- lambda * exp(-lambda * x) return(fx)

Ferreira, D.F.

Estat stica Computacional

6.1 Introduo ca
> # fun~o inversa da distribui~o exponencial ca ca > # q = -log(1 - p) / lambda > icdfexp <- function(p, lambda = 1) + { + + + + + } > lambda <- 0.1 > x <- 29.95732 > p <- 0.95 > pdfexp(x, lambda) [1] 0.005000001 > cdfexp(x, lambda) [1] 0.95 > icdfexp(p, lambda) [1] 29.95732 if (any(p >= 1) | any(p < 0)) stop("Elementos de p devem estar entre 0 (inclusive) e 1!") q <- -log(1 - p) / lambda return(q)

93

Estas trs funes foram facilmente implementadas, pois conseguimos explicitae co mente obter a funo de distribuio e sua inversa. Se por outro lado tivssemos o ca ca e modelo normal

f (x) =

1 2 2

exp

(x )2 2 2

(6.1.4)

no poder a amos obter explicitamente a funo de distribuio e muito menos a funo ca ca ca inversa da funo de distribuio de probabilidade. Como para a grande maioria dos ca ca modelos probabil sticos encontramos os mesmos problemas, necessitamos de mtodos e numricos para obter estas funes. Por essa razo iremos apresentar alguns detalhes e co a neste cap tulo sobre alguns mtodos gerais e espec e cos de alguns modelos. No caso discreto podemos utilizar algoritmos sequenciais, porm como boa parte dos e modelos probabil sticos possuem relao exata com modelos cont ca nuos, encontramos os mesmos problemas. Estat stica Computacional Ferreira, D.F.

94

Aproximao de Distribuies ca co

6.2

Modelos Probabil sticos Discretos

Vamos apresentar algoritmos para obteno da funo de probabilidade, funo ca ca ca de distribuio de probabilidade e sua inversa para os modelos discretos que julgamos ca mais importantes, os modelos binomial e Poisson. Vamos iniciar nossa discusso pelo a modelo binomial. Seja uma varivel aleatria X com distribuio binomial, ento a a o ca a sua funo de probabilidade dada por: ca e

P (X = x) =

n x p (1 p)(nx) x

(6.2.1)

em que n o tamanho da amostra ou nmeros de ensaios de Bernoulli independentes e u com probabilidade de sucesso p e x o nmero de sucessos, que pertence ao conjunto e u nito 0, 1, , n. A funo de distribuio de probabilidade dada por: ca ca e
x

F (x) =
t=0

n t p (1 p)nt . t

(6.2.2)

Vimos no cap tulo 3, equao (3.3.10) que podemos obter as probabilidades acuca muladas de forma recursiva. Sendo P (X = 0) = (1 p)n , obtemos as probabilidades para os demais valores de X, ou seja, para x = 2, , n de forma recursiva utilizando a relao P (X = x) = P (X = x 1)[(n x + 1)/x][p/(1 p)]. Este mesmo ca algoritmo apropriadamente modicado utilizado para obtermos as probabilidades e acumuladas e a inversa da funo de distribuio. Se os valores de n e de p forem ca ca grandes, este algoritmo pode ser ineciente. Para o caso do parmetro p ser grande a (prximo de um) podemos utilizar a propriedade da binomial dada por: se X o Bin(n, p), ento Y = n X Bin(n, 1 p). Assim, podemos, por exemplo, obter a P (X = x) de forma equivalente por P (Y = n x) e P (X x) = P (Y n x), que pode ser reescrito por FX (x) = 1 FY (n x 1), exceto para x = n, em que FX (x) = 1. Desta forma trocamos de varivel para realizar o clculo e retornamos a a o valor correspondente a do evento original.
> # fun~o de probabilidade e distribui~o da binomial(n, p) ca ca > > pfcdfbinom + { + if (p>0.5) <- function(x, n, p)

Ferreira, D.F.

Estat stica Computacional

6.2 Modelos Probabil sticos Discretos


+ + + + + + + + + + + + + + + + + + + + + + } { pp <- 1 - p x <- n - x } else pp <- p q <- 1 - pp qn <- q^n r g <- pp / q <- r * (n + 1)

95

if (x >= 0) f <- qn else f <- 0 cdf <- f if (x > 0) { u <- 0 while (u < x) { u f <- u + 1 <- f * (g / u - r)

cdf <- cdf + f # while } # if x > 0 if (p > 0.5) cdf <- 1 - cdf + f return(list(pf = f, cdf = cdf))

+ } # fun~o ca > # inversa da fun~o distribui~o binomial(n, p) ca ca > > icdfbinom <- function(prob, n, p) + { + + + + + + + + + + + + + + + } } q r g x f u { u <- u - f x <- x + 1 f <- f * (g / x - r) # while return(x) <- 1 - p <- p / q <- r * (n + 1) <- 0 <- qn <- prob qn <- q^n

while ((u - f) >= 1e-11)

Estat stica Computacional

Ferreira, D.F.

96
> # Exemplo de uso > p <- 0.5; x <- 3; n <- 4 > prob <- pfcdfbinom(x, n, p)$cdf > prob [1] 0.9375 > icdfbinom(prob, n, p) [1] 3

Aproximao de Distribuies ca co

A funo de distribuio binomial possui uma relao exata com a funo districa ca ca ca buio beta. Se tivermos algoritmos para obter a beta incompleta podemos utilizar ca esta relao para obter probabilidades da distribuio binomial. A funo de disca ca ca tribuio binomial, F (x), se relaciona com a funo beta incompleta, Ip(,), da ca ca seguinte forma:

F (x; n,p) =

1 Ip (x + 1,n x) 1

se 0 x < n se x = n.

(6.2.3)

Desta forma podemos antever a importncia de conhecermos algoritmos de ina tegrao numrica das distribuies cont ca e co nuas. Isso ca mais evidente quando percebemos que para grandes valores de n os algoritmos recursivos so inecientes e a podem se tornar imprecisos. Na seo 6.3 apresentaremos alguns mtodos gerais de ca e de integrao para funes cont ca co nuas. No script seguinte utilizamos a relao (6.2.3) ca para a obteno da funo de distribuio da binomial. ca ca ca
> # fun~o de probabilidade e distribui~o da binomial(n, p) ca ca > # a partir da rela~o com a fun~o beta incompleta ca ca > > Fbinbeta <- function(x, n, p) + { + + + + + + + + + } if ((p <= 0) | (p >= 1)) stop("O par^metro p deve estar entre 0 e 1!") a if (x < n) { alpha <- x + 1 beta cdf <- n - x <- 1 - pbeta(p, alpha, beta)

} else cdf <- 1 return(cdf)

Ferreira, D.F.

Estat stica Computacional

6.2 Modelos Probabil sticos Discretos


> # exemplo de uso > p <- 0.5 > n <- 4 > x <- 3 > Fbinbeta(x, n, p) [1] 0.9375 > pbinom(x, n, p) [1] 0.9375

97

A distribuio Poisson a segunda que consideraremos. Existe relaes da funo ca e co ca de distribuio da Poisson com a gama incompleta, porm utilizaremos o mtodo ca e e recursivo para obtermos funo de probabilidade, a funo de distribuio e inversa ca ca ca da funo de distribuio. Se uma varivel aleatria discreta X com valores x = 1, 2, ca ca a o 3, possui distribuio Poisson com parmetro , ento podemos denir a funo ca a a ca de probabilidade por x e x!

P (X = x) =

(6.2.4)

Podemos obter probabilidades desta distribuio utilizando a frmula recursiva ca o P (X = x) = P (X = x 1) , x (6.2.5)

para valores de x 1 e comeando de P (X = 0) = e . Assim, da mesma forma c que zemos com a binomial, implementamos funes em R para obtermos a funo co ca de probabilidade, a funo de distribuio e a sua inversa utilizando esta frmula ca ca o recursiva.
> # fun~o de probabilidade e distribui~o da Poisson(lamb) ca ca > > pfcdfpoi <- function(x, lamb) + { + + + + + + + qn <- exp(-lamb) if (x >= 0) f <- qn else f <- 0 cdf <- f if (x > 0) { u <- 0 while (u < x)

Estat stica Computacional

Ferreira, D.F.

98
+ + + + + + + + } > # Inversa da fun~o distribui~o Poisson(lamb) ca ca > > icdfpoi <- function(p, lamb) + { + + + + + + + + + + + + } > # exemplos de utiliza~o ca > > lamb <- 3 > x > p <- 5 <- 0.95 } qn <- exp(-lamb) x f u { u <- u - f x <- x + 1 f <- f * lamb / x # while return(x) <- 0 <- qn <- p } { u f <- u + 1 <- f * lamb / u

Aproximao de Distribuies ca co

cdf <- cdf + f # while } # if x>0 return(list(pf = f, cdf = cdf))

while ((u - f) >= 1e-11)

> pfcdfpoi(x, lamb)

$pf [1] 0.1008188 $cdf [1] 0.916082

> icdfpoi(p, lamb)

[1] 6

Ferreira, D.F.

Estat stica Computacional

6.3 Modelos Probabil sticos Cont nuos

99

6.3

Modelos Probabil sticos Cont nuos

Para obtermos a funo de distribuio ou a inversa da funo de distribuio de ca ca ca ca modelos probabil sticos cont nuos via de regra devemos utilizar mtodos numricos. e e Existem excees como, por exemplo, o modelo exponencial descrito no in deste co cio cap tulo. A grande maioria dos modelos probabil sticos utilizados atualmente faz uso de algoritmos especialmente desenvolvidos para realizar quadraturas em cada caso particular. Estes algoritmos so, em geral, mais precisos do que os mtodos de a e quadraturas, como so chamados os processos de integrao numrica. Existem va ca e a rios mtodos de quadraturas numricas como o mtodo de Simpson, as quadraturas e e e gaussianas e os mtodos de Monte Carlo. Vamos apresentar apenas os mtodos de e e Simpson e de Monte Carlo, que embora sejam mais simples, so menos precisos. a Vamos utilizar o modelo normal para exemplicar o uso desses mtodos gerais e de integrao nas funes cont ca co nuas de probabilidades. Uma varivel aleatria X a o com distribuio normal com mdia e varincia 2 possui funo densidade dada ca e a ca por: 1 (x )2 2 2

. (6.3.1) 2 2 A funo de distribuio de probabilidade no pode ser obtida explicitamente e ca ca a denida por: e
x

f (x) =

exp

dt. (6.3.2) 2 2 Em geral utilizamos a normal padro para aplicarmos as quadraturas. Neste a

F (x) =

exp

(t )2 2 2

caso a mdia = 0 e a varincia 2 = 1. Assim, representamos frequentemente e e a e a densidade por (z), a funo de distribuio por (z) e a sua inversa por 1 (p), ca ca em que 0 < p < 1. A varivel Z obtida de uma transformao linear de uma a e ca varivel X normal por Z = (X )/. a Vamos apresentar de forma bastante resumida a regra trapezoidal estendida para realizarmos quadraturas de funes. Seja fi o valor da funo alvo no ponto xi , ou co ca seja, fi = f (xi ), ento a regra trapezoidal dada por: a e
xn

f (x)dx =
x1

h (f1 + f2 ) + O(h3 f ), 2

(6.3.3)

Estat stica Computacional

Ferreira, D.F.

100

Aproximao de Distribuies ca co

em que h = xn x1 e o termo de erro O(h3 f ) signica que a verdadeira resposta difere da estimada por uma quantidade que o produto de h3 pelo valor da segunda e derivada da funo avaliada em algum ponto do intervalo de integrao determinado ca ca por x1 e xn , sendo x1 < xn . Esta equao retorna valores muito pobres para as quadraturas da maioria das ca funes de interesse na estat co stica. Mas se utilizarmos esta funo n 1 vezes para ca fazer a integrao nos intervalos (x1 , x2 ), (x2 , x3 ), , (xn1 , xn ) e somarmos os ca resultados, obteremos a frmula composta ou a regra trapezoidal estendida por: o

xn

f (x)dx = h
x1

f1 fn + f2 + f3 + + fn1 + 2 2

+O

(xn x1 )3 f n2

. (6.3.4)

em que h = (xn x1 )/(n 1) A melhor forma de implementar a funo trapezoidal discutida e apresentada ca e por Press et al. (1992)[13]. Nesta implementao inicialmente tomada a mdia ca e e da funo nos seus pontos nais de integrao x1 e xn . So realizados renamenca ca a tos sucessivos. No primeiro estgio devemos acrescentar o valor da funo avaliada a ca no ponto mdio dos limites de integrao e no segundo estgio, os pontos intermee ca a dirios 1/4 e 3/4 so inseridos e assim sucessivamente. Sejam func() a funo de a a ca interesse, a e b os limites de integrao e n o nmero de intervalos de integrao ca u ca previamente denido, ento podemos obter a funo trapzd() adaptando a mesma a ca funo implementada em fortran por Press et al. (1992)[13] da seguinte forma: ca
> # Esta rotina calcula o n-simo estgio de refinamento da regra e a > # de integra~o trapezoidal estendida. em que, func uma fun~o externa ca e ca > # de interesse que deve ser chamada para n=1, 2, etc. e o valor > # de s deve ser retornado a fun~o ca > # em cada nova chamada. > > trapzd <- function(func, a, b, s, n) + { + + + + + + + } { it <- 2^(n - 2) del <- (b - a) / it #espao entre pontos a ser acrescentado. c if (n == 1) { s <- 0.5 * (b - a) * (func(a) + func(b)) else

Ferreira, D.F.

Estat stica Computacional

6.3 Modelos Probabil sticos Cont nuos


+ + + + + + + + + + + + } > # fun~o para executar quadraturas de fun~es definidas em func() ca co > # at que uma determinada precis~o tenha sido alcanada e a c > > qtrap <- function (func, a, b) + { + + + + + + + + + + + + + + + + + + + + + } } if (j > jmax) return(s) stop("Limite de passos ultrapassado!") } olds <- s if (fim == 1) break j <- j + 1 if (j > jmax) break EPS <- 1.e-9 jmax <- 20 olds <- -1.e30 # impossvel valor para a quadratura inicial j fim { s <- trapzd(func, a, b, s, j) # evitar converg^ncia prematura espria e u if (j > 5) { if ((abs(s-olds)<EPS*abs(olds)) | ((s<0.0) & (olds==0.0))) fim <- 1 <- 1 <- 0 } } # troca s pelo seu novo valor refinado s <- 0.5 * (s + (b - a) * sum / it) # if then else return(s) x <- a + 0.5 * del

101

sum <- 0.0 for (j in 1:it) { sum <- sum + func(x) x <- x + del

repeat

Devemos chamar a funo qtrap() especicando a funo de interesse func() e ca ca os limites de integrao. Assim, para a normal padro devemos utilizar as seguintes ca a funes: co Estat stica Computacional Ferreira, D.F.

102

Aproximao de Distribuies ca co

> # fun~o de densidade de probabilidade normal padr~o ca a > > fdpnorm <- function(x) + { + + + } > #fun~o de distribui~o de probabilidade normal padr~o ca ca a > > cdfnorm <- function(func,x) + { + + + + + } > # exemplo de uso > > z <- 1.96 > p <- cdfnorm(fdpnorm, z) > p [1] 0.9750021 Fx <- qtrap(func, 0, abs(x)) if (x > 0) Fx <- 0.5 + Fx Fx <- 0.5 - Fx return(Fx) else fx <- (1 / (2 * pi)^0.5) * exp(-x^2 / 2) return(fx)

E evidente que temos mtodos numricos gerais mais ecientes do que o apree e sentado. As quadraturas gaussianas representam uma classe de mtodos que nore malmente so mais ecientes que este apresentado . No vamos nos atentar para a a estes mtodos gerais, por duas razes bsicas. A primeira que existem mtodos e o a e e espec cos para obtermos as quadraturas dos principais modelos probabil sticos que so mais ecientes. A maior ecincia destes mtodos espec a e e cos se d por dois a aspectos: velocidade de processamento e preciso. A segunda razo refere-se ao a a fato de que no R estas rotinas espec cas j esto implementadas. Como ilustrao, a a ca podemos substituir a funo que implementamos cdfnorm() pela pr-existente no R ca e pnorm(). Vamos ilustrar um destes algoritmos especializados para obtermos a funo de distribuio da normal padro. O algoritmo de Hasting possui erro mximo ca ca a a de 1 106 e dado por: e

(x) =

G 1G

se x 0 se x > 0

(6.3.5)

Ferreira, D.F.

Estat stica Computacional

6.3 Modelos Probabil sticos Cont nuos sendo G dado por

103

G = (a1 + a2 2 + a3 3 + a4 4 + a5 5 )(x) em que = 1 1 + 0,2316418|x|

e a1 = 0,319381530, a2 = 0,356563782, a3 = 1,781477937, a4 = 1,821255978 e a5 = 1,330274429. O resultado da implementao deste procedimento : ca e


> # > > hcdfnorm <- function(x) + { + + + + + + + + + + } > # exemplo de uso > > z <- 1.96 > p <- hcdfnorm(z) > p [1] 0.9750022 eta <- 1 / (1 + abs(x) * 0.2316418) a1 a3 a5 G <- 0.319381530; a2 <- -0.356563782 <- 1.781477937; a4 <- -1.821255978 <- 1.330274429 <- (a1*eta + a2*eta^2 + a3*eta^3 + a4*eta^4 + a5*eta^5) * phi Fx <- 1 - G CDF da normal padr~o - aproxima~o de Hasting a ca

phi <- 1 / (2 * pi)^0.5 * exp(-x * x / 2) if (x <= 0) Fx <- G else return(Fx)

Com o uso desta funo ganhamos em preciso, principalmente para grandes ca a valores em mdulo do limite de integrao superior e principalmente ganhamos em o ca tempo de processamento. Podemos ainda abordar os mtodos de Monte Carlo, que e so especialmente uteis para integrarmos funes complexas e multidimensionais. a co Vamos apresentar apenas uma verso bastante rudimentar deste mtodo. A ideia a e e determinar um retngulo que engloba a funo que desejamos integrar e bombardea ca armos a regio com pontos aleatrios (u1 , u2 ) provenientes da distribuio uniforme. a o ca Estat stica Computacional Ferreira, D.F.

104

Aproximao de Distribuies ca co

Contamos o nmero de pontos sob a funo e determinamos area correspondente, u ca a a partir da proporcionalidade entre este nmero de pontos e o total de pontos simuu lados em relao a rea sob a funo na regio de interesse em relao ` rea total ca a ca a ca a a do retngulo. Se conhecemos o mximo da funo fmax , podemos determinar este a a ca retngulo completamente. Assim, o retngulo de interesse ca denido pela base a a (valor entre 0 e z1 em mdulo, sendo z1 fornecido pelo usurio) e pela altura (valor o a da densidade no ponto de mximo). Assim, a rea deste retngulo A = |z1 |fmax . a a a e a No caso da normal padro, o mximo obtido para z = 0 fmax = 1/ 2 e a rea do a a e retngulo A = |z1 |/ 2. Se a rea sob a curva, que desejamos estimar, for denida a a por A1 , podemos gerar nmeros uniformes u1 entre 0 e |z1 | e nmeros uniformes u u u2 entre 0 e fmax . Para cada valor u1 gerado calculamos a densidade f1 = f (u1 ). Assim, a razo entre as reas A1 /A proporcional a razo n/N , em que n representa a a e a o nmero de pontos (u1 , u2 ) para os quais u2 f1 e N o nmero total de pontos u u gerados. Logo, a integral obtida por A1 = |z1 | fmax n/N , em que z1 o e e valor da normal padro para o qual desejamos calcular a rea que est compreena a a dida entre 0 e |z1 |, para assim obtermos a funo de distribuio no ponto z1 , ou ca ca seja, para obtermos (z1 ). Assim, se z1 0, ento (z1 ) = 0,5 A1 e se z1 > 0, a ento (z1 ) = 0,5 + A1 . Para o caso particular da normal padro, implementamos a a a seguinte funo: ca
> # Quadratura da normal padr~o via simula~o Monte Carlo a ca > > mcdfnorm <- function(x, nMC) + { + + + + + + + + + + } > # exemplo de uso > > mcdfnorm(1.96, 1500000) [1] 0.9744936 max <- 1 / (2 * pi)^0.5 z u1 u2 f1 n G <- abs(x) <- runif(nMC) * z <- runif(nMC) * max <- length(f1[u2 <= f1]) <- n / nMC * max * z # 0 < u1 < z # 0 < u2 < max

<- (1 / (2 * pi)^0.5) * exp(-u1^2 / 2) # f1(u1) - normal padr~o a

if (x < 0) Fx <- 0.5 - G else Fx <- 0.5 + G return(Fx)

Ferreira, D.F.

Estat stica Computacional

6.3 Modelos Probabil sticos Cont nuos Outra forma de obtermos uma aproximao da integral ca
abs(z) 0 abs(z)

105

1 2 et /2 dt = 2

(t)dt
0

por Monte Carlo gerarmos m nmeros uniformes entre 0 e abs(z), digamos z1 , z2 , e u . . ., zm e obter
m

abs(z)

(t)dt z
0

1 m

(zi ) ,
i=1

em que (t) = 1/ 2 exp{t2 /2}, e a funo densidade normal padro avaliada ca a no ponto t e z = abs(z) 0. A ordem de erro desse processo dada por O(m1/2 ). e O programa R para obter o valor da funo de distribuio normal padro (z) ca ca a utilizando essas ideias apresentado a seguir. Por meio de uma comparao dessa e ca alternativa Monte Carlo com a primeira podemos vericar que houve uma grande diminuio do erro de Monte Carlo no clculo dessa integral, nessa nova abordagem. ca a Muitas variantes e melhorias nesse processo podem ser implementadas, mas ns no o a iremos discuti-las aqui.
> # Quadratura da normal padr~o via simula~o Monte Carlo a ca > # Segunda forma de obter tal integral: forma clssica a > cdfnorm <- function(z, m) + { + + + + + + + } > # Exemplo > m <- 15000 > z <- 1.96 > cdfnorm(z, m) [1] 0.974724 > pnorm(z) [1] 0.9750021 # valor real utilizando diretamente o R # Estimativa de Monte Carlo # nmero de pontos muito inferior ao caso anterior u x <- runif(m,0,abs(z)) cdf <- (1/(2*pi)^0.5)*exp(-(x^2)/2) cdf <- abs(z)*mean(cdf) if (z < 0) cdf <- 0.5 - cdf else cdf <- 0.5 + cdf return(cdf)

Estat stica Computacional

Ferreira, D.F.

106
> # Ordem de erro: O(m^(-1/2)) > 1/m^0.5 [1] 0.008164966 > # verifica~o da converg^ncia ca e > set.seed(1000) > x <- runif(m, 0, abs(z)) > pdf <- (1/(2*pi)^0.5)*exp(-(x^2)/2)

Aproximao de Distribuies ca co

> if (z < 0) cdf <- 0.5 - abs(z)*cumsum(pdf)/(1:m) else + cdf <- 0.5 + abs(z)*cumsum(pdf)/(1:m) > plot(cdf,type="l",xlab="Simula~es MC") co > abline(a=pnorm(z), b=0, col="red") # linha com o valor real

cdf

0.95 0

1.00

1.05

1.10

5000

10000

15000

Simulaes MC

Vamos apresentar o mtodo numrico de Newton-Raphson para obtermos a soe e luo da equao ca ca

z =1 (p), Ferreira, D.F. Estat stica Computacional

6.3 Modelos Probabil sticos Cont nuos

107

em que 0 < p < 1 o valor da funo de distribuio da normal padro, 1 (p), o e ca ca a valor da inversa da funo de distribuio normal padro no ponto p e z o quantil ca ca a correspondente, que queremos encontrar dado um valor de p. Podemos apresentar esse problema por meio da seguinte equao ca

(z) p =0, em que (z) a funo de distribuio normal padro avaliada em z. Assim, desejae ca ca a mos encontrar os zeros da funo f (z) = (z) p. Em geral, podemos resolver essa ca equao numericamente utilizando o mtodo de Newton-Raphson, que se trata de ca e um processo iterativo. Assim, devemos ter um valor inicial para o quantil para iniciarmos o processo e no (n + 1)-simo passo do processo iterativo podemos atualizar e o valor do quantil por

zn+1 =zn

f (zn ) , f (zn )

(6.3.6)

em que f (zn ) derivada de primeira ordem da funo para a qual queremos obter e ca as ra zes avaliada no ponto zn . Para o caso particular temos que [(zn ) p] , (zn )

zn+1 =zn

(6.3.7)

sendo (zn ) a funo densidade normal padro. Como valores iniciais usaremos uma ca a aproximao grosseira, pois nosso objetivo somente demonstrar o mtodo. Assim, ca e e se p for inferior a 0,5 utilizaremos z0 = 0,1, se p > 0,5, utilizaremos z0 = 0,1. Obviamente se p = 0, a funo deve retornar z = 0. A funo qPhi a seguir retorna ca ca os quantis da normal, dados os valores de p entre 0 e 1, da mdia real e da e varincia real positiva 2 , utilizando para isso o mtodo de Newton-Raphson e a a e funo hcdfnorm de Hasting para obtermos o valor da funo de distribuio normal ca ca ca padro. a
> # fun~o auxiliar para retornar o valor da ca > # fun~o densidade normal padr~o ca a > phi <- function(z) + { + return(1 / (2 * pi)^0.5 * exp(-z * z / 2))

Estat stica Computacional

Ferreira, D.F.

108
+ }

Aproximao de Distribuies ca co

> # Mtodo de Newton-Raphson para obtermos quantis da distribui~o normal e ca > # com mdia real mu e desvio padr~o real positivo sig, dado 0 < p < 1 e a > # utiliza as fun~es phi(z) e co > > qPhi <- function(p, mu = 0, sig = 1) + { + + + + + + + + + + + + + + + + + + + } > # Exemplo de uso > > p > mu <- 0.975 <- 0 } return(list(x = z1 * sig + mu, it = it - 1)) } if ((p <= 0) | (p >= 1)) stop("Valor de p deve estar entre 0 e 1!") if (sig <= 0) stop("Desvio padr~o deve ser maior que 0!") a if (abs(p - 0.5) <= 1e-8) z1 <- 0 else { if (p < 0.5) z0 <- -0.1 else z0 <- 0.1 it itmax eps <- 1 <- 2000 <- 1e-8 hcdfnorm(z), apresentadas anteriormente

convergiu <- FALSE while (!convergiu) { z1 <- z0 - (hcdfnorm(z0) - p) / phi(z0) if ((abs(z0 - z1) <= eps * z0) | (it > itmax)) convergiu <- TRUE it <- it + 1 z0 <- z1

> sig <- 1 > qPhi(p, mu, sig) $x [1] 1.959963 $it [1] 7 > qnorm(p, mu, sig) # pra fins de compara~o ca [1] 1.959964

Poder amos, ainda, ter utilizado o mtodo da secante, uma vez que ele no e a Ferreira, D.F. Estat stica Computacional

6.4 Funes Pr-Existentes no R co e

109

necessita da derivada de primeira ordem, mas precisa de dois valores iniciais para iniciar o processo e tem convergncia mais lenta. O leitor incentivado a consultar e e Press et al. (1992)[13] para obter mais detalhes. Tambm poderia ter sido usada a e funo cdfnorm, que utiliza o mtodo trapezoidal. Nesse caso a preciso seria maior, ca e a mas o tempo de processamento tambm maior. Para isso bastaria substituir a e e linha de comando > z1 <- z0 - (hcdfnorm(z0) - p) / phi(z0) por > z1 <- z0 - (cdfnorm(z0) - p) / phi(z0) Felizmente o R tambm possui rotinas pr-programadas para este e para muitos e e outros modelos probabil sticos, que nos alivia da necessidade de programar rotinas para obteno das funes de distribuies e inversas das funes de distribuies ca co co co co dos mais variados modelos probabil sticos existentes.

6.4

Funes Pr-Existentes no R co e

Na Tabela 3.1 apresentamos uma boa parte das funes de probabilidade ou co densidade contempladas pelo R. Na segunda coluna foi apresentado o nome R, que se for precedido por d, retornar a densidade (ou funo de probabilidade), por a ca p, a funo de distribuio e por q, a funo de distribuio inversa. Na terceira ca ca ca ca coluna especicamos os parmetros que devem ser repassados como argumentos a das funes. Todas estas funes so vetoriais, indicando que podemos obter tais co co a quantidades dispostas em um vetor de dimenso n. O R tambm permite que utilia e zemos o prexo r para gerarmos nmeros aleatrios de cada distribuio, conforme u o ca foi apresentado no cap tulo 3. Assim, podemos utilizar os comandos dnorm(1.96), pnorm(1.96) e qnorm(0.975), para obtermos a densidade, funo de distribuio e ca ca inversa da distribuio normal padro, respectivamente, dos argumentos utilizados ca a nos exemplos.

6.5

Exerc cios
normal apresentados neste cap tulo. Utilizar a funo pnorm() como refernca e

6.5.1 Comparar a preciso dos trs algoritmos de obteno da funo de distribuio a e ca ca ca

Estat stica Computacional

Ferreira, D.F.

110 cia.

Aproximao de Distribuies ca co

6.5.2 Utilizar diferentes nmeros de simulaes Monte Carlo para integrar a funo u co ca de distribuio normal e estimar o erro de Monte Carlo relativo e absoluto ca mximo cometidos em 30 repeties para cada tamanho. Utilize os quantis a co 1,00, 1,645 e 1,96 e a funo pnorm() como referncia. ca e 6.5.3 A distribuio Cauchy um caso particular da t de Student com = 1 grau ca e de liberdade. A densidade Cauchy dada por: e f (x) = 1 (1 + x2 )

Utilizar o mtodo trapezoidal estendido para implementar a obteno dos vae ca lores da distribuio Cauchy. Podemos obter analiticamente tambm a funo ca e ca de distribuio e sua inversa. Obter tais funes e implement-las no R. Utilize ca co a as funes R pr-existentes para checar os resultados obtidos. co e 6.5.4 Utilizar o mtodo Monte Carlo descrito nesse cap e tulo, para obter valores da funo de distribuio Cauchy, apresentada no exerc proposto 6.5.3. Utilica ca cio zar alguns valores numricos para ilustrar e comparar com funes implemene co tadas em R para esse caso. Qual deve ser o nmero m u nimo de simulaes co Monte Carlo requeridas para se ter uma preciso razovel. a a

Ferreira, D.F.

Estat stica Computacional

Referncias Bibliogrcas e a
[1] ATKINSON, A. C.; PEARCE, M. C. The computer generation of beta, gamma and normal random variable. Journal of the Royal Statistical Society, Series A, 139(4):431461, 1976. 48 [2] DACHS, J. N. W. Estat stica computacional. Uma introduo ao Turbo Pascal. ca Livros Tcnicos e Cient e cos, Rio de Janeiro, 1988. 236p. 19 [3] DEVROY, L. Generating the maximum of independent identically distributed random variables. Computers and Mathematics with Applications, 6:305315, 1980. 51 [4] DEVROY, L. Non-uniform random variate generation. Springer-Verlag, New York, 1986. 843p. 51, 53 [5] FERREIRA, D. F. Estat stica Multivariada. Editora UFLA, Lavras, 2008. 662p. 45 [6] JOHNSON, R. A.; WICHERN, D. W. Applied multivariate statistical analysis. Prentice Hall, New Jersey, 4th edition, 1998. 816p. 45 [7] KACHITVICHYANUKUL, V.; SCHMEISER, B. W. Binomial random variate generation. Communications of the ACM, 31(2):216222, 1988. 51, 53 [8] MARSAGLIA, G.; BRAY, T. A. A convenient method for generating normal variables. SIAM Review, 6(3):260264, 1964. 45 [9] MATSUMOTO, M.; NISHIMURA, T. Mersenne Twister: A 623-dimensionally equidistributed uniform pseudo-random number generator. ACM Transactions on Modeling and Computer Simulation, 8(1):330, 1998. 28 Estat stica Computacional Ferreira, D.F.

112

REFERENCIAS BIBLIOGRAFICAS

[10] McCULLOUGH, B. D.; WILSON, B. On the accuracy of statistical procedures in Microsoft Excel 97. Computational Statistics and Data Analysis, 31:2737, 1999. 81 [11] NAYLOR, T. H. J.; BALINTFY, J. L.; BURDICK, D. S.; CHU, K. Tcnicas e de simulao em computadores. Vozes, Petrpolis, 1971. 402p. 19 ca o [12] PARK, S. K.; MILLER, K. W. Random number generators: good ones are hard to nd. Communications of the ACM, 31(10):11921201, 1988. 25 [13] PRESS, W. H.; FLANNERY, B. P.; TEUKOLSKY, S. A.; VETTERLING, W. T. Numerical recipes in Fortran: the art of scientic computing. Cambridge University Press, Cambridge, 1992. 994p. 23, 25, 45, 100, 109 [14] R Development Core Team. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria, 2006. ISBN 3-900051-07-0. 1 [15] SCHRAGE, L. A more portable Fortran random number generator. ACM Transactions on Mathematical Software, 5(2):132138, 1979. 25, 26 [16] SMITH, W. B.; HOCKING, R. R. Algorithm AS 53: Wishart variate generator. Journal of the Royal Statistical Society - Series C, 21(3):341345, 1972. 73 [17] WEST, D. H. D. Updating mean and variance estimates: an improved method. ACM Transactions on Mathematical Software, 22(9):532535, Sept 1979. 82, 84

Ferreira, D.F.

Estat stica Computacional

Indice Remissivo
algoritmo Hasting, 102 amostragem por rejeio, 35 ca beta incompleta, 96 densidade exponencial, 37 log-normal, 43 normal, 43 Tukey-lambda, 48 distribuio ca binomial, 49 de combinaes co lineares, 64 t multivariada esfrica, 75 e equao ca recursiva, 83 funo ca de densidade exponencial, 92 normal, 93 normal multivariada, 64 Wishart, 71 Estat stica Computacional lema gnese da binomial, 49 e soma de binomiais, 50 tempo de espera Ferreira, D.F. Wishart invertida, 72 de distribuio ca binomial, 94 exponencial, 92 normal, 99 de distribuio inversa ca binomial, 52 exponencial, 37, 38, 92 de probabilidade binomial, 49, 94 geomtrica, 50 e Poisson, 97 funes co trigonomtricas, 45 e gerao ca de variveis a t multivariada, 75 gerador padro a m nimo, 26 Jacobiano da transformao, 44 ca

114 da exponencial, 50 da geomtrica, 50 e linguagem de alto-n vel, 25 soma mtodo e Box-Mller, 43 u congruencial, 24 da inverso a discreto, 52 matriz covarincias, 87 a soma de quadrados e produtos, 87 Mersenne Twister, 28 nmeros u aleatrios, 23, 26 o pseudo-aleatrios, 23 o uniformes, 24 preciso a dupla, 27 quadraturas gaussianas, 102 Monte Carlo, 103 quantis exponencial, 92 random, 24 ranuni, 29 regra trapezoidal estendida, 99 runif, 29 Ferreira, D.F. teorema simulao ca

INDICE REMISSIVO

matrizes aleatrias o Wishart, 73 Wishart invertidas, 73 de produtos, 85

da transformao ca de probabilidades, 34 Wishart invertida, 72

Estat stica Computacional