estatÃstica computacional usando r

Upload: michel-silva

Post on 08-Apr-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/7/2019 estat stica computacional usando R

    1/108

    UNIVERSIDADE FEDERAL DE LAVRASDEPARTAMENTO DE CINCIAS EXATAS

    Estatstica ComputacionalUtilizando R

    Daniel Furtado Ferreira

    [email protected]

    LAVRAS

    Minas Gerais - Brasil

    11 de setembro de 2008

  • 8/7/2019 estat stica computacional usando R

    2/108

    ii

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    3/108

    Prefcio

    Nestas notas de aula tivemos a inteno de abordar o tema de estatstica com-

    putacional que to importante para a comunidade cientfica e principalmente para

    os estudantes dos cursos de ps-graduao em estatstica. Podemos afirmar sem

    medo de errar que a estatstica computacional se tornou e hoje em dia uma das

    principais reas da estatstica. Alm do mais, os conhecimentos desta rea podem

    ser e, freqentemente, so utilizados em outras reas da estatstica, da engenharia e

    da fsica. A inferncia Bayesiana um destes exemplos tpicos 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,optamos por escrever algo que propiciasse ao leitor ir alm de um simples receitu-

    rio, mas que, no entanto, no o fizesse perder em um emaranhado de demonstraes.

    Por outro lado buscamos apresentar os modelos e os mtodos de uma forma bastante

    abrangente e no restritiva.

    Uma outra motivao que nos conduziu e nos encorajou a desenvolver este pro-

    jeto, foi a nossa experincia pessoal em pesquisas com a estatstica computacional.

    Tambm fizemos isso pensando no benefcio pessoal, no podemos negar, que isso nos

    traria ao entrarmos em contato direto com a vasta publicao existente neste ramo

    da estatstica. No temos, todavia, a inteno de estudarmos todos os assuntos e

    nem mesmo pretendemos para um determinado tpico esgotar todas as possibilida-

    des. Pelo contrrio, esperamos que estas notas sejam uma introduo a estatstica

    computacional e que sirvam de motivao para que os alunos dos cursos de graduao

    em estatstica possam se adentrar ainda mais nessa rea.

    Estas notas so baseadas em um livro que estamos escrevendo sobre a estatstica

    computacional utilizando a linguagem Pascal. A adaptao para o R de algumas das

    rotinas implementadas neste livro foi uma tarefa bastante prazerosa e reveladora.

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    4/108

    iv

    Aproveitamos esta oportunidade para desvendar um pouco dos inmeros segredosque este poderoso programa possui e descobrir um pouco sobre seu enorme potencial

    e tambm, por que no dizer, de suas fraquezas. Nesta primeira verso no esperamos

    perfeio, mas estamos completamente cientes que muitas falhas devem existir e

    esperamos contar com a colaborao dos leitores para san-las. Esperamos que

    estas notas venham contribuir para o crescimento profissional dos alunos de nosso

    programa de Estatstica e Experimentao Agropecuria ou de outros programas da

    UFLA ou de outras instituies. Dessa forma nosso objetivo ter sido atingido.

    Daniel Furtado Ferreira

    11 de setembro de 2008

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    5/108

    Sumrio

    Prefcio iii

    Lista de Tabelas vii

    Lista de Figuras ix

    1 Introduo ao Programa R 1

    1.1 Introduo ao R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    1.2 Estruturas de Controle de Programao . . . . . . . . . . . . . . . . 8

    1.3 Funes no R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.4 Introduo a Estatstica Computacional . . . . . . . . . . . . . . . . 15

    1.5 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    2 Gerao de Variveis Uniformes 19

    2.1 Nmeros Aleatrios Uniformes . . . . . . . . . . . . . . . . . . . . . 20

    2.2 Nmeros Aleatrios Uniformes no R . . . . . . . . . . . . . . . . . . 25

    2.3 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    3 Gerao de Variveis No-Uniformes 293.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    3.2 Mtodos Gerais para Gerar Variveis Aleatrias . . . . . . . . . . . . 30

    3.3 Variveis Aleatrias de Algumas Distribuies Importantes . . . . . . 38

    3.4 Rotinas R para Gerao de Variveis Aleatrias . . . . . . . . . . . . 50

    3.5 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    4 Gerao de Amostras Aleatrias de Variveis Multidimensionais 57

    4.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    6/108

    vi SUMRIO

    4.2 Distribuio Normal Multivariada . . . . . . . . . . . . . . . . . . . . 584.3 Distribuio Wishart e Wishart Invertida . . . . . . . . . . . . . . . 62

    4.4 Distribuio t de Student Multivariada . . . . . . . . . . . . . . . . . 66

    4.5 Outras Distribuies Multivariadas . . . . . . . . . . . . . . . . . . . 68

    4.6 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

    5 Algoritmos para Mdias, Varincias e Covarincias 71

    5.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

    5.2 Algoritmos Univariados . . . . . . . . . . . . . . . . . . . . . . . . . 72

    5.3 Algoritmos para Vetores Mdias e Matrizes de Covarincias . . . . . 765.4 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

    6 Aproximao de Distribuies 79

    6.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

    6.2 Modelos Probabilsticos Discretos . . . . . . . . . . . . . . . . . . . . 82

    6.3 Modelos Probabilsticos Contnuos . . . . . . . . . . . . . . . . . . . 86

    6.4 Funes Pr-Existentes no R . . . . . . . . . . . . . . . . . . . . . . 93

    6.5 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

    Referncias Bibliogrficas 95

    ndice Remissivo 97

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    7/108

    Lista de Tabelas

    3.1 Distribuies de probabilidades, nome R e parmetros dos principais

    modelos probabilstico. . . . . . . . . . . . . . . . . . . . . . . . . . . 51

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    8/108

    viii LISTA DE TABELAS

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    9/108

    Lista de Figuras

    3.1 Ilustrao do teorema fundamental da transformao de probabilida-

    des para gerar uma varivel aleatria Xcom densidade f(x) = F(x). 31

    3.2 Mtodo da rejeio para gerar um valor x0 da varivel aleatria X

    com densidade f(x). . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    3.3 Ilustrao grfica do algoritmo Metropolis-Hastings, apresentando a

    funo de transio q(x; xt) e a transio de x1 para x2 por meio do

    algoritmo de passeio aleatrio. . . . . . . . . . . . . . . . . . . . . . . 36

    3.4 Crculo unitrio mostrando um ponto aleatrio (u1, u2) com R2 =

    u21 + u22 representando x1 e o ngulo que o ponto (u1, u2) determinaem relao ao eixo u1. . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    10/108

    x LISTA DE FIGURAS

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    11/108

    Captulo 1

    Introduo ao Programa R

    O programa R (R Development Core Team, 2006[13]) foi escolhido para minis-

    trar este curso por uma srie de razes. Alm de ser um programa livre, no sentido

    de possuir livre distribuio e cdigo fonte aberto, pode ser utilizado nas platafor-

    mas Windows e Unix. Alm do mais, o R possui grande versatilidade no sentido de

    possuir inmeros pacotes j prontos e nos possibilitar criar novas rotinas e funes.

    O R a verso livre baseada na linguagem S, cuja verso comercial o S-Plus. Oprograma SAS, por outro lado, o programa estatstico mais comum, mas o R

    o mais popular. O programa R por ser genuinamente um programa orientado por

    objeto nos possibilita programar com muita eficincia e versatilidade. Outro aspecto

    que bastante atrativo no R refere-se ao fato de o mesmo receber contribuies

    de pesquisadores de todo o mundo na forma de pacotes. Essa uma caracterstica

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

    blemas com os quais nos deparamos em situaes reais. Para os problemas que no

    conseguimos encontrar solues, o ambiente de programao R nos possibilita criar

    nossas prprias solues.

    Nestas notas de aulas pretendemos apresentar os conceitos bsicos da estatstica

    computacional de uma forma bastante simples. Inicialmente obteremos nossas pr-

    prias solues para um determinado mtodo ou tcnica e em um segundo momento

    mostraremos que podemos ter a mesma soluo pronta do programa R quando esta

    estiver disponvel. Particularmente neste captulo vamos apresentar algumas caracte-

    rsticas do ambiente e da linguagem R para implementarmos nossas solues. Nosso

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    12/108

    2 Introduo ao Programa R

    curso no pretende dar solues avanadas e de eficincia mxima para os problemasque abordaremos, mas propiciar aos alunos um primeiro contato com a linguagem

    R (ou S) e com os problemas da estatstica computacional. A linguagem R um

    dialeto da linguagem S que foi desenvolvida em 1980 e se espalhou pela comunidade

    cientfica desde ento.

    A desvantagem que o R no um programa fcil de aprender. Alguns esfor-

    os iniciais so necessrios at que consigamos obter algum benefcio. No temos a

    inteno de apresentar neste curso os recursos do R para anlises de modelos linea-

    res de posto completo ou incompleto, de modelos no-lineares, de modelos lineares

    generalizados ou de grficos. Eventualmente poderemos utilizar algumas destas fun-

    es como um passo intermedirio da soluo do problema que estaremos focando.

    Este material ser construdo com a abordagem terica do tpico e associar exem-

    plificaes prticas dos recursos de programao R para resolver algum problema

    formulado, em casos particulares da teoria estudada.

    Este material apenas uma primeira verso que dever ter muitos defeitos. As-

    sim, o leitor que encontr-los ou tiver uma melhor soluo para o problema poder

    contribuir enviando um e-mail para [email protected].

    1.1 Introduo ao R

    No R os smbolos ou variveis so objetos e podem ter as mais variadas estruturas,

    tais como matrizes, vetores, data frames, listas, funes, expresses e muitos outras.

    Vamos descrever de forma sucinta e gradativa algumas destes objetos.

    Os vetores so compostos de clulas contguas de dados homogneos. Os vetores

    podem ser de vrios tipos como, por exemplo, lgicos, inteiros, reais e caracteres.

    O modo mais simples de criar um vetor utilizar > x=c(5, 1.5, 4.5, 6.7, 3.1).Este comando faz com que concatenemos os 5 elementos anteriores com a funo c

    (concatenao) e o resultado um vetor de tamanho 5. Podemos acessar qualquer

    elemento deste vetor utilizando o comando > x[j], em que j = 1, 2, , 5 e otamanho do vetor por > length(x). Se queremos ver o resultado do objeto na

    tela, devemos digitar o nome dele na linha de comando do R por > 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 ser feitas por

    do programa R, por considerar que foram digitados em um arquivo texto. Cada

    linha deve conter uma funo, uma atribuio ou um comando. Podemos digitar

    mais de um comando por linha se os separarmos por ponto e vrgula. Vamos ilustrar

    o uso de vetores com o exemplo a seguir. Neste exemplo aproveitamos o ensejo para

    apresentar outros comandos teis da linguagem R.

    # programa R demonstrando o uso de vetores e de comandos

    # teis para lidarmos com eles. Todos os textos aps #

    # sero considerados comentrios

    x = c(2, 3, 4, 5.1, 3.2) # cria um vetor de tamanho 5

    x # imprime o vetor

    y = c(x,0,1,x) # concatena x com o vetor [0, 1] e x

    y # imprime o vetor

    z = c(2.4, 1.3, 3.4, 2.1, 5.7) # cria um vetor de tamanho 5

    w = 2*x+z+1 # realiza operaes elementares com os vetores

    w # imprime o vetor w

    rx = range(x) # retorna um vetor de tamanho dois c(min(x),max(x))

    rx # imprime o vetor rx

    lx=length(x) # retorna o tamanho do vetor x em lx

    lx # imprime lx

    x1=seq(from=1, to=10, by=0.5) # gera uma seqncia 1, 1, 5, , 10

    x1 # imprime x1

    xr1=rep(x,times=5) # replica x na ntegra 5 vezes

    xr2=rep(x,each=5) # replica cada elemento de x, 5 vezes

    xr1 # imprime xr1

    xr2 # imprime xr2

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    14/108

    4 Introduo ao Programa R

    Os vetores podem ser utilizados em expresses aritmticas, sendo as operaes

    realizadas elemento a elemento. As operaes elementares so +, , , / e para po-tenciao. Vrios outros operadores aritmticos so disponveis, como por exemplo,

    log, exp, sin, cos, tan e sqrt. Funes como range retornam um vetor de tama-

    nho dois composto pelos valores c(min(x),max(x)) e o operador length(x) retorna

    o tamanho do vetor x.

    Podemos gerar seqncias regulares no programa R facilmente. O comando

    x = 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 aritm-

    ticos dentro de uma expresso. Assim, 2 1 : 5 ir gerar a seqncia 2, 4, 6, 8, 10. Sequeremos uma seqncia que se inicia em 2 (exemplo bvio) e termina em 5 com passo

    igual a 1, devemos usar o comando (2 1) : 5, que ir produzir 2, 3, 4, 5. O comandox1 = seq(from = 1, to = 10, by = 0.5) gera uma seqncia que vai de 1 a 10 utili-

    zando um passo igual a 0, 5. Podemos simplesmente utilizar x1 = seq(1, 10, by = 0.5).

    Se o limite superior da seqncia no for um mltiplo exato do passo, ento o R ir

    produzir uma seqncia que ir finalizar no mltiplo mais prximo, mas inferior, ao

    limite superior. Um outro comando bastante til dizer qual o tamanho da seqn-cia, o valor inicial e o passo da seguinte forma: seq(length = 19,from = 1, by = 0.5).

    Este comando ir produzir a mesma seqncia do programa anterior. Podemos

    ainda utilizar passos negativos para a seqncia, como por exemplo, seq(length=19,

    from=1, by=-0.5), que ir produzir uma seqncia de 1 a 8 com passo 0, 5.Um outro importante comando o rep() que podemos utilizar para replicar

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

  • 8/7/2019 estat stica computacional usando R

    15/108

    1.1 Introduo ao R 5

    importantes devem ser considerados. Vrias outras operaes vetoriais so possveise sero descritas oportunamente, na medida que necessitarmos deles.

    # programa R demonstrando o uso de vetores lgicos

    x = c(2.2, 1.3, 4.7, 5.1, 3.2) # cria um vetor de tamanho 5

    x # imprime o vetor

    y = x > 5.0 # cria um vetor lgico

    y # imprime o vetor

    z = !y # cria um vetor lgico de negao de y

    z # imprime o vetor

    w = x[x=3.0] # cria w2 com elementos de x >= 3 e adicionados de 1

    w2 # imprime o vetor w2

    O R nos possibilita lidar com arranjos de vrias dimenses. Vamos utilizar neste

    material apenas o arranjo mais simples de duas dimenses que so as matrizes. A

    forma mais simples de gerarmos uma matriz utilizar o comando matrix(0, n , p).

    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

    matriz (A) so preenchidos atribuindo, por exemplo, na linha i e coluna j, o valor

    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.

    Alguns operadores aplicados a matriz so executados elemento a elemento. Por

    exemplo, se fizermos A B, teremos uma matriz resultante do produto dos elemen-tos de A com os elementos correspondentes da matriz B. Se desejarmos o produto

    matricial entre duas matrizes, devemos utilizar o operador % %. Assim, A% %Bretorna a matriz resultante da multiplicao matricial de A por B. Os operadores

    nrow(A) e ncol(A) retornam o nmero de linhas e de colunas de A, respectivamente.

    O operador diag depende do argumento. Se diag(x) aplicado a um vetor x, o re-

    sultado uma matriz diagonal cujos elementos so iguais aos elementos do vetor x.

    Se por outro lado utilizarmos diag(A), em que A uma matriz, obteremos um vetor

    cujos elementos so os mesmos da diagonal principal de A. O comando solve(A)

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    16/108

    6 Introduo ao Programa R

    retorna a inversa de A, ou seja, A1. Tambm pode ser utilizado para resolversistemas de equaes lineares do tipo y = Ax, da seguinte forma x = solve(A, y).

    Autovalores e autovetores de uma matriz simtrica A podem ser computados por

    ev = eigen(A). Os autovalores so armazenados no objeto (vetor) ev$values e os

    autovetores correspondentes, no objeto (matriz) ev$vec. Cada coluna desta matriz

    contm um autovetor correspondente ao elemento associado do vetor de autovalores.

    Uma matriz qualquer pode ser decomposta da seguinte forma A = U DVT. Esta

    decomposio conhecida de decomposio do valor singular e a funo R dada

    por udv = svd(A). O resultado uma lista com os objetos u, d e v com significados

    bvios. Uma lista possui objetos de diferentes tipos que podem ser acessados por

    objeto$componente. No exemplo, obtivemos os elementos da matriz diagonal D uti-

    lizando o comando udv$d. Os exemplos apresentados no programa a seguir ilustram

    as funes e os comandos retro mencionados.

    # programa R demonstrando o uso de matrizes e de alguns de seus operadores

    A = matrix(0,2,2) # cria uma matriz 2 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

    B = matrix(c(8,-1,-1,1),2,2) # cria uma matriz 2 2 de outra forma

    B # imprime a matriz

    C=A*B # multiplicao elemento por elemento

    C # imprime a matriz

    nrow(C);ncol(C) # nmero de linhas e colunas de C

    D=A%*%B # multiplicao matricial A por B

    D # imprime a matriz resultante

    v=diag(D) # vetor com a diagonal principal de D

    v # imprime o vetor resultante

    AI=solve(A) # inversa de A

    AI # imprime a matriz resultante

    ev=eigen(A) # autovalores e autovetores de A

    ev$vec # imprime os autovetores

    ev$values # imprime os autovalores

    udv=svd(A) # decomposio do valor singular de A

    udv # imprime todos os resultados da lista: DVS

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    17/108

    1.1 Introduo ao R 7

    Muitos outros objetos existem no R e sero descritos oportunamente, na medida

    que aparecerem nas funes que desenvolveremos posteriormente. Vamos somente

    descrever, para finalizar, 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

    duas variveis X1 e X2 e n = 20 observaes. Devemos criar um arquivo com algum

    editor de texto, onde na primeira linha colocamos a identificao de cada coluna

    (varivel). Neste exemplo vamos criar um arquivo com o nome dados.txt.

    X1 X2

    13.4 14

    14.6 15

    13.5 19

    15.0 23

    14.6 17

    14.0 20

    16.4 2114.8 16

    15.2 27

    15.5 34

    15.2 26

    16.9 28

    14.8 24

    16.2 26

    14.7 23

    14.7 9

    16.5 18

    15.4 28

    15.1 17

    14.2 14

    Para ler estes dados do arquivo e associ-lo a um objeto R do tipo data frame,

    devemos utilizar o comando read.table(). O comando usado da seguinte forma:

    read.table(dados.txt,header=TRUE) . A opo header=TRUEindica ao R que nosso

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    18/108

    8 Introduo ao Programa R

    arquivo possui na primeira linha a identificao das variveis. No exemplo a seguirapresentamos detalhes destes comandos em um pequeno programa R. conveniente

    mudarmos o diretrio de trabalho para o local onde se encontra o arquivo dados.txt

    no menu File\Change dirdo R. Se quisermos editar os dados e atribu-los a um novoobjeto (data frame), devemos utilizar o comando > edit(dados). Um planilha ser

    aberta para que sejam efetuadas as trocas necessrias.

    # programa R demonstrando a leitura de arquivos de dados

    dados=read.table("dados.txt",header=TRUE) # l o arquivo de dados nodata frame

    dadosdados # imprime a matriz

    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 TRUEdeve

    estar em maisculo. Se for digitado header=Trueou header=trueo R acusar um

    erro e o objeto dadosno ser criado. No entanto, para esta opo, o R aceita a

    simplificao header=T.

    1.2 Estruturas de Controle de Programao

    O R um ambiente de programao cujos comandos so expresses. Estas ex-

    presses podem ser organizadas em grupos com uso de chaves {expr_1; expr_2;

    ; expr_m}. O valor do grupo o resultado da ltima expresso avaliada. Os

    comandos do R so separados por ponto e vrgula ou por uma nova linha. O ponto evrgula sempre indica o fim do comando, enquanto uma nova linha pode indicar ou

    no o fim do comando. O comando pode ser associado a um objeto ou no. Quando

    no estiver associado a um objeto, o valor do comando retornado imediatamente.

    Assim, > x = 2 3 e > 2 3 faro a mesma coisa, mas no primeiro caso o resultado armazenado no objeto x e no segundo o seu valor retornado na janela de consoledo

    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.

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    19/108

    1.2 Estruturas de Controle de Programao 9

    # programa R demonstrando comandos agrupados e comandos

    # em mais de uma linha e em apenas uma linha

    x = 1; x=x+10

    x

    x = 1; x+10

    {

    x = 1

    x+10

    }

    z={x=0;y=x+1;x=y+1}

    z

    O if/else um importante comando de controle que avalia condies para realizar

    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 ser

    hierarquizados. O comando formal feito da seguinte forma:> if (expr_1) expr_2 else expr_3

    A expr_1 avaliada e se o resultado lgico for verdadeiro, ento expr_2 exe-

    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 ficar 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 til e algumas comparaes no

    fazem nenhum sentido, a no ser o de exemplificar o comando.

    # programa R demonstrando alguns usos do if/else

    x = 1

    if (x>0.5) y=5 else y=x

    y

    z =c(0.5,-0.5, 4.5,10)

    if (any(z

  • 8/7/2019 estat stica computacional usando R

    20/108

    10 Introduo ao Programa R

    w2

    if (any(z

  • 8/7/2019 estat stica computacional usando R

    21/108

    1.2 Estruturas de Controle de Programao 11

    > repeat expr

    O comando exprdeve ser necessariamente um grupo de comandos (comando

    composto). Um destes comandos ir fazer uma avaliao da condio de parada e

    se esta condio for satisfeita o comando breakser usado para interromper o loop.

    O comando breakpode ser usado para cessar qualquer um dos outros comandos de

    repetio, que , em geral, no normal, mas no caso do repeatconstitu-se na nica

    forma. No programa apresentado a seguir, ilustramos o uso do comando repeat. Este

    programa no faz nada de til e tem apenas a finalidade de ilustrar o comando.

    # programa R demonstrando uso do repeat/break

    i = 1

    repeat {

    print(i)

    i = i + log(i+1)*3

    if (i > 35) break

    }

    O comando while muito parecido com o repeate a sintaxe geral :

    > while (condio) expr

    Sero repetidos os comandos do grupo exprat que a condio de parada seja

    satisfeita. Novamente necessrio frisar que deve-se tomar muito cuidado com a

    condio imposta para evitarmos loopsinfinitos. Nos cdigos seguintes repetimos o

    mesmo programa feito com o comando repeat, porm utilizando o comando while.

    # programa R demonstrando uso do while

    i = 1

    while (i

  • 8/7/2019 estat stica computacional usando R

    22/108

    12 Introduo ao Programa R

    O comando for usado para repetirmos uma determinada seqncia ou grupo

    de operaes em um nmero fixo de vezes. Os passos do loop no R so determinados

    por um vetor ou seqncia do tipo ini : f im. A sintaxe geral do forpara uma dada

    seqncia (seq) e um grupo de comandos (expr) dada por:

    > for (i in seq) expr

    Um exemplo de programa R para ilustrar o comando forde controle de loops

    dado por:

    # programa R demonstrando uso do f or

    x = matrix(0,10,1)

    for(i in 1:10) {

    x[i] = i*2+3-log(i)

    }

    x

    Como j salientamos dentro do grupo de comandos do forou do whilepodemos

    utilizar o breakse alguma condio for satisfeita. Com o breako R ir executar o

    prximo comando, se houver, aps o trmino do loop.

    1.3 Funes no R

    O R nos possibilita criar nossas prprias funes, que so genuinamente funes

    R, sendo armazenadas internamente de uma forma especial e podendo ser utilizadasem novas expresses. Desta forma a linguagem ganha grande poder, convenincia

    e elegncia. O aprendizado em escrever funes teis uma das muitas maneiras

    de fazer com que o uso do R seja confortvel e produtivo. A sintaxe geral de uma

    funo dada por:

    > nome = function(arg_1, arg_2, ...) expr

    em que expr , normalmente, um grupo de comandos e nome o objeto que receber

    a funo. Sua chamada se dar por um comando nome(a1, a2, ...), em que a1, a2,

    etc. so os valores que devero ser passados como argumentos dos objetos (arg_1,

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    23/108

    1.3 Funes no R 13

    arg_2, ...).Vamos apresentar uma funo simples para testar a hiptese H0 : = 0 a

    partir de uma amostra simples de uma distribuio normal. Dois argumentos sero

    utilizados: o vetor de dados x de tamanho n e o valor real hipottico 0. A funo

    calcular o valor da estatstica tc do teste por:

    tc =X 0

    Sn

    . (1.3.1)

    A funo resultante, em linguagem R, apresentada a seguir. Neste exemplo

    uma amostra de tamanho n = 8 foi utilizada para obter o valor da estatstica para

    testar a hiptese H0 : = 5, 0. Podemos observar que o resultado final da funo

    igual ao do ltimo comando executado, ou seja o valor da estatstica e do valor- p,

    por meio de um objeto do tipo lista. Se o comando e return() no for utilizado, a

    funo retornar sempre como resultado, o valor da ltima operao ou comando

    executado. Esta funo utiliza no seu escopo trs outras funes do R (funes

    bsicas do R). As duas primeiras, var() e mean() retornam a varincia e a mdia

    do vetor utilizado como argumento, respectivamente, e a terceira, pt(), retorna a

    probabilidade acumulada da distribuio t de Student para o primeiro argumento da

    funo com graus de liberdade, que o seu segundo argumento.

    # programa R demonstrando uso de uma funo

    tteste = function(x,mu0){

    n = length(x)

    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)

    }

    y=c(3.4,5.6,4.0,6.0,7.8,9.1,3.4,4.5)

    t = tteste(y,5.0)

    t

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    24/108

    14 Introduo ao Programa R

    Os argumentos xe mu0definem as variveis cujos valores sero fornecidos quando

    a funo for chamada. Os nomes destes argumentos podem ser utilizados dentro do

    escopo desta funo e os valores devem ser fornecidos no momento em que funo foi

    chamada, como neste caso. No exemplo, os valores especificados anteriormente para

    os componentes do vetor y e o valor 5, 0 para o valor hipottico foram utilizados como

    argumentos da funo. Podemos utilizar valores defaultpara os argumentos, como

    por exemplo varivel = valor. Poderamos utilizar o default mu0 = 0na declarao

    da funo. Neste caso, se o valor hipottico no for passado, ento a hiptese testada

    ser sempre H0 : = 0.

    Assim, poderamos ter o seguinte programa resultante:

    # programa R demonstrando uso de uma funo

    tteste = function(x,mu0=0){

    n = length(x)

    S2 = var(x)

    xb = mean(x)

    t=list(tc=0,pr=0)

    t$tc = (xb-mu0)/sqrt(S2/n)

    t$pr = 2*(1-pt(abs(t$tc),n-1 ))

    return(t)

    }

    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)

    tc1tc2 = tteste(x=y) # testar H0: mu=0

    tc2

    tc3 = tteste(y,5.0) # testar H0:mu=5

    tc3

    Neste programa demonstramos diferentes formas de invocar a funo. No caso,

    os argumentos que possuem defaultpodem ser omitidos, desde que a ordem de en-

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    25/108

    1.4 Introduo a Estatstica Computacional 15

    trada dos argumentos no seja alterada, ou desde que entremos com os argumentosnomeando-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 da funo e somente aps no encontr-lo localmente, ser buscado o objeto

    global. O S-plus faz exatamente o contrrio, busca preferencialmente os objetos glo-

    bais de mesmo nome dos objetos locais. Iremos dar preferncias s funes neste

    material para executarmos tarefas e resolvermos problemas que eventualmente de-

    frontaremos daqui por diante. O resultado de uma funo pode ser colocado em

    uma lista e o objeto que ir invocar a funo herdar os objetos desta lista. Assim,

    como vimos nesta funo, calculamos, alm do valor da estatstica, o valor-p (pr).

    Se no tivssemos criado a lista t, poderamos ter calculado o valor-p e o valor da

    estatstica separadamente e terminaramos a funo utilizando o seguinte comando:

    > list(tc=t, valor.p=pr). Os objetos tc1, tc2e tc3possuem os componentes tce pr

    como resultados e so chamados, por exemplo, por tc1$tce tc1$pr.

    1.4 Introduo a Estatstica Computacional

    Os mtodos de computao intensiva tm desempenhado um papel cada vez mais

    importante para resolver problemas de diferentes reas da cincia. Vamos apresentar

    algoritmos para gerar variveis aleatrias de diversas distribuies de probabilidade,

    para realizar operaes matriciais, para realizar inferncias utilizando mtodos de

    permutao e bootstrap, etc. Assim, buscamos realizar uma diviso deste material

    em uma seo bsica e em outra aplicada. As tcnicas computacionais so denomina-

    das de estatstica computacional se forem usadas para realizarmos inferncias, para

    gerarmos variveis aleatrias ou para compararmos mtodos e tcnicas estatsticas.

    Vamos explorar mtodos de gerao de variveis aleatrias de diversos modelosprobabilsticos, para manipularmos matrizes, para obtermos quadraturas de fun-

    es de distribuio de diversos modelos probabilsticos e de funes especiais na

    estatstica e finalmente vamos apresentar os mtodos de computao intensiva para

    realizarmos inferncias em diferentes situaes reais. Temos a inteno de criar algo-

    ritmos em linguagem R e posteriormente, quando existirem, apresentar os comandos

    para acessarmos os mesmos algoritmos j implementados no R.

    Temos a inteno de apresentar os mtodos de bootstrap e Monte Carlo, os

    testes de permutao e o procedimento jackknife para realizarmos inferncias nas

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    26/108

    16 Introduo ao Programa R

    mais diferentes situaes reais. Assim, este curso tem basicamente duas intenes:possibilitar ao aluno realizar suas prprias simulaes e permitir que realizem suas

    inferncias de interesse em situaes em que seria altamente complexo o uso da

    inferncia clssica.

    Seja na inferncia freqentista ou na inferncia Bayesiana, os mtodos de simu-

    lao de nmeros aleatrios de diferentes modelos probabilsticos assumem grande

    importncia. Para utilizarmos de uma forma mais eficiente a estatstica computacio-

    nal, um conhecimento mnimo de simulao de variveis aleatrias uma necessidade

    que no deve ser ignorada. Vamos dar grande nfase a este assunto, sem descui-

    dar 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) [10], com

    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

    tipo de procedimento pode ter um custo baixo, evitar prejuzos por no utilizarmos

    procedimentos inadequados e otimizar a deciso e o funcionamento do sistema real.

    Precaues contra erros devem ser tomadas quando realizamos algum tipo de

    simulao. Podemos enumerar:

    1. escolha inadequada das distribuies;

    2. simplificao inadequada da realidade; e

    3. erros de implementao.

    Devemos fazer o sistema simulado operar nas condies do sistema real e verificar

    por meio de alguns testes se os resultados esto de acordo com o que se observa no

    sistema real. A este processo denominamos de validao. Ento, a simulao umatcnica que usamos para a soluo de problemas. Se a soluo alcanada for mais

    rpida, de menor custo e de fcil interpretao em relao a outro mtodo qualquer,

    o uso de simulao justificvel.

    1.5 Exerccios

    1.5.1 Criar no R os vetores AT= [1, 2, 4, 5] e BT= [3, 6, 8, 9] e concaten-los for-

    mando um nico vetor. Obter o vetor C= 2A + B e o vetor D = ATB. Criar

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    27/108

    1.5 Exerccios 17

    uma seqncia cujo valor inicial igual a 2 e o valor final 30 e cujo passo igual a 4. Replicar cada valor da seqencia 3 vezes de duas formas diferentes

    (valores replicados ficam agregados e a seqncia toda se replica sem que os

    valores iguais fiquem agregados).

    1.5.2 Selecionar o subvetor de xT= [4, 3, 5, 7, 9, 10] cujos elementos so menores ou

    iguais a 5.

    1.5.3 Criar a matriz

    A =

    10 11 2

    e determinar os autovalores e a decomposio espectral de A.

    1.5.4 Construir uma funo para verificar quantos elementos de um vetor de di-

    menso n so menores ou iguais a 0. Utilize as estruturas de repeties for,

    whilee repeatpara realizar tal tarefa (cada uma destas estruturas dever ser

    implementada em uma diferente funo). Existe algum procedimento mais efi-

    ciente para gerarmos tal funo sem utilizar estruturas de repeties? Se sim,

    implement-lo.

    1.5.5 Implementar uma funo R para realizar o teste t de Student para duas amos-

    tras independentes.

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    28/108

    18 Introduo ao Programa R

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    29/108

    Captulo 2

    Gerao de Variveis Uniformes

    Neste captulo vamos considerar a gerao de nmeros aleatrios para o mo-

    delo probabilstico uniforme. A partir do modelo uniforme podemos gerar variveis

    aleatrias de qualquer outro modelo probabilstico. Para gerar realizaes de uma

    distribuio uniforme, precisamos gerar nmeros aleatrios. Isso no pode ser reali-

    zado por mquinas. Na verdade qualquer seqncia produzida por uma mquina

    na verdade uma seqncia previsvel. Dessa forma, a denominamos de seqncia de

    nmeros pseudo-aleatrios.

    Uma seqncia de nmeros ser considerada aleatria do ponto de vista compu-

    tacional se o programa que a gerar for diferente e estatsticamente no correlacionado

    com o programa que a usar. Assim, dois geradores de nmeros aleatrios deveriam

    produzir os mesmos resultados nas suas aplicaes. Se isso no ocorrer, um deles no

    pode ser considerado um bom gerador de nmeros aleatrios (Press et al., 1992 [12]).

    Os conceitos de nmeros uniformes e nmeros aleatrios podem ser muitas vezesconfundidos. Nmeros uniformes so aqueles que variam aleatoriamente em uma

    faixa determinada de valores com probabilidade constante. No entanto, devemos di-

    ferenciar nmeros aleatrios uniformes de outros tipos de nmeros aleatrios, como

    por exemplo, nmeros aleatrios normais ou gaussianos. Estes outros tipos so geral-

    mente provenientes de transformaes realizadas nos nmeros aleatrios uniformes.

    Ento, uma fonte confivel para gerar nmeros aleatrios uniformes determina o su-

    cesso de mtodos estocsticos de inferncia e de todo processo de simulao Monte

    Carlo.

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    30/108

    20 Gerao de Variveis Uniformes

    2.1 Nmeros Aleatrios Uniformes

    Nmeros uniformes aleatrios so aqueles que, a princpio, se situam dentro de

    uma determinada amplitude, geralmente entre 0 e 1, para os quais no podemos

    produzir uma seqncia previsvel de valores. Em vrios programas estes nmeros

    so gerados utilizando o comando random ou comandos similares. Em pascal, por

    exemplo, se este comando for utilizado com o argumento n, random(n), nmeros

    aleatrios inteiros Udo intervalo 0 U n 1 so gerados e se o argumento n nofor usado, os nmeros gerados so valores aleatrios reais do intervalo [0;1[.

    Em geral, os programas utilizam o mtodo da congruncia. Sejam os nmerosuniformes inteiros U1, U2, U3, . . . entre 0 e m 1, em que m representa um grandenmero inteiro. Podemos gerar estes nmeros utilizando o mtodo da congruncia

    por meio da relao recursiva:

    Ui+1 = (aUi + c) mod m (2.1.1)

    em que m chamado de mdulo, a e c so inteiros positivos denominados de multipli-

    cador e incremento, respectivamente. O operador mod retorna o resto da diviso

    do argumento (aUi + c) por m. A seqncia recorrente (2.1.1) se repete em um pe-rodo que no maior que m, por razes bvias. Se a, c e m so adequadamente

    escolhidos, a seqncia tem tamanho mximo igual a m. A escolha do valor inicial

    U0 tambm muito importante. O valor do nmero uniforme correspondente no

    intervalo de 0 a 1 dado por Ui+1/m, que sempre menor que 1 mas que pode ser

    igual a zero.

    Vamos apresentar um exemplo didtico para ilustrar o gerador de nmeros alea-

    trios. Sejam U0 = a = c = 7 e m = 10, logo,

    U1 = (7 7 + 7) mod 10 = 56 mod 10 = 6U2 = (7 6 + 7) mod 10 = 49 mod 10 = 9

    e assim sucessivamente. Obtemos a seqncia de nmeros aleatrios:

    {7, 6, 9, 0, 7, 6, 9, 0, 7, 6, 9, }

    e verificamos que o perodo igual a 4 {7, 6, 9, 0, }, que menor do que m = 10.Este mtodo tem a desvantagem de ser correlacionado em srie. Se m, a ou c

    no forem cuidadosamente escolhidos a correlao pode comprometer a seqncia

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    31/108

    2.1 Nmeros Aleatrios Uniformes 21

    gerada em srie. Por outro lado, o mtodo tem a vantagem de ser muito rpido.Podemos perceber que a cada chamada do mtodo, somente alguns poucos clculos

    so executados. Escolhemos, em geral, o valor de m pelo maior inteiro que pode ser

    representado pela mquina, qual seja, 232. Um exemplo que foi utilizado por muitos

    anos nos computadores IBM mainframe, que representam uma pssima escolha

    a = 65.539 e m = 231.

    A correlao serial no o nico problema desse mtodo. Os bits de maior ordem

    so mais aleatrios do que os bits de menor ordem (mais significantes). Devemos

    gerar inteiros entre 1 e 20 por j = 1 + int(20

    random(semente)), ao invs de

    usar o mtodo menos acurado j = 1+ mod (int(1000000 random(semente)), 20),que usa bits de menor ordem. Existem fortes evidncias, empricas e tericas, que o

    mtodo da congruncia

    Ui+1 = aUi mod m (2.1.2)

    to bom quanto o mtodo da congruncia com c = 0, se o mdulo m e o multiplica-dor a forem escolhidos com cuidado (Press et al., 1992[12]). Park e Miller (1988)[11]

    propuseram um gerador padro mnimo 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

    a qual foi submetido e tem sido usado como padro para comparar e julgar outros

    geradores. Um problema que surge e que devemos contornar que no possvel

    implementarmos diretamente em uma linguagem de alto-nvel a equao (2.1.2) com

    as constantes de (2.1.3), pois o produto de a e Ui excede, em geral, o limite mximo

    de 32 bits para inteiros. Podemos usar um truque devido a Schrage (1979)[14] para

    multiplicar inteiros de 32-bits e aplicar o operador de mdulo e que permite umaportabilidade para ser implementado em praticamente todas as linguagens e em

    todas as mquinas. O algoritmo de Schrage baseia-se na fatorao aproximada de m

    dada por:

    m = aq + r; i.e., q = m/a; r = m mod a (2.1.4)

    em que z denota a parte inteira do nmero z utilizado como argumento. Para umnmero Ui entre 1 e m

    1 e para r pequeno, especificamente para r < q, Schrage

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    32/108

    22 Gerao de Variveis Uniformes

    (1979) [14] mostraram que ambos a(Ui mod q) e rUi/q pertencem ao intervalo0 m 1 e que

    aUi mod m =

    a(Ui mod q) rUi/q se maior que 0a(Ui mod q) rUi/q + m caso contrrio

    (2.1.5)

    Computacionalmente observamos que a relao:

    a(Ui mod q) = a(Ui qUi/q)

    se verifica. 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 divi-

    dendo para operaes com inteiros. A quantidade Ui mod q = Ui(Ui div q)qpode ser obtida em R simplesmente com Ui %% q. Atribumos o resultado a uma

    varivel qualquer definida como inteiro. Para aplicarmos o algoritmo de Schrage s

    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 mnimo de nmeros alea-

    trios:

    # gerador padro mnimo de nmeros aleatrios adaptado de Park and

    # Miller. Retorna desvios aleatrios uniformes entre 0 e 1. Fazer

    # sem igual a qualquer valor inteiro (no pode ser o improvvel

    # valor mask) para iniciar a seqncia; sem no pode ser

    # alterado entre sucessivas chamadas da seqncia - se sem for

    # zero ou negativo, um valor dependente do valor do relgio do sistema no

    # momento da chamada usado como semente. Constantes

    # usadas a = 75

    = 16.807, m = 231

    1 = 2.147.483.647

    # e c = 0

    gna0

  • 8/7/2019 estat stica computacional usando R

    33/108

    2.1 Nmeros Aleatrios Uniformes 23

    if (sem

  • 8/7/2019 estat stica computacional usando R

    34/108

    24 Gerao de Variveis Uniformes

    valor da semente definido pelo usurio e declarado na funo como parmetrode referncia. Isso significa que a varivel do programa que chama a funo e que

    passada como semente deve ser atualizada com o novo valor modificado em gna0.

    Se o seu valor inicial for zero ou negativo, a funo atribui um inteiro dependente

    da hora do sistema no momento da chamada; c) o sinal # indica comentrio no

    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

    e o nmero aleatrio ran0 gerado; e) a funo tem dependncia do pacote R.utils,

    que por sua vez depende dos pacotes R.methodsS3e R.oo. Essa dependncia se

    caracteriza por usar uma funo para capturar a hora do sistema.

    A rotina iniciada com os valores de n e da semente fornecidos pelo usurio.

    Se a semente for nula ou negativa, atribumos um novo valor dependente do relgio

    do sistema no momento da chamada usando funes do R para isso. A partir deste

    ponto o programa deve chamar reiteradas vezes a funo gna0, que retorna o valor

    do nmero aleatrio 0 e 1 utilizando o algoritmo descrito anteriormente, at que a

    seqncia requerida pelo usurio seja completada. Nas sucessivas chamadas desta

    funo, o valor da semente sempre igual ao valor do ltimo passo, uma vez que

    sem da ltima chamada deve ser passada como parmetro de referncia para afuno gna0 a partir do bloco do programa que a chamou.

    O perodo de gna0 da ordem de 231 2, 15109, ou seja, a seqncia completa superior a 2 bilhes de nmeros aleatrios. Assim, podemos utilizar gna0 para a

    maioria dos propsitos prticos. Evitamos o valor zero na funo gna0 devido ao

    fato de todos os valores da seqncia serem nulos para um valor inicial de semente

    igual a zero. No entanto, para sementes positivas nunca ocorrer o valor 0 na gerao

    da seqncia.

    Como j salientamos o gerador padro mnimo de nmeros aleatrios possui duaslimitaes bsicas, quais sejam, seqncia curta e correlao serial. Assim, como

    existem mtodos para eliminar a correlao serial e que aumentam o perodo da

    seqncia, recomendamos que sejam adotados. Claro que a funo apresentada teve

    por objetivo ilustrar como podemos programar nossas prprias funes para gerar-

    mos nmeros aleatrios uniformes. O R, no entanto, possui seu prprio gerador de

    nmeros uniformes, que veremos na seqncia. Um dos melhores e mais interessantes

    geradores de nmeros aleatrios o Mersenne Twister(MT). Mersenne Twister um

    gerador de nmeros pseudo-aleatrios desenvolvido por Makoto Matsumoto e Takuji

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    35/108

    2.2 Nmeros Aleatrios Uniformes no R 25

    Nishimura nos anos de 1996 e 1997 [8]. MT possui os seguintes mritos segundo seusdesenvolvedores:

    1. foi desenvolvido para eliminar as falhas dos diferentes geradores existentes;

    2. possui a vantagem de apresentar o maior perodo e maior ordem de eqi-

    distribuio do que de qualquer outro mtodo implementado. Ele fornece um

    perodo que da ordem de 219.9371 4, 3154106001, e uma equidistribuio623-dimensional;

    3. um dos mais rpido geradores existentes, embora complexo;

    4. faz uso de forma muito eficiente da memria.

    Existem muitas verses implementadas deste algoritmo, inclusive em Fortran e

    C e que esto disponveis na internet. Como o R nos possibilita incorporar funes

    escritas nestas linguagem, podemos utilizar este algoritmo. Felizmente, o R j possui

    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

    de aulas, no descreveremos este tipo de procedimento para incorporaes de funes

    escritas em outras linguagens.

    2.2 Nmeros Aleatrios Uniformes no R

    No SAS o comando usado para gerarmos nmeros uniformes aleatrios Ra-

    nuni(semente). Neste caso devemos usar o argumento semente para especificar

    uma seqncia reproduzvel de nmeros aleatrios, sendo que seu valor deve ser um

    inteiro. Se o valor 0 for especificado como argumento, o programa escolher auto-

    maticamente um valor para semente que depende da hora e da data do sistema. Noprograma R podemos gerar nmeros aleatrios uniformes contnuos utilizando uma

    funo pr-programada. Os nmeros aleatrios uniformes so gerados pelo comando

    runif(n, min, max), em que n o tamanho da seqncia, min e max so ar-

    gumentos que delimitam o valor mnimo e mximo da seqncia a ser gerada. O

    controle da semente para se gerar uma seqncia reproduzvel de nmeros unifor-

    mes dada pelo comando set.seed(semente), onde o argumento semente deve ser

    um nmero inteiro. O R automaticamente determina a cada chamada uma nova

    semente. Conseguimos gerar diferentes seqncias em cada chamada do comando

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    36/108

    26 Gerao de Variveis Uniformes

    runif(n, min, max), sem nos preocuparmos com a semente aleatria. Devemosreiterar que o programa R utiliza por defaulto algoritmo Mersenne Twister.

    No programa apresentado a seguir ilustramos como podemos gerar n nmeros

    aleatrios uniformes entre 0 e 1 utilizando a funo runifdo R. O programa resultante

    compacto, simples e eficiente.

    # programa R demonstrando o uso de gerao de n nmeros aleatrios uniformes

    # por meio do comando runif

    n

  • 8/7/2019 estat stica computacional usando R

    37/108

    2.3 Exerccios 27

    tempo1.seg

  • 8/7/2019 estat stica computacional usando R

    38/108

    28 Gerao de Variveis Uniformes

    em relao aos novos multiplicador q e resto r da fatorao de m?

    2.3.4 Comparar a velocidade de processamento das funes apresentadas (runife

    rna0) nesse captulo para gerar 10.000.000 de nmeros aleatrios uniformes

    entre 0 e 1. Como voc poderia implementar um teste estatstico simples para

    avaliar a aleatoreidade da seqncia de nmeros uniformes gerados por esses

    algoritmos? Implementar sua idia.

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    39/108

  • 8/7/2019 estat stica computacional usando R

    40/108

    30 Gerao de Variveis No-Uniformes

    probabilidade e a sua inversa analiticamente. Para os modelos mais complexos, em-bora o mtodo determinado pela lei fundamental de transformao de probabilidades

    seja adequado, apresentaremos apenas mtodos alternativos, uma vez que este, em

    geral, pouco eficiente em relao ao tempo gasto para gerarmos cada varivel ale-

    atria. Isso se deve ao fato de termos que obter a funo inversa numericamente da

    funo de distribuio de probabilidade dos modelos probabilsticos mais complexos.

    3.2 Mtodos Gerais para Gerar Variveis Aleatrias

    Podemos obter variveis aleatrias de qualquer distribuio de probabilidade a

    partir de nmeros aleatrios uniformes. Para isso um importante teorema pode ser

    utilizado: o teorema fundamental da transformao de probabilidades.

    Teorema 3.1 (Teorema fundamental da transformao de probabilidades). Sejam

    Uuma varivel uniformeU(0, 1) eXuma varivel aleatria com densidadefe

    funo de distribuio Fcontnua e invertvel, ento X= F1(U) possui densidade

    f. Sendo F1 a funo inversa da funo de distribuio F.

    Demonstrao: Seja Xuma varivel aleatria com funo de distribuio Fe

    funo de densidade f. Se u = F(x), ento du/dx = F(x) = f(x) e, portanto,

    dx/du = 1/f(x). Assim, a varivel aleatria U= F(X) tem densidade g dada por:

    g(u) = f(x)

    dxdu = f(x)f(x) = 1, 0 < u < 1

    e g(u) = 0 para outros valores de u. Em outras palavras a varivel aleatria U=

    F(X) distribui-se uniformemente em (0, 1), uma vez que F uma funo montona

    crescente e contnua, com funo inversa F1. Resolvendo para X, temos que:

    X= F1(U). Logo,

    G(u) = P(U u) = P[F(X) u] = P[X F1(u)] = F[F1(u)] = u,

    e conseqentemente, a funo de densidade de U g(u) = G(u) = 1. Isto estabelece

    o resultado que almejamos de outra forma. Assim, a prova fica completa.

    Para variveis aleatrias discretas, devemos modificar o teorema para podermos

    contemplar funes de distribuies Fem escada, como so as funes de distribuio

    de probabilidades associadas a essas variveis aleatrias.

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    41/108

    3.2 Mtodos Gerais para Gerar Variveis Aleatrias 31

    Na Figura 3.1 representamos como podemos gerar uma varivel aleatria Xcomdensidade fe funo de distribuio F. Assim, basta gerarmos um nmero uniforme

    u0 e invertermos a funo de distribuio Fneste ponto. Computacionalmente a di-

    ficuldade obtermos analiticamente uma expresso para a funo F1 para muitos

    modelos probabilsticos. Em geral, essas expresses no existem e mtodos numricos

    so requeridos para inverter a funo de distribuio. Neste captulo vamos apresen-

    tar este mtodo para a distribuio exponencial e nos prximos captulos estudaremos

    os mtodos numricos de obteno das funes de distribuies de inmeros modelos

    probabilsticos.

    -2.4 -1.2 0.0 1.2 2.4

    0.2

    0.4

    0.6

    0.8

    1.0

    x

    u0

    x0

    u=F(x)

    Figura 3.1: Ilustrao do teorema fundamental da transformao de probabilidades

    para gerar uma varivel aleatria Xcom densidade f(x) = F(x). Apartir de um nmero aleatrio uniforme u0 a funo de distribuio

    invertida neste ponto para se obter x0, com densidade f(x).

    Um outro mtodo bastante geral que utilizaremos denominado de mtodo da

    amostragem por rejeio. Esse mtodo tem um forte apelo geomtrico. Procura-

    remos, a princpio, descrever esse mtodo de uma forma bastante geral. Posterior-

    mente, aplicaremos este mtodo para gerarmos variveis aleatrias de alguns modelos

    probabilstico. A grande vantagem deste mtodo contempla o fato de no precisar-

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    42/108

    32 Gerao de Variveis No-Uniformes

    mos obter a funo de distribuio de probabilidade e nem a sua inversa. Estasestratgias s podem ser aplicadas em muitos dos modelos probabilsticos existentes,

    se utilizarmos mtodos numricos iterativos. Seja f(x) a densidade para a qual que-

    remos gerar uma amostra aleatria. A rea sob a curva para um intervalo qualquer

    de x corresponde probabilidade de gerar um valor x nesse intervalo. Se pudssemos

    gerar um ponto em duas dimenses, digamos (X, Y), com distribuio uniforme sob

    a rea, ento a coordenada Xteria a distribuio desejada.

    Para realizarmos de uma forma eficiente a gerao de variveis aleatrias com

    densidade f(x), evitando as complicaes numricas mencionadas anteriormente,

    poderamos definir uma funo qualquer g(x). Essa funo tem que ter algumas pro-

    priedades especiais para sua especificao. Deve possuir rea finita e ter para todos

    os valores x densidade g(x) superior a f(x). Essa funo denominada de funo

    de comparao. Outra caracterstica importante que g(x) deve ter possuir funo

    de distribuio G(x) analiticamente computvel e invertvel, ou seja, x = G1(u).

    Como a funo g(x) no necessariamente uma densidade, vamos denominar a rea

    sob essa curva no intervalo para x de interesse por A = g(x)dx. Como G

    1

    conhecida, podemos gerar pontos uniformes (x, y) que pertencem rea sob a curva

    g(x) facilmente. Para isso basta gerarmos um valor de uma varivel aleatria uni-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, sob pena de gerarmos um ponto que no est sob a curva g(x). Assim, calcu-

    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)

    uniforme sob a curva g(x). A dificuldade deste mtodo justamente estabelecer essa

    funo g(x) com as propriedades exigidas.Vamos agora traar as curvas correspondentes a g(x) e f(x) no mesmo grfico.

    Se o ponto uniforme (x0, y0) est na rea sob a curva f(x), ou seja se y0 f(x0),ento aceitamos x0 como um valor vlido de f(x); se por outro lado o ponto estiver

    na regio entre as densidades f(x) e g(x), ou seja se f(x0) < y0 g(x0), entorejeitamos x0. Uma forma alternativa de apresentarmos esse critrio tomarmos y0

    de uma distribuio U(0, 1) e aceitarmos ou rejeitarmos x0 se y0 f(x0)/g(x0) ou sey0 > f(x0)/g(x0), respectivamente. Ilustramos esse mtodo na Figura (3.2), sendo

    que a A representa a rea total sob a curva g(x).

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    43/108

    3.2 Mtodos Gerais para Gerar Variveis Aleatrias 33

    0

    Rejeitar x0

    g(x0)

    f(x)

    A

    x0

    g(x)

    Aceitar x0

    G(x)

    u1

    0

    u2

    Figura 3.2: Mtodo da rejeio para gerar um valor x0 da varivel aleatria Xcom

    densidade f(x) que menor do que g(x) para todo x.

    Vamos ilustrar o primeiro mtodo e salientar que o segundo mtodo o que

    ocorre na maioria dos casos de gerao de variveis aleatrias. A exponencial uma

    distribuio de probabilidade em que facilmente podemos aplicar o teorema 3.1 para

    gerarmos amostras aleatrias. Assim, optamos por iniciar o processo de gerao

    de nmeros aleatrios nesta distribuio, uma vez que facilmente podemos obter a

    funo de distribuio e a sua inversa. Seja Xuma varivel aleatria cuja densidade

    apresentamos por:

    f(x) = ex (3.2.1)

    em que > 0 o parmetro da distribuio exponencial e x > 0.

    A funo de distribuio exponencial dada por:

    F(x) = x

    0

    etdt

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    44/108

    34 Gerao de Variveis No-Uniformes

    F(x) = 1 ex. (3.2.2)

    E a funo de distribuio inversa x = F1(u) dada por:

    x = F1(u) = ln(1 u)

    (3.2.3)

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

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

    x = ln(u)

    (3.2.4)

    O algoritmo R para gerarmos variveis aleatrias exponenciais dado por:

    # programa R demonstrando a gerao de n realizaes de variveis aleatrias exponenciais

    # com parmetro lamb, utilizamos o algoritmo runifpara

    # gerarmos nmeros aleatrios uniformes

    rexpon = function(n,lamb)

    {

    u = runif(n,0,1) # gera o vetor u (U(0,1))

    x = -log(u)/lamb # gera o vetor x com distrib. exp.

    x # retorna o vetor x

    }

    Podemos utilizar a funo pr-existente do R para realizarmos a mesma tarefa

    denominada rexp. Simplesmente digitamos rexp(n,lamb) e teremos uma amostra

    aleatria de tamanho n de uma exponencial com parmetro = lamb. O R faz com

    que a estatstica computacional seja ainda menos penosa e portanto acessvel para a

    maioria dos pesquisadores.

    Um mtodo muito utilizado em matemtica, fsica ou estatstica para gerar-

    mos dados de uma densidade para a qual difcil obter amostras diretamente

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    45/108

    3.2 Mtodos Gerais para Gerar Variveis Aleatrias 35

    o Metropolis-Hastings. Este algoritmo um caso particular do mtodo da rejeio.Na inferncia bayesiana possvel utilizar este mtodo na simulao Monte Carlo

    em cadeias de Markovpara aproximar distribuies, gerar o histograma, ou calcular

    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

    algoritmo para uma situao particular, no primeiro caso, e para uma situao geral,

    no segundo.

    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

    Markovem que a realizao da varivel aleatria no estgio t + 1, (xt+1), depende

    apenas da realizao no estgio prvio t (xt). O algoritmo usa uma funo auxiliar,

    denominada funo candidata, q(x; xt), que depende do estado corrente xt, para

    gerar o novo valor x, candidato a ser o valor do prximo estgio xt+1. Assim, se o

    valor x poder ser aceito ou rejeitado de acordo com o seguinte critrio:

    u < min

    1,

    f(x)q(xt; x)f(xt)q(x; xt)

    ento, xt+1 = x

    u min

    1,f(x)q(xt; x)f(xt)q(x; xt)

    ento, xt+1 = xt

    (3.2.5)

    A funo de densidade candidata q(x; xt) deve ser escolhida a partir de algumas

    caractersticas especficas, como possuir o mesmo domnio da distribuio alvo, em-

    bora no haja necessidade de ser um envelope, q(x) > f(x), para todos os valores

    da varivel aleatria, alm de possuir funo de distribuio e inversa da funo de

    distribuio conhecidas ou algum mtodo simples de gerar observaes. Assim, a

    funo candidata, para fins de ilustrao, poderia ser a distribuio normal centrada

    no ponto xt e com varincia 2, ou seja,

    q(x; xt) N(xt, 2),

    que neste caso representa o algoritmo denominado passeio aleatrio.

    Esta funo candidata nos permitiria gerar realizaes da varivel aleatria em

    torno do estado atual xt com varincia 2. natural admitirmos que este processo

    possa ser generalizado para dimenses maiores do que 1. Na sua forma original,

    o algoritmo Metropolis requeria que a funo candidata fosse simtrica, ou seja,

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    46/108

    36 Gerao de Variveis No-Uniformes

    q(x; xt) = q(xt; x), mas, a partir do trabalho de Hastings, esta restrio foi elimi-nada. Alm do mais, permitido que a funo q(x; xt) no dependa de xt, o que

    denominado de algoritmo de cadeias de Markovindependentes para o Metropolis-

    Hastings, que difere do exemplo anterior, onde se ilustrou o algoritmo passeio aleat-

    rio. Este algoritmo muito eficiente se a escolha da funo candidata for adequada,

    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 torno

    de 60%. Se o seu valor for muito alto, a amostra caminhar lentamente em torno do

    espao e convergir lentamente para f(x); se por outro lado, a aceitao for muito

    baixa, a funo candidata est gerando valores em uma regio de densidade 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 centrada

    em x1 e, no passo seguinte, est centrada em x2.

    f(x)

    q(x; x1) q(x; x2)

    x1 x2 x

    Figura 3.3: Ilustrao grfica do algoritmo Metropolis-Hastings, apresentando a fun-

    o de transio q(x; xt) e a transio de x1 para x2 por meio do algo-

    ritmo de passeio aleatrio.

    No exemplo a seguir ilustramos a gerao de realizaes de variveis normais com

    mdia e varincia 2 utilizando o algoritmo Metropolis-Hastings. Denominamos

    o algoritmo de MH_Norme utilizamos a funo auxiliar rtdfpara gerar realizaes

    de variveis t da distribuio t com mdia media, parmetro de disperso sigma2

    e graus de liberdade df. Da mesma forma utilizamos a funo dtdfpara calcular-

    mos a densidade da distribuio t, com os parmetros recm definidos. A funo

    candidata escolhida foi a t e, importante que se enfatize que utilizamos inclusive

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    47/108

    3.2 Mtodos Gerais para Gerar Variveis Aleatrias 37

    recursos redundantes, embora no entraremos neste mrito, uma vez que o objetivo ilustrarmos o uso do algoritmo Metropolis-Hastings. Devemos tambm enfatizar

    que o R capaz de gerar amostras aleatrias da normal diretamente por algoritmos

    mais eficiente que este. Novamente reiteramos, que escolhemos o modelo normal pela

    familiaridade que possumos com este modelo e com seus resultados e para que hou-

    vesse uma maior facilidade de ilustrarmos as caractersticas do algoritmo. Neste caso

    iniciamos com o valor inicial igual ao parmetro e o valor candidato da segunda

    realizao geramos de uma t com mdia igual ao valor anterior (inicial no segundo

    passo) e parmetro de disperso igual a varincia da normal 2. Escolhemos uma t

    com = 3 graus de liberdade como funo candidata. Em geral, como j dissemos, o

    ponto crtico na utilizao deste algoritmo justamente a determinao apropriada

    da funo candidata.

    # retorna uma v.a. de uma t univariada com df graus de liberdade, e

    # parmetros media e sigma2

    rtdf = function (n, media=0, sigma2 = 1, df = 1)

    {

    return( (rmvnorm(n, mean=c(0),sigma=as.matrix(sigma2,1,1))/sqrt(rchisq(n, df)/df))

    + media)}

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

    {

    dt = gamma((df+1)/2)/((pi*df)**0.5*gamma(df)*sigma2**0.5)*(1+

    (x-media)**2/(df*sigma2))**(-(df+1)/2)

    }

    # Funo para exemplificar o uso do Metropolis-Hastings

    # Este exemplo pretende mostrar a gerao de normais (mu=0, sig=1) com

    # 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 = x0

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    48/108

    38 Gerao de Variveis No-Uniformes

    for (i in 2:n)

    {

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

    if (u

  • 8/7/2019 estat stica computacional usando R

    49/108

    3.3 Variveis Aleatrias de Algumas Distribuies Importantes 39

    nfase a outros processos. Para utilizarmos o mesmo mtodo anterior teramos queimplementar uma funo parecida com rexpon, digamos rnormal. No lugar do

    comando x = -log(u)/lamb deveramos escrever x= invnorm(u)* + , sendo

    que invnorm(u) a funo de distribuio normal padro inversa. A distribuio

    normal padro dentro da famlia normal, definida pelos seus parmetros e 2,

    aquela com mdia nula e varincia unitria. Esta densidade ser referenciada por

    N(0, 1). Essa deve ser uma funo externa escrita pelo usurio. Os argumentos e

    da funo so a mdia e o desvio padro da distribuio normal que pretendemos

    gerar. A funo de densidade da normal :

    f(x) =1

    22e

    (x)2

    22 (3.3.1)

    Nenhuma outra funo utilizando o teorema 3.1 ser novamente apresentada, uma

    vez que podemos facilmente adaptar as funes rexpon se tivermos um eficiente

    algoritmo de inverso da funo de distribuio do modelo probabilstico alvo. A

    dificuldade deste mtodo a necessidade de uma enorme quantidade de clculo para

    a maioria das densidades. Isso pode tornar ineficiente o algoritmo, pois o tempo deprocessamento elevado.

    Podemos ainda aproveitar a relao entre algumas funes de distribuies para

    gerarmos variveis aleatrias de outras distribuies. Por exemplo se X normal

    com densidade (3.3.1), N(, 2), podemos gerar Y= eX . Sabemos que fazendo tal

    transformao Yter distribuio log-normal, cuja densidade com parmetros de

    locao () e escala () :

    f(y) =1

    y

    2e 12

    ln(y)

    2y > 0. (3.3.2)

    Um importante mtodo usado para gerar dados da distribuio normal o de

    Box-Mller, que baseado na generalizao do mtodo da transformao de pro-

    babilidades para mais de uma dimenso. Para apresentarmos esse mtodo, vamos

    considerar p variveis aleatrias X1, X2, . . . , X p com funo de densidade conjunta

    f(x1, x2, . . . , xp) e p variveis Y1, Y2, . . . , Y p, funes de todos os Xs, ento a funo

    de densidade conjunta dos Ys :

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    50/108

    40 Gerao de Variveis No-Uniformes

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

    x1y1

    . . . x1yp...

    . . ....

    xpy1

    . . . xpyp

    dx1 . . . d xp (3.3.3)

    em que J= |()/()| o Jacobiano da transformao dos Xs em relao aos Ys.Vamos considerar a transformao (3.3.3) para gerar dados Ynormais com densi-

    dade dadas por (3.3.1), devidamente adaptada para acomodar Ye no X. Para apli-

    carmos a transformao de Box-Mller, vamos considerar duas variveis aleatrias

    uniformes entre 0 e 1, representados por X1 e X2 e duas funes delas, representadaspor 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 1

    2(y21+y

    22)

    (3.3.5)

    x2 =1

    2arctan

    y2y1

    Sabendo que a seguinte derivada dk arctan(g)/dx dada por k(dg/dx)/(1 + g2),

    em que g uma funo de X, ento o Jacobiano da transformao :

    x1y1 x1y2x2y1

    x2y2

    =

    y1e0,5(y21+y

    22)

    y2e0,5(y21+y

    22)

    y22y21

    1+

    y22y21

    12y1

    1+

    y22y21

    = 12

    e0,5(y21+y

    22)

    (3.3.6)

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

    f(y1, y2) =

    12

    ey212

    12

    ey222

    . (3.3.7)

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    51/108

    3.3 Variveis Aleatrias de Algumas Distribuies Importantes 41

    Desde que a densidade conjunta de Y1 e Y2 o produto de duas normais in-dependentes, podemos afirmar que as duas variveis geradas so normais padro

    independentes, como pode ser visto em Johnson e Wichern (1998)[5].

    Assim, podemos usar esse resultado para gerarmos variveis aleatrias normais.

    A dificuldade, no entanto, apenas computacional. A utilizao de funes trigo-

    nomtricas como seno e co-seno pode limitar a performance do algoritmo gerado

    tornando-o lento. Um truque apresentado por Press et al. (1992)[12] bastante inte-

    ressante para evitarmos diretamente o uso de funes trigonomtricas. Esse truque

    representa uma melhoria do algoritmo de Box-Mller e devido a Marsaglia e Bray

    (1964)[7].

    Ao invs de considerarmos os valores das variveis aleatrias uniformes x1 e x2 de

    um quadrado de lado igual a 1 (quadrado unitrio), tomarmos u1 e u2 como coorde-

    nadas de um ponto aleatrio em um crculo unitrio (de raio igual a 1). A soma de

    seus quadrados R2 = u21+u22 um valor de uma varivel aleatria uniforme que pode

    ser usada como x1. J o ngulo que o ponto (u1, u2) determina em relao ao eixo

    u1 pode ser usado como um ngulo aleatrio dado por = 2x2. Podemos apontar

    que a vantagem da no utilizao direta da expresso (3.3.4) refere-se ao fato do

    co-seno e do seno poderem ser obtidos alternativamente por: cos(2x2) = u1/R2e sin (2x2) = u2/

    R2. Evitamos assim as chamadas de funes trigonomtricas.

    Na Figura 3.4 ilustramos os conceitos apresentados e denominamos o ngulo que o

    ponto (u1, u2) determina em relao ao eixo u1 por .

    Agora podemos apresentar o funo BoxMullerpara gerar dados de uma normal

    utilizando o algoritmo de Box-Mller. Essa funo utiliza a funo Polarpara gerar

    dois valores aleatrios, de variveis aleatrias independentes normais padro Y1 e Y2.

    A funo BoxMuller:

    # funo BoxMullerretorna uma amostra de tamanho n de

    # uma distribuio normal com mdia e varincia 2

    # utilizando o mtodo de Box-Mller modificado (polar)

    BoxMuller = function(n,mu=0,sigma=1)

    {

    # Polar a funo que retorna dois nmeros normais

    # padro em cada chamada do procedimento

    Polar = function (){ #funo sem argumento

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    52/108

    42 Gerao de Variveis No-Uniformes

    u1

    u2

    (u1,u

    2)

    r = 1

    Figura 3.4: Crculo unitrio mostrando um ponto aleatrio (u1, u2) com R2 = u21+u22

    representando x1 e o ngulo que o ponto (u1, u2) determina em relao

    ao eixo u1.

    repeat

    {

    u = runif(2,-1,1) # gera dois nmeros uniformes U(-1,1)

    r2 =u%*%u # toma o seu quadrado

    if ((r2>0) & (r2

  • 8/7/2019 estat stica computacional usando R

    53/108

    3.3 Variveis Aleatrias de Algumas Distribuies Importantes 43

    } else { # n mpar

    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

    x=c(x,Polar()[1])

    } #else interno

    } #else n par

    x=x*sigma+mu

    } # fim de BoxMuller

    # Exemplos de utilizao

    x = BoxMuller(12)

    x

    y =BoxMuller(12,100,10)

    y

    Algumas aproximaes so apresentadas em Atkinson e Pearce (1976) [1] e se-

    ro apenas descritas na seqncia. Uma das aproximaes faz uso da densidade

    Tukey-lambda e aproxima a normal igualando os quatro primeiros momentos. Esse

    algoritmo, alm de ser uma aproximao, tem a desvantagem de utilizar a exponen-

    ciao que uma operao lenta. Utilizando essa aproximao podemos obter uma

    varivel normal Xa partir de uma varivel uniforme U U(0, 1) por:

    X= [U0,135 (1 U)0,135]/0, 1975.

    Outro mtodo baseado na soma de 12 ou mais variveis uniformes (Ui U(0, 1))independentes. Assim, a varivel X=

    12i Ui6 tem distribuio aproximadamente

    normal com mdia 0 e varincia 1. Isso ocorre em decorrncia do teorema do limite

    central e em razo de cada uma das 12 variveis uniformes possurem mdia 1/2 e

    varincia 1/12.

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    54/108

    44 Gerao de Variveis No-Uniformes

    Estas duas aproximaes tem valor apenas didtico e no devem ser recomenda-das como uma forma de gerar variveis normais. Muitas vezes esse fato ignorado

    em problemas que requerem elevada preciso e confiabilidade dos resultados obti-

    dos. Quando isso acontece concluses incorretas ou no mnimo imprecisas podem ser

    obtidas.

    Vamos ilustrar a partir deste instante a gerao de variveis aleatrias discre-

    tas. Escolhemos a distribuio binomial para exemplificar. A distribuio binomial

    de forma surpreendente extremamente importante nas aplicaes da estatstica.

    Esta distribuio aparece nas mais variadas situaes reais e tericas. Por exem-

    plo, o teste no-paramtrico do sinal utiliza a distribuio binomial, a ocorrncia

    de animais doentes em uma amostra de tamanho n pode ser muitas vezes mode-

    lada pela distribuio binomial. Inmeros outros exemplos poderiam ser citados. A

    distribuio binomial a primeira distribuio discreta de probabilidade, entre as

    distribuies j estudadas. A varivel aleatria Xcom distribuio de probabilidade

    binomial tem a seguinte funo de probabilidade:

    P(X= x) =n

    x

    px

    (1 p)nx

    , x = 0, 1, , n e n 1, (3.3.8)

    em que os parmetros n e p referem-se, respectivamente, ao tamanho da amostra e a

    probabilidade de sucesso de se obter um evento favorvel em uma amostragem de 1

    nico elemento ao acaso da populao. O termonx

    o coeficiente binomial definido

    por:

    n

    x =n!

    x!(n

    x)!

    .

    A probabilidade de sucesso p, em amostras de tamanho n da populao, ou seja,

    em n ensaios de Bernoulli, deve permanecer constante e os sucessivos ensaios devem

    ser independentes. O parmetro n em geral determinado pelo pesquisador e deve

    ser um inteiro maior ou igual a 1. Se n = 1, ento a distribuio binomial se

    especializa na distribuio Bernoulli. Assim, a distribuio binomial a repetio

    de n ensaios Bernoulli independentes e com probabilidade de sucesso constante. Os

    seguintes teoremas e lemas so importantes, para a definio de alguns mtodos que

    apareceram na seqncia. Estes lemas sero apresentados sem as provas.

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    55/108

    3.3 Variveis Aleatrias de Algumas Distribuies Importantes 45

    Teorema 3.2 (Gnese). SejaXo nmero de sucessos em uma seqncia denensaios Bernoulli com probabilidade de sucesso p, ou seja,

    X=ni=1

    I(Ui p)

    em queU1, U2, , Un so variveis uniformes(0, 1) i.i.d. eI() uma funoindicadora. Ento, Xtem distribuio binomial(n, p).

    Lema 3.1 (Soma de binomiais). SeX1, X2, , Xk so variveis aleatrias binomi-ais independentes com(n1, p),

    , (nk, p), entoki=1 Xi tem distribuio binomial,

    com parmetros(k

    i=1 ni, p).

    Lema 3.2 (Tempo de espera - propriedade 1). SejamG1, G2, variveis aleatriasgeomtricas independentes e, X, o menor inteiro tal que

    X+1i=1

    Gi > n.

    Assim, Xtem distribuio binomial(n, p).

    As variveis geomtricas citadas no lema 3.2 so definidas a seguir. Se G tem

    distribuio geomtrica com probabilidade de sucesso constante p (0, 1), ento, afuno de probabilidade :

    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

    sucesso no g-simo evento, numa seqncia de ensaios Bernoulli independentes, in-

    cluindo o primeiro sucesso. Assim, supe-se que venham a ocorrer g 1 fracassos,

    cada um com probabilidade de ocorrncia constante 1 p, antes da ocorrncia deum sucesso no g-simo ensaio, com probabilidade p. Finalmente, o segundo lema do

    tempo de espera pode ser anunciado por:

    Lema 3.3 (Tempo de espera - propriedade 2). SejamE1, E2, variveis aleatriasexponenciais i.i.d., eXo menor inteiro tal que

    X+1i=1

    Ein i + 1 > ln(1 p).

    Logo, Xtem distribuio binomial(n, p).

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    56/108

    46 Gerao de Variveis No-Uniformes

    As propriedades especiais da distribuio binomial, descritas no teorema e noslemas, formam a base para dois algoritmos binomiais. Estes dois algoritmos so

    baseados na propriedade de que uma varivel aleatria binomial soma de n

    variveis Bernoulli obtidas em ensaios independentes e com probabilidade de sucesso

    constante p. O algoritmo binomial mais bsico baseia-se na gerao de n variveis

    independentes U(0, 1) e no cmputo do total das que so menores ou iguais a p. Este

    algoritmo denominado por Kachitvichyanukul e Schmeiser (1988) [6] de BU dado

    por:

    1. Faa x = 0 e k = 0

    2. Gere u de uma U(0, 1) e faa k = k + 1

    3. Se u p, ento faa x = x + 1

    4. Se k < n v para o passo 2

    5. Retorne x de uma binomial (n, p)

    O algoritmo BU tem velocidade proporcional a n e depende da velocidade dogerador de nmeros aleatrios, mas possui a vantagem de no necessitar de variveis

    de setup. O segundo algoritmo atribudo a Devroy 1980 [3] denominado de BG e

    baseado no lema 3.2. O algoritmo BG pode ser descrito por:

    1. Faa y = 0, x = 0 e c = ln(1 p)

    2. Se c=0 v para o passo 6

    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

    6. Retorne x de uma binomial (n, p)

    O algoritmo utilizado no passo 4 do algoritmo BG baseado em truncar uma

    varivel exponencial para gerar uma varivel geomtrica, conforme descrio feita

    por Devroy (1986) [4]. O tempo de execuo desse algoritmo proporcional a np, o

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    57/108

    3.3 Variveis Aleatrias de Algumas Distribuies Importantes 47

    que representa uma considervel melhoria da performance. Assim, p > 0, 5, pode-se melhorar o tempo de execuo de BG explorando a propriedade de que se X

    binomial com parmetro n e p, ento n X binomial com parmetros n e 1 p.Especificamente o que devemos fazer substituir p pelo min(p, 1 p) e retornar xse p 12 ou retornar n x, caso contrrio. A velocidade, ento, proporcional a nvezes o valor min(p, 1 p). A desvantagem desse procedimento que so necessriasvrias chamadas do gerador de variveis aleatrias uniformes, at que um sucesso

    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

    binomial.

    Como j havamos comentado em outras oportunidades o mtodo da inverso o

    mtodo bsico para convertermos uma varivel uniforme Uem uma varivel aleatria

    X, invertendo a funo de distribuio. Para uma varivel aleatria contnua, temos

    o seguinte procedimento:

    Gerar um nmero uniforme u

    Retornar x = F1(u)

    O procedimento anlogo para o caso discreto requer a busca do valor x, tal que:

    F(x 1) =i

  • 8/7/2019 estat stica computacional usando R

    58/108

    48 Gerao de Variveis No-Uniformes

    2. Gere u de uma U(0, 1) e faa x = 0

    3. Se u r, ento v para o passo 5

    4. Faa u = u r, x = x + 1, r = (ax s)r e v para o passo 3

    5. Se p 12 , ento retorne x de uma binomial (n, p), seno retorne n x de umabinomial (n, p)

    A velocidade deste algoritmo proporcional a n vezes o valor min(p, 1 p). A

    vantagem desse algoritmo que apenas uma varivel aleatria uniforme geradapara cada varivel binomial requerida. Um ponto importante o tempo consumido

    para gerar qqn substancial e dois problemas potenciais podem ser destacados. O

    primeiro a possibilidade de underflowno clculo de r = qqn, quando n muito

    grande e, o segundo, a possibilidade do clculo recursivo de r ser uma fonte de

    erros de arredondamento, que se acumulam e que se tornam srios na medida que

    n aumenta (Kachitvichyanukul e Schmeiser, 1988 [6]). 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) [6] mencionam que basta implementar o algoritmo em preciso dupla que

    esses problemas so evitados.

    # Exemplificao de algoritmos para gerar variveis aleatrias binomiais B(n, p)

    # 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

  • 8/7/2019 estat stica computacional usando R

    59/108

    3.3 Variveis Aleatrias de Algumas Distribuies Importantes 49

    } # function BU

    BG = function(n,p)

    {

    if (p>0.5) pp=1-p else pp=p

    y=0;x=0; c = log(1 - pp)

    if (cf)

    {

    u = u - f

    x = x + 1

    Estatstica Computacional Ferreira, D.F.

  • 8/7/2019 estat stica computacional usando R

    60/108

    50 Gerao de Variveis No-Uniformes

    f = f * (g / x - r)

    } # while

    if (p>0.5) x=n-x

    return(x)

    } # function BINV

    # Exemplo de utilizao da funo BINV

    m=1000

    x=BINV(3,0.5)

    for (i in 2:m) x=c(x,BINV(3,0.5))

    hist(x)

    mean(x)

    var(x)

    Procedimentos de gerao de nmeros aleatrios poderiam ser apresentados para

    muitas outras distribuies de probabilidades. Felizmente no R no temos este tipo

    de preocupao, pois estas rotinas j existem e esto implementadas em linguagemno interpretada. Inclusive para os modelos considerados temos rotinas prontas em

    R. Veremos uma boa parte delas na prxima seo.

    3.4 Rotinas R para Gerao de Variveis Aleatrias

    Nesta seo, veremos alguns dos principais comandos R para acessarmos os pro-

    cessos de gerao de realizaes de variveis aleatrias de diferentes modelos pro-

    babilsticos. Os modelos probabilsticos contemplados pelo R esto apresentados naTabela 3.1.

    Se acrescentarmos os prefixos d para densidade, p para CDF(funo de dis-

    tribuio de probabilidades), q para quantis e r para simulao (realizaes de

    variveis aleatrias), ento poderemos utilizar as funes bsicas da Tabela 3.1 em

    diferentes contextos. No caso particular deste captulo temos interesse na gerao

    de realizaes de variveis aleatrias e, portanto, no comando rmodelo. O primeiro

    argumento x para dmodelo, q para pmodelo, p para qmodelo and n for rmodelo

    (exceto para rhyper e rwilcox, nos quais o primeiro argumento nn). Estas excees

    Ferreira, D.F. Estatstica Computacional

  • 8/7/2019 estat stica computacional usando R

    61/108

    3.4 Rotinas R para Gerao de Variveis Aleatrias 51

    Tabela 3.1: Distribuies de probabilidades, nome R e parmetros dos principaismodelos probabilstico.

    Distribuio Nome R Parmetros

    beta beta shape1, shape2, ncp

    binomial binom size, prob

    Cauchy cauchy location, scale

    qui-quadrado chisq df, ncp

    exponencial exp rate

    F f df1, df1, ncp

    gama gamma shape, scale

    geomtrica geom prob

    hipergeomtri