Escolar Documentos
Profissional Documentos
Cultura Documentos
Estatstica Computacional
Utilizando R
Lavras
Minas Gerais - Brasil
11 de dezembro de 2014
ii
Ferreira, D.F.
Estatstica Computacional
Pref
acio
Nestas notas de aula tivemos a intencao de abordar o tema de estatstica computacional que e t
ao importante para a comunidade cientfica e principalmente para
os estudantes dos cursos de pos-graduacao em estatstica. Podemos afirmar sem
medo de errar que a estatstica computacional se tornou e e hoje em dia uma das
principais
areas da estatstica. Alem do mais, os conhecimentos desta area podem
ser e, frequentemente, s
ao utilizados em outras areas da estatstica, da engenharia
e da fsica. A inferencia Bayesiana e um destes exemplos tpicos em que geralmente
utilizamos uma abordagem computacional. Quando pensamos nestas notas de aulas
tivemos muitas d
uvidas do que tratar e como abordar cada topico escolhido. Assim,
optamos por escrever algo que propiciasse ao leitor ir alem de um simples receituario, mas que, no entanto, n
ao o fizesse perder em um emaranhado de demonstracoes.
Por outro lado buscamos apresentar os modelos e os metodos de uma forma bastante
abrangente e n
ao restritiva.
Uma outra motivac
ao que nos conduziu e nos encorajou a desenvolver este projeto, foi a nossa experiencia pessoal em pesquisas com a estatstica computacional.
Tambem fizemos isso pensando no benefcio pessoal, nao podemos negar, que isso
nos traria ao entrarmos em contato direto com a vasta publicacao existente neste
ramo da estatstica. N
ao temos, todavia, a intencao de estudarmos todos os assuntos e nem mesmo pretendemos para um determinado topico esgotar todas as
possibilidades. Pelo contr
ario, esperamos que estas notas sejam uma introducao a
estatstica computacional e que sirvam de motivacao para que os alunos dos cursos
de graduac
ao em estatstica possam se adentrar ainda mais nessa area.
Estas notas s
ao baseadas em um livro que estamos escrevendo sobre a estatstica
computacional utilizando a linguagem Pascal. A adaptacao para o R de algumas das
rotinas implementadas neste livro foi uma tarefa bastante prazerosa e reveladora.
Estatstica Computacional
Ferreira, D.F.
iv
Aproveitamos esta oportunidade para desvendar um pouco dos in
umeros segredos
que este poderoso programa possui e descobrir um pouco sobre seu enorme potencial
e tambem, por que n
ao dizer, de suas fraquezas. Nessa primeira versao nao esperamos perfeic
ao, mas estamos completamente cientes que muitas falhas devem existir
e esperamos contar com a colaboracao dos leitores para sana-las. Estamos iniciando
uma segunda vers
ao revisada e ampliada, utilizando ainda o Sweave, que integra o R
ao LATEX. Essas notas ser
ao constantemente atualizadas na internet. Esperamos que
este manuscrito venha contribuir para o crescimento profissional dos estudantes de
nosso programa de p
os-graduac
ao em Estatstica e Experimentacao Agropecuaria,
alem de estudantes de outros programas da UFLA ou de outras instituicoes. Dessa
forma nosso objetivo ter
a sido atingido.
Daniel Furtado Ferreira
11 de dezembro de 2014
Ferreira, D.F.
Estatstica Computacional
Sum
ario
Pref
acio
iii
Lista de Tabelas
vii
Lista de Figuras
ix
1 Introdu
c
ao ao Programa R
1.1
Introduc
ao ao R . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2
1.3
Func
oes no R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
1.4
Introduc
ao a Estatstica Computacional . . . . . . . . . . . . . . . .
18
1.5
Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
2 Gera
c
ao de Realiza
c
oes de Vari
aveis Uniformes
23
2.1
N
umeros Aleat
orios Uniformes . . . . . . . . . . . . . . . . . . . . .
24
2.2
N
umeros Aleat
orios Uniformes no R . . . . . . . . . . . . . . . . . .
31
2.3
Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
3 Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
35
3.1
Introduc
ao
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
3.2
36
3.3
Vari
aveis Aleat
orias de Algumas Distribuicoes Importantes . . . . .
45
3.4
58
3.5
Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
4 Gera
c
ao de Amostras Aleat
orias de Vari
aveis Multidimensionais
65
4.1
Introduc
ao
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Estatstica Computacional
65
Ferreira, D.F.
SUMARIO
vi
4.2
Distribuic
ao Normal Multivariada . . . . . . . . . . . . . . . . . . . .
66
4.3
Distribuic
ao Wishart e Wishart Invertida . . . . . . . . . . . . . . .
72
4.4
Distribuic
ao t de Student Multivariada . . . . . . . . . . . . . . . . .
77
4.5
Outras Distribuic
oes Multivariadas . . . . . . . . . . . . . . . . . . .
80
4.6
Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
5 Algoritmos para M
edias, Vari
ancias e Covari
ancias
83
5.1
Introduc
ao
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
5.2
Algoritmos Univariados . . . . . . . . . . . . . . . . . . . . . . . . .
84
5.3
88
5.4
Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
6 Aproxima
c
ao de Distribui
c
oes
93
6.1
Introduc
ao
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
93
6.2
95
6.3
6.4
Func
oes Pre-Existentes no R . . . . . . . . . . . . . . . . . . . . . . 111
6.5
Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Refer
encias Bibliogr
aficas
113
Indice Remissivo
115
Ferreira, D.F.
Estatstica Computacional
Lista de Tabelas
3.1
Distribuic
oes de probabilidades, nome R e parametros dos principais
modelos probabilstico. . . . . . . . . . . . . . . . . . . . . . . . . . .
Estatstica Computacional
59
Ferreira, D.F.
viii
Ferreira, D.F.
LISTA DE TABELAS
Estatstica Computacional
Lista de Figuras
3.1
Ilustrac
ao do teorema fundamental da transformacao de probabilidades para gerar uma variavel aleatoria X com densidade f (x) = F 0 (x).
3.2
37
Metodo da rejeic
ao para gerar um valor x0 da variavel aleatoria X
com func
ao densidade f (x) que e menor do que g(x) para todo x.
Nessa ilustrac
ao, x0 deve ser aceito. . . . . . . . . . . . . . . . . . .
3.3
39
Ilustrac
ao gr
afica do algoritmo Metropolis-Hastings, apresentando a
func
ao de transic
ao q(x ; xt ) e a transicao de x1 para x2 por meio do
algoritmo de passeio aleatorio. . . . . . . . . . . . . . . . . . . . . . .
3.4
42
Crculo unit
ario mostrando um ponto aleatorio (u1 , u2 ) com r2 = u21
+ u22 representando x1 e o angulo que o ponto (u1 , u2 ) determina
em relac
ao ao eixo 1. No exemplo, o ponto esta situado no crculo
unit
ario, conforme e exigido. . . . . . . . . . . . . . . . . . . . . . . .
Estatstica Computacional
48
Ferreira, D.F.
Ferreira, D.F.
LISTA DE FIGURAS
Estatstica Computacional
Captulo 1
Introdu
c
ao ao Programa R
O programa R (R Development Core Team, 2006[14]) foi escolhido para ministrar este curso por uma serie de razoes. Alem de ser um programa livre, no sentido
de possuir livre distribuic
ao e codigo fonte aberto, pode ser utilizado nas plataformas Windows e Unix. Alem do mais, o R possui grande versatilidade no sentido de
possuir in
umeros pacotes j
a prontos e nos possibilitar criar novas rotinas e funcoes.
O R e a vers
ao livre baseada na linguagem S, cuja versao comercial e o S-Plus. O
programa SAS, por outro lado, e o programa estatstico mais antigo e de extrema
aceitac
ao no meio cientfico, mas o R, nos u
ltimos anos, e o mais popular. O programa R por ser genuinamente um programa orientado por objeto nos possibilita
programar com muita eficiencia e versatilidade. Outro aspecto que e bastante atrativo no R refere-se ao fato de o mesmo receber contribuicoes de pesquisadores de
todo o mundo na forma de pacotes. Essa e uma caracterstica que faz com que haja
grande desenvolvimento do programa em relativamente curtos espacos de tempo e
que nos possibilita encontrar solucoes para quase todos os problemas com os quais
nos deparamos em situac
oes reais. Para os problemas que nao conseguimos encontrar soluc
oes, o ambiente de programacao R nos possibilita criar nossas proprias
soluc
oes.
Nestas notas de aulas pretendemos apresentar os conceitos basicos da estatstica
computacional de uma forma bastante simples. Inicialmente obteremos nossas proprias soluc
oes para um determinado metodo ou tecnica e em um segundo momento
mostraremos que podemos ter a mesma solucao pronta do programa R quando esta
estiver disponvel. Particularmente neste captulo vamos apresentar algumas caEstatstica Computacional
Ferreira, D.F.
Introdu
c
ao ao Programa R
1.1
Introdu
c
ao ao R
No R os smbolos ou vari
aveis s
ao objetos e podem ter as mais variadas estruturas, tais como vetores, matrizes, data frames, listas, funcoes, expressoes e muitos
outras. Vamos descrever de forma sucinta e gradativa algumas destes objetos.
Os vetores s
ao compostos de celulas contguas de dados homogeneos. Os vetores
podem ser de v
arios tipos como, por exemplo, logicos, inteiros, reais e caracteres.
O modo mais simples de criar um vetor e utilizar > x <- c(5, 1.5, 4.5, 6.7, 3.1).
Esta instruc
ao faz com que concatenemos os 5 elementos anteriores com a funcao c
(concatenac
ao) e o resultado e um vetor de tamanho 5. Podemos acessar qualquer
elemento deste vetor utilizando a instrucao > x[j], em que j = 1, 2, , 5 e o
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 e que as atribuicoes no R podem
Ferreira, D.F.
Estatstica Computacional
1.1 Introdu
c
ao ao R
ser feitas por <- ou por =. Vamos utilizar neste material a maneira menos comum
para os usu
arios do R, atribuicao com o =, por uma questao de emprego de outras
linguagens de programac
ao, em que o sinal de igualdade e utilizado para atribuicoes.
As instruc
oes R devem ser preferencialmente escritas em um editor de texto como
o bloco de notas. O R nos possibilita abrir tais arquivos textos, denominados de
scripts, nos quais podemos executar os codigos digitados marcando-os e teclando
simultaneamente ctrl r ou pressionando F5 . Cada linha deve conter uma funcao,
uma atribuic
ao ou uma instrucao. Podemos digitar mais de uma instrucao por
linha se as separarmos por ponto e vrgula. Vamos ilustrar o uso de vetores com
o exemplo a seguir. Neste exemplo aproveitamos o ensejo para apresentar alguns
outros comandos u
teis da linguagem R.
> # programa R demonstrando o uso de vetores e de intru
c~
oes
> #
uteis para lidarmos com eles. Todos os textos ap
os #
> # ser~
ao considerados coment
arios
> x <- c(2, 3, 4, 5.1, 3.2)
> x
# imprime o vetor
> y
# 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
# opera
c~
oes elementares com os vetores
> w
# imprime o vetor w
[1]
7.4
> rx
# imprime o vetor rx
# tamanho do vetor x em lx
> lx
# imprime lx
[1] 5
> x1 <- seq(from=1, to=10, by=0.5)# gera uma sequ^
encia 1 a 10 de 0.5 em 0.5
> x1
# imprime x1
[1]
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
[11]
6.0
6.5
7.0
7.5
8.0
8.5
9.0
9.5 10.0
Estatstica Computacional
5.0
5.5
Ferreira, D.F.
Introdu
c
ao ao Programa R
# replica x na
ntegra 5 vezes
> xr1
# 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
Estatstica Computacional
1.1 Introdu
c
ao ao R
# imprime o vetor
# cria vetor l
ogico
# imprime o vetor
TRUE FALSE
# vetor l
ogico de nega
c~
ao de y
> z
# imprime o vetor
[1]
TRUE
TRUE
TRUE FALSE
TRUE
# imprime o vetor w2
O R nos possibilita lidar com arranjos de varias dimensoes. Vamos utilizar neste
material apenas o arranjo mais simples de duas dimensoes que sao as matrizes. A
forma mais simples de gerarmos uma matriz e utilizar o comando matrix(0, n, p).
Este comando nos permite gerar uma matriz composta de elementos iguais a zero
e de dimens
oes linha e coluna iguais a n e p, respectivamente. Os elementos desta
Estatstica Computacional
Ferreira, D.F.
Introdu
c
ao ao Programa R
matriz (A) s
ao 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 posicoes da matriz A.
Alguns operadores aplicados a matriz sao executados elemento a elemento. Por
exemplo, se fizermos 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 multiplicacao matricial de A por B. Os operadores
nrow(A) e ncol(A) retornam o n
umero de linhas e de colunas de A, respectivamente.
O operador diag depende do argumento. Se diag(x) e aplicado a um vetor x, o resultado e uma matriz diagonal cujos elementos sao iguais aos elementos do vetor x.
Se por outro lado utilizarmos diag(A), em que A e uma matriz, obteremos um vetor
cujos elementos s
ao os mesmos da diagonal principal de A. O comando solve(A)
retorna a inversa de A, ou seja, A1 . Tambem pode ser utilizado para resolver
sistemas de equac
oes lineares do tipo y = Ax, da seguinte forma x <- solve(A,y).
Autovalores e autovetores de uma matriz simetrica A podem ser computados por
ev <- eigen(A). Os autovalores s
ao armazenados no objeto (vetor) ev$values e os
autovetores correspondentes, no objeto (matriz) ev$vec. Cada coluna desta matriz
contem um autovetor correspondente ao elemento associado do vetor de autovalores.
Uma matriz qualquer pode ser decomposta da seguinte forma A = U DV > . Esta
decomposic
ao e conhecida de decomposicao do valor singular e a funcao R e dada
por udv <- svd(A). O resultado e uma lista com os objetos u, d e v com significados
obvios. 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 funcoes 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 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,]
Ferreira, D.F.
Estatstica Computacional
1.1 Introdu
c
ao ao R
[,1] [,2]
[1,]
-1
[2,]
-1
32
-1
[2,]
-1
> nrow(C);ncol(C)# n
umero de linhas e colunas de C
[1] 2
[1] 2
> D <- A%*%B
# multiplica
c~
ao matricial A por B
> D
[1,]
31
-3
[2,]
> v
[1] 31
[1,]
[,2]
0.2857143 -0.1428571
[2,] -0.1428571
0.5714286
# imprime os autovetores
[,1]
[,2]
[1,] -0.9238795
0.3826834
# imprime os autovalores
# decomposi
c~
ao do valor singular de A
> udv
Estatstica Computacional
Ferreira, D.F.
Introdu
c
ao ao Programa R
$d
[1] 4.414214 1.585786
$u
[,1]
[,2]
0.9238795
$v
[,1]
[,2]
0.9238795
Ferreira, D.F.
X1
X2
13.4
14
14.6
15
13.5
19
15.0
23
14.6
17
Estatstica Computacional
20
16.4
21
14.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
16.5
18
15.4
28
15.1
17
14.2
14
e o programa
> # programa R demonstrando a leitura de arquivos de dados
> dados <- read.table("dados.txt",header=TRUE) # l^
e o arquivo no data frame dados
> #dados.novo <- edit(dados)
1.2
Ferreira, D.F.
10
Introdu
c
ao ao Programa R
x <- 1
x + 10
+ }
[1] 11
> z <- {x=0; y <- x + 1; x <- y + 1} # quanto vale z?
> z
[1] 2
O if /else e um importante comando de controle que avalia condicoes para realizar um determinado comando ou grupo de comandos, se o resultado for verdadeiro,
ou outro comando ou grupo, se o resultado for falso. M
ultiplos comandos if /else
podem ser hierarquizados. O comando formal e feito da seguinte forma:
> if (expr 1) expr 2 else expr 3
A expr 1 e avaliada e se o resultado logico for verdadeiro, entao expr 2 e executada; se o resultado for falso a expr 3 sera avaliada. Se o expr 2 nao 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 n
ao faz nada de u
til e algumas comparacoes nao
fazem nenhum sentido, a n
ao 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
[1] 5
Ferreira, D.F.
Estatstica Computacional
11
> w4
[1] 0.75
Estatstica Computacional
Ferreira, D.F.
12
Introdu
c
ao ao Programa R
else
expr 8
O R possui alguns comandos apropriados para realizar loops, ou seja, as chamadas estruturas de repetic
oes. Os comandos para isso sao o for, while e o repeat.
Adicionalmente os comandos next e break fornecem controles adicionais sobre estas
estruturas. O R e t
ao flexvel que estas estruturas retornam o u
ltimo valor computado e nos permite, embora seja extremamente incomum, associar uma variavel aos
seus resultados. Outra vantagem do R diz respeito ao fato de que muitas operacoes,
especialmente as aritmeticas, s
ao vetoriais e, portanto, podemos evitar os loops, que
sao menos eficientes.
O primeiro comando que descreveremos e o repeat. Devemos tomar muito cuidado na especificac
ao da condic
ao de parada para evitarmos repeticoes infinitas
(loops infinitos). A sintaxe geral do comando e:
> repeat expr
print(i)
i <- i + log(i+1)*3
+ }
[1] 1
[1] 3.079442
[1] 7.297322
[1] 13.64512
[1] 21.69744
[1] 31.0642
Ferreira, D.F.
Estatstica Computacional
13
Ser
ao repetidos os comandos do grupo expr ate que a condicao de parada seja
satisfeita. Novamente e necessario frisar que deve-se tomar muito cuidado com a
condic
ao imposta para evitarmos loops infinitos. Nos codigos seguintes repetimos o
mesmo programa feito com o comando repeat, porem utilizando o comando while.
> # programa R demonstrando uso do while
> i <- 1
> while (i <= 35)
+ {
+
print(i)
i <- i + log(i+1)*3
+ }
[1] 1
[1] 3.079442
[1] 7.297322
[1] 13.64512
[1] 21.69744
[1] 31.0642
+ }
> x
[,1]
[1,]
5.000000
Estatstica Computacional
Ferreira, D.F.
14
Introdu
c
ao ao Programa R
[2,]
6.306853
[3,]
7.901388
[4,]
9.613706
[5,] 11.390562
[6,] 13.208241
[7,] 15.054090
[8,] 16.920558
[9,] 18.802775
[10,] 20.697415
Como j
a salientamos dentro do grupo de comandos do for ou do while podemos
utilizar o break se alguma condic
ao for satisfeita. Com o break o R ira executar o
proximo comando, se houver, ap
os o termino do loop. De qualquer forma, o loop
sera interrompido. Outro cuidado que devemos ter, e evitar o maximo possvel o
uso das estruturas de repetic
ao no R. Isso nao e problema, em geral, para nenhuma
outra linguagem. No R, o que acontece e que as estruturas de repeticao sao executadas de uma forma mais lenta que comandos ou funcoes que nao as utilizam. Isso
se deve pela estrutura da linguagem. A linguagem R e interpretada e as estruturas
de repetic
oes possuem uma menor eficiencia durante o processo de interpretacao.
Algumas linguagens interpretadas como o Java nao compartilham essa deficiencia,
talvez em raz
ao da gerac
ao de bytecodes, que sao trechos compilados dos programas
implementados. Esses bytecodes se comunicam diretamente com a maquina, sem a
necessidade de um interpretador intermediario. Comandos especiais para evitarmos
os loops est
ao disponveis na linguagem. Por exemplo, podemos utilizar o apply, sapply, tapply, entre outras func
oes tornando a linguagem tao eficiente quanto qualquer
outra reconhecidamente eficiente. Alem disso, as operacoes do R sao vetoriais, o
que elimina a necessidade de utilizacao de loops para suas aplicacoes a todos os elementos do vetor. Outras alternativas e a possibilidade de implementarmos codigos
em linguagem C ou FORTRAN. Esses codigos sao compilados e ligados aos nossos
codigos genuinamente escritos em linguagem R. Assim, podemos utilizar todas as
facilidades do R, associadas `
a possibilidade de realizarmos implementacoes tao eficientes quanto as que faramos utilizando linguagens de programacao reconhecidas
como sendo eficientes.
Ferreira, D.F.
Estatstica Computacional
1.3 Fun
c
oes no R
1.3
15
Fun
c
oes no R
O R nos possibilita criar nossas proprias funcoes, que sao genuinamente funcoes
R, sendo armazenadas internamente de uma forma especial e podendo ser utilizadas
em novas express
oes. Desta forma a linguagem ganha grande poder, conveniencia
e eleg
ancia. O aprendizado em escrever funcoes u
teis e uma das muitas maneiras
de fazer com que o uso do R seja confortavel e produtivo. A sintaxe geral de uma
func
ao e dada por:
> nome <- function(arg 1, arg 2, ...) expr
tc =
0
X
S
n
(1.3.1)
A func
ao resultante, em linguagem R, e apresentada a seguir. Neste exemplo
uma amostra de tamanho n = 8 foi utilizada para obter o valor da estatstica para
testar a hip
otese H0 : = 5,0. Podemos observar que o resultado final da funcao e
igual ao do u
ltimo comando executado, ou seja o valor da estatstica e do valor-p,
por meio de um objeto do tipo lista. Se o comando return() nao for utilizado, a
func
ao retornar
a sempre como resultado, o valor da u
ltima operacao ou comando
executado. Esta func
ao utiliza no seu escopo tres funcoes do R (funcoes basicas do
R), ainda n
ao apresentadas. As duas primeiras, var() e mean() retornam a variancia
e a media do vetor utilizado como argumento, respectivamente, e a terceira, pt(),
retorna a probabilidade acumulada da distribuicao t de Student para o primeiro
argumento da func
ao com graus de liberdade, que e o seu segundo argumento.
> # programa R demonstrando uso de uma fun
c~
ao
> tteste <- function(x, mu0)
+ {
Estatstica Computacional
Ferreira, D.F.
16
Introdu
c
ao ao Programa R
<- length(x)
S2 <- var(x)
xb <- mean(x)
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
$tc
[1] 0.6428422
$pr
[1] 0.540803
<- length(x)
S2 <- var(x)
xb <- mean(x)
# acrescentando informa
c~
oes amostrais na lista de sa
da
return(t)
Ferreira, D.F.
Estatstica Computacional
1.3 Fun
c
oes no R
17
+ }
> 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
$m
edia
[1] 5.475
$vari^
ancia
[1] 4.367857
$n
[1] 8
> tc2 <- tteste(x = y) # testar H0: mu = 0
> tc2
$tc
[1] 7.409602
$pr
[1] 0.0001482082
$m
edia
[1] 5.475
$vari^
ancia
[1] 4.367857
$n
[1] 8
> tc3 <- tteste(y, 5.0) # testar H0:mu = 5
> tc3
$tc
[1] 0.6428422
$pr
Estatstica Computacional
Ferreira, D.F.
18
Introdu
c
ao ao Programa R
[1] 0.540803
$m
edia
[1] 5.475
$vari^
ancia
[1] 4.367857
$n
[1] 8
1.4
Introdu
c
ao a Estatstica Computacional
Os metodos de computac
ao intensiva tem desempenhado um papel cada vez mais
importante para resolver problemas de diferentes areas da ciencia. Vamos apresentar
algoritmos para gerar realizac
oes de variaveis aleatorias de diversas distribuicoes de
probabilidade, para realizar operac
oes matriciais, para realizar inferencias utilizando
Ferreira, D.F.
Estatstica Computacional
1.4 Introdu
c
ao a Estatstica Computacional
19
metodos de permutac
ao e bootstrap, etc. Assim, buscamos realizar uma divisao
deste material em uma sec
ao basica e em outra aplicada. As tecnicas computacionais
sao denominadas de estatstica computacional se forem usadas para realizarmos
inferencias, para gerarmos realizacoes de variaveis aleatorias ou para compararmos
metodos e tecnicas estatsticas.
Vamos explorar metodos de geracao de realizacoes de variaveis aleatorias de
diversos modelos probabilsticos, para manipularmos matrizes, para obtermos quadraturas de func
oes de distribuicao de diversos modelos probabilsticos e de funcoes
especiais na estatstica e finalmente vamos apresentar os metodos de computacao intensiva para realizarmos inferencias em diferentes situacoes reais. Temos a intencao
de criar algoritmos em linguagem R e posteriormente, quando existirem, apresentar
os comandos para acessarmos os mesmos algoritmos ja implementados no R.
Vamos apresentar os metodos de bootstrap e Monte Carlo, os testes de permutacao e o procedimento jackknife para realizarmos inferencias nas mais diferentes
situac
oes reais. Assim, este curso tem basicamente duas intencoes: possibilitar ao
aluno realizar suas pr
oprias simulacoes e permitir que realizem suas inferencias de
interesse em situac
oes em que seria altamente complexo o uso da inferencia classica.
Seja na inferencia frequentista ou na inferencia Bayesiana, os metodos de simulacao de n
umeros aleat
orios de diferentes modelos probabilsticos assumem grande
import
ancia. Para utilizarmos de uma forma mais eficiente a estatstica computacional, um conhecimento mnimo de simulacao de realizacoes de variaveis aleatorias
e uma necessidade que n
ao deve ser ignorada. Vamos dar grande enfase a este assunto, sem descuidar dos demais. Apresentaremos neste material diversos algoritmos
desenvolvidos e adaptados para a linguagem R.
Simular e a arte de construir modelos segundo Naylor et al. (1971) [11], com
o objetivo de imitar o funcionamento de um sistema real, para averiguarmos o que
aconteceria se fossem feitas alteracoes no seu funcionamento (Dachs, 1988 [2]). Este
tipo de procedimento pode ter um custo baixo, evitar prejuzos por nao utilizarmos
procedimentos inadequados e otimizar a decisao e o funcionamento do sistema real.
Precauc
oes contra erros devem ser tomadas quando realizamos algum tipo de
simulac
ao. Podemos enumerar:
1. escolha inadequada das distribuicoes;
2. simplificac
ao inadequada da realidade; e
Estatstica Computacional
Ferreira, D.F.
20
Introdu
c
ao ao Programa R
3. erros de implementac
ao.
Devemos fazer o sistema simulado operar nas condicoes do sistema real e verificar
por meio de alguns testes se os resultados estao de acordo com o que se observa no
sistema real. A este processo denominamos de validacao. Entao, a simulacao e uma
tecnica que usamos para a soluc
ao de problemas. Se a solucao alcancada for mais
rapida, com eficiencia igual ou superior, de menor custo e de facil interpretacao em
relacao a outro metodo qualquer, o uso de simulacao e justificavel.
1.5
Exerccios
10 1
1
Estatstica Computacional
1.5 Exerccios
21
as vari
ancias sejam heterogeneas ou homogeneas. A decisao deve ser baseada
em um teste de homogeneidade de variancias. Para realizar tal tarefa implementar uma func
ao especfica assumindo normalidade das amostras aleatorias.
1.5.6 Criar uma func
ao para obter a inversa de Moore-Penrose de uma matriz qualquer n m, baseado na decomposicao do valor singular, funcao svd do R. Seja
para isso uma matriz A, cuja decomposicao do valor singular e A = U DV > ,
em que D e a matriz diagonal dos valores singulares e U e V sao os vetores
singulares correspondentes. A inversa de Moore-Penrose de A e definida por
A+ = V D 1 U > .
Estatstica Computacional
Ferreira, D.F.
22
Ferreira, D.F.
Introdu
c
ao ao Programa R
Estatstica Computacional
Captulo 2
Gera
c
ao de Realiza
c
oes de
Vari
aveis Uniformes
Neste captulo vamos considerar a geracao de n
umeros aleatorios para o modelo
probabilstico uniforme. A partir do modelo uniforme podemos gerar realizacoes de
vari
aveis aleat
orias de qualquer outro modelo probabilstico. Para gerar realizacoes
de uma distribuic
ao uniforme, precisamos gerar n
umeros aleatorios. Isso nao pode
ser realizado por m
aquinas. Na verdade qualquer sequencia produzida por uma
maquina e na verdade uma sequencia previsvel. Dessa forma, a denominamos de
sequencia de n
umeros pseudo-aleatorios.
Uma sequencia de n
umeros sera considerada aleatoria do ponto de vista computacional se o programa que a gerar for diferente e estatsticamente nao correlacionado
com o programa que a usar
a. Assim, dois geradores de n
umeros aleatorios deveriam
produzir os mesmos resultados nas suas aplicacoes. Se isso nao ocorrer, um deles nao
pode ser considerado um bom gerador de n
umeros aleatorios (Press et al., 1992 [13]).
Os conceitos de n
umeros uniformes e n
umeros aleatorios podem ser muitas vezes
confundidos. N
umeros uniformes sao aqueles que variam aleatoriamente em uma
faixa determinada de valores com probabilidade constante. No entanto, devemos diferenciar n
umeros aleat
orios uniformes de outros tipos de n
umeros aleatorios, como
por exemplo, n
umeros aleat
orios normais ou gaussianos. Estes outros tipos sao geralmente provenientes de transformacoes realizadas nos n
umeros aleatorios uniformes.
Ent
ao, uma fonte confi
avel para gerar n
umeros aleatorios uniformes determina o sucesso de metodos estoc
asticos de inferencia e de todo processo de simulacao Monte
Estatstica Computacional
Ferreira, D.F.
24
Gera
c
ao de Realiza
c
oes de Vari
aveis Uniformes
Carlo.
2.1
N
umeros Aleat
orios Uniformes
N
umeros uniformes aleat
orios s
ao aqueles que, a princpio, se situam dentro de
um intervalo real, geralmente, entre 0 e 1, para os quais nao podemos produzir
uma sequencia previsvel de valores e cuja funcao densidade e constante. Em varios programas de computadores estes n
umeros sao gerados utilizando o comando
random ou comandos similares. Em Pascal, por exemplo, se este comando for utilizado com o argumento n, random(n), n
umeros aleatorios inteiros U do intervalo
0 U n 1 s
ao gerados e se o argumento n nao for usado, os n
umeros gerados
sao valores aleat
orios reais do intervalo [0; 1[.
Em geral, os programas utilizam o metodo congruencial. Sejam os n
umeros
uniformes inteiros U1 , U2 , U3 , . . . entre 0 e m 1, em que m representa um grande
n
umero inteiro. Podemos gerar estes n
umeros utilizando o metodo congruencial por
meio da relac
ao recursiva:
Ui+1 = (aUi + c)
mod m
(2.1.1)
em que m e chamado de m
odulo, a e c sao inteiros positivos denominados de multiplicador e incremento, respectivamente. O operador
mod 10 = 56
mod 10 = 6
U2 = (7 6 + 7)
mod 10 = 49
mod 10 = 9
Estatstica Computacional
2.1 N
umeros Aleat
orios Uniformes
25
mod m
(2.1.2)
m = 231 1 = 2.147.483.647
(2.1.3)
Este gerador de n
umeros aleatorios nao e perfeito, mas passou por todos os testes
a qual foi submetido e tem sido usado como padrao para comparar e julgar outros
geradores. Um problema que surge e que devemos contornar e que nao e possvel
implementarmos diretamente em uma linguagem de alto-nvel a equacao (2.1.2) com
as constantes de (2.1.3), pois o produto de a e Ui excede, em geral, o limite maximo
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 modulo, garantindo
portabilidade para implementacao em praticamente todas as linguagens e todas as
maquinas. O algoritmo de Schrage baseia-se na fatoracao de m dada por:
m = aq + r;
i.e.,
q = bm/ac;
r = m mod a
(2.1.4)
Ferreira, D.F.
26
Gera
c
ao de Realiza
c
oes de Vari
aveis Uniformes
rage (1979) [15] mostrou que ambos a(Ui mod q) e rbUi /qc pertencem ao intervalo
0 m 1 e que
(
aUi
mod m =
a(Ui
a(Ui
se maior que 0
(2.1.5)
se verifica. No R pode-se optar por usar o operador %% (mod ), que retorna o resto da
operacao entre dois inteiros e o operador %/% (div ), que retorna o resultado do dividendo para operac
oes com inteiros. A quantidade Ui mod q = Ui (Ui
div q)q
sem
if (sem<=0)
Ferreira, D.F.
Estatstica Computacional
2.1 N
umeros Aleat
orios Uniformes
+
27
t <- as.numeric(substring(Sys.time(),c(1,6,9,12,15,18),
c(4,7,10,13,16,19)))#rel
ogio/sist.
sem <- ia * (sem %% iq) - ir * (sem %/% iq)# retirar o efeito inicial
for (i in 2:n)
return(u)
+ } # fun
c~
ao
> #uso da fun
c~
ao para gerar o vetor X de n n
umeros uniformes 0, 1
> n <- 5
> x <- gna0(n,0)
> x
[,1]
[1,] 0.4315139
[2,] 0.4540961
[3,] 0.9938890
[4,] 0.2929675
[5,] 0.9040262
> # sem especificar a semente
> gna0(n)
[,1]
[1,] 0.4315139
[2,] 0.4540961
[3,] 0.9938890
[4,] 0.2929675
[5,] 0.9040262
> # tempo de execu
c~
ao
> system.time(gna0(100000))
user
0.70
system elapsed
0.00
0.81
Estatstica Computacional
Ferreira, D.F.
28
Gera
c
ao de Realiza
c
oes de Vari
aveis Uniformes
Devemos apresentar algumas consideracoes a respeito desse algoritmo escrito em
linguagem R: a) a func
ao gna0 (gerador de n
umeros aleatorios mnima) retorna
um n
umero real entre 0 e 1. Este tipo de especificacao determina que as variaveis
possuam precis
ao dupla. A precis
ao dupla (double) possui n
umeros na faixa de 5,0
10324 1,7 10308 , ocupa 8 bytes de memoria e possui 15 16 dgitos significantes;
b) o valor da semente e definido pelo usuario e e declarado na funcao como parametro
de referencia. Isso significa que a variavel do programa que chama a funcao e que e
passada como semente deve ser atualizada com o novo valor modificado em gna0.
Se o seu valor inicial for zero ou negativo, a funcao atribui um inteiro dependente
da hora do sistema no momento da chamada; c) o sinal # indica comentario no R;
d) o comando > list(ran0 = ran0, sem = sem) passa o valor de amostra para
o resultado da func
ao em uma lista contendo o novo valor da semente e o n
umero
aleatorio ran0 gerado; e) a func
ao tem dependencia do pacote R.utils, que por sua
vez depende dos pacotes R.methodsS3 e R.oo. Essa dependencia se caracteriza por
usar uma func
ao para capturar a hora do sistema.
A rotina e iniciada com os valores de n e da semente fornecidos pelo usuario.
Se a semente for nula ou negativa, atribumos um novo valor dependente do relogio
do sistema no momento da chamada usando funcoes do R para isso. A partir deste
ponto o programa deve chamar reiteradas vezes a funcao gna0, que retorna o valor
do n
umero aleat
orio 0 e 1 utilizando o algoritmo descrito anteriormente, ate que a
sequencia requerida pelo usu
ario seja completada. Nas sucessivas chamadas desta
funcao, o valor da semente e sempre igual ao valor do u
ltimo passo, uma vez que
sem da u
ltima chamada deve ser passada como parametro de referencia para a
funcao gna0 a partir do bloco do programa que a chamou.
O perodo de gna0e da ordem de 231 2,15109 , ou seja, a sequencia completa
e superior a 2 bilh
oes de n
umeros aleatorios. Assim, podemos utilizar gna0 para a
maioria dos prop
ositos pr
aticos. Evitamos o valor zero na funcao gna0 devido ao
fato de todos os valores da sequencia serem nulos para um valor inicial de semente
igual a zero. No entanto, para sementes positivas nunca ocorrera o valor 0 na geracao
da sequencia.
Como j
a salientamos o gerador padrao mnimo de n
umeros aleatorios possui
duas limitac
oes b
asicas, quais sejam, sequencia curta e correlacao serial. Assim,
como existem metodos para eliminar a correlacao serial e que aumentam o perodo
da sequencia, recomendamos que sejam adotados. Claro que a funcao apresentada
Ferreira, D.F.
Estatstica Computacional
2.1 N
umeros Aleat
orios Uniformes
29
teve por objetivo ilustrar como podemos programar nossas proprias funcoes para gerarmos n
umeros aleat
orios uniformes. O R, no entanto, possui seu proprio gerador
de n
umeros uniformes, que veremos na sequencia. Um dos melhores e mais interessantes geradores de n
umeros aleatorios e o Mersenne Twister (MT). Mersenne
Twister e um gerador de n
umeros pseudo-aleatorios desenvolvido por Makoto Matsumoto e Takuji Nishimura nos anos de 1996 e 1997 [9]. MT possui os seguintes
meritos segundo seus desenvolvedores:
1. foi desenvolvido para eliminar as falhas dos diferentes geradores existentes;
2. possui a vantagem de apresentar o maior perodo e maior ordem de equidistribuic
ao do que de qualquer outro metodo implementado. Ele fornece um
perodo que e da ordem de 219.937 1 4,3154 106001 , e uma equidistribuicao
623-dimensional;
3. e um dos mais r
apido geradores existentes, embora complexo;
4. faz uso de forma muito eficiente da memoria.
uma segunda vers
ao do algoritmo anterior foi implementado, para mostrar basicamente o uso do apply, que evita o uso de loops e torna a rotina mais eficiente. Nesse
programa, a func
ao apply utiliza o argumento das linhas, opcao 1, da matriz usada
como argumento principal da funcao gnu0. Como esse argumento nao sera usado
pela func
ao gnu0, mas apenas como um artifcio, entao denominamos o mesmo por
temp. Finalmente, modificamos o retorno da funcao gnu0 para o valor do n
umero
aleat
orio apenas. Como o valor do objeto sem deve ser alterado em cada chamada
usamos a atribuic
ao <<- no escopo local da funcao gnu0, o que faz com que o valor
seja alterado no escopo global da funcao que invocou gnu0, ou seja, na gna. Assim,
nao precisamos passar em uma segunda chamada de gnu0 o novo valor de sem, pois
o mesmo j
a foi alterado no ambiente global e sera reconhecido no ambiente local.
> # gerador padr~
ao m
nimo de n
umeros aleat
orios adaptado de Park and
> # Miller. Retorna desvios aleat
orios uniformes entre 0 e 1. Fazer
> # "sem" igual a qualquer valor inteiro para iniciar a sequ^
encia;
> # "sem" n~
ao pode ser alterado entre sucessivas chamadas da sequ^
encia
> # se "sem" for zero ou negativo, um valor dependente do valor do rel
ogio
> # do sistema no momento da chamada
e usado como semente. Constantes
> # usadas a = 7^5 = 16.807; m = 2^31 - 1 = 2.147.483.647
> # e c = 0
Estatstica Computacional
Ferreira, D.F.
30
Gera
c
ao de Realiza
c
oes de Vari
aveis Uniformes
sem
return(ran0)
ia <- 16807;
if (sem <= 0)
<- as.numeric(substring(Sys.time(),c(1,6,9,12,15,18),
c(4,7,10,13,16,19)))#rel
ogio/sist.
sem <- ia * (sem %% iq) - ir * (sem %/% iq)# retirar o efeito inicial
return(u)
+ } # fun
c~
ao gna
> #uso da fun
c~
ao para gerar o vetor X de n n
umeros uniformes 0, 1
> n <- 5
> x <- gna(n, 0)
> x
[1] 0.4315139 0.4540961 0.9938890 0.2929675 0.9040262
> # tempo de execu
c~
ao
> system.time(gna(100000))
user
0.5
system elapsed
0.0
0.5
Estatstica Computacional
2.2 N
umeros Aleat
orios Uniformes no R
31
de aulas, n
ao descreveremos este tipo de procedimento para incorporacoes de funcoes
escritas em outras linguagens.
2.2
N
umeros Aleat
orios Uniformes no R
Ferreira, D.F.
32
Gera
c
ao de Realiza
c
oes de Vari
aveis Uniformes
esta associada ao R. Os algoritmos gna0 e gna por sua vez foram implementados
em linguagem R, que e interpretada. Assim, naturalmente o algoritmo runif deveria
ser mais r
apido do que qualquer outro algoritmo feito em linguagem interpretada R.
As comparac
oes de tempo podem ser vistas no programa a seguir. Para obtermos
este resultado utilizamos um Intel Core I7 CPU, Q840, 1,87 GHz (turbo boost) e
6 GB de mem
oria RAM DDR3. Foram gerados 1.000.000 de n
umeros aleatorios
do algoritmo gna0 e 10.000.000 do algoritmo runif, por esse u
ltimo ser bem mais
rapido. O trecho do programa utilizado foi:
> # programa R demonstrando a compara
c~
ao de tempos dos algoritmos
> # de gera
c~
ao de n n
umeros aleat
orios uniformes
> # a fun
c~
ao gna0 e gna devem ser carregadas previamente
> # tempo gna0
> n
<- 1000000
> ini
<- proc.time()
> x
<- gna0(n, 0)
> fim
<- proc.time()
system
elapsed
<- 1000000
> ini
<- proc.time()
> x
<- gna(n, 0)
> fim
<- proc.time()
system
elapsed
<- 10000000
> ini
<- proc.time()
> x
<- runif(n,0,1)
> fim
<- proc.time()
system elapsed
Ferreira, D.F.
Estatstica Computacional
2.3 Exerccios
33
system
elapsed
3.333333 125.849057
system
elapsed
6.666667 146.226415
system
elapsed
2.3
Exerccios
2.3.1 Utilizar o gerador gna0 para gerar n realizacoes de uma distribuicao exponencial f (x) = ex . Sabemos do teorema da transformacao de probabilidades, que se U tem distribuicao uniforme, X = F 1 (U ) tem distribuicao
Rx
de probabilidade com densidade f (x) = F 0 (x); em que F (x) = f (t)dt
e a func
ao de distribuicao de X e F 1 (y) e a sua funcao inversa para o
valor y. Para a exponencial a funcao de distribuicao de probabilidade e:
Rx
F (x) = 0 et dt = 1 ex . Para obtermos a funcao inversa temos que
igualar u a F (x) e resolver para x. Assim, u = 1 ex e resolvendo para x
temos: x = ln (1 u)/. Devido `a simetria da distribuicao uniforme 1 u
pode ser trocado por u. O resultado final e: x = ln (u)/. Para gerar
n
umeros da exponencial basta gerar n
umeros uniformes e aplicar a relacao
x = ln (u)/. Fazer isso para construir uma funcao que gera n realizacoes
exponenciais. Aplicar a funcao para obter amostras aleatorias da exponencial
de tamanho n = 100 e obter o histograma da amostra simulada. Calcule a
media e a vari
ancia e confronte com os valores teoricos da distribuicao exponencial.
2.3.2 Para gerar n
umeros de uma distribuicao normal, cuja densidade e dada por
f (x) = 1/( 2 2 ) exp{(x )2 /(2 2 )}, qual seria a dificuldade para podermos utilizar o teorema anunciado no exerccio 2.3.1?
Estatstica Computacional
Ferreira, D.F.
34
Gera
c
ao de Realiza
c
oes de Vari
aveis Uniformes
2.3.3 Como poderamos adaptar o algoritmo apresentados nesse captulo para gerar
n
umeros aleat
orios uniformes utilizando os valores propostos por Park e Miller,
ou seja, a = 48.271 e m = 231 1? Implementar o algoritmo, tomando cuidado
em relac
ao aos novos multiplicador q e resto r da fatoracao de m?
2.3.4 Comparar a velocidade de processamento das funcoes apresentadas (runif e
rna0 ) nesse captulo para gerar 10.000.000 de n
umeros aleatorios uniformes
entre 0 e 1. Como voce poderia propor um teste estatstico simples para
avaliar a aleatoriedade da sequencia de n
umeros uniformes gerados por esses
algoritmos? Implementar sua ideia.
Ferreira, D.F.
Estatstica Computacional
Captulo 3
Gera
c
ao de Realiza
c
oes de
Vari
aveis Aleat
orias
N
ao-Uniformes
Neste captulo vamos apresentar alguns metodos gerais para gerarmos realizacoes
de vari
aveis aleat
orias de outras distribuicoes de probabilidade, como, por exemplo,
dos modelos exponencial, normal e binomial. Implementaremos algumas funcoes
em linguagem R e finalizaremos com a apresentacao das rotinas otimizadas e ja
implementadas no R.
3.1
Introdu
c
ao
Ferreira, D.F.
36
Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
Neste captulo limitaremos a apresentar a teoria para alguns poucos modelos
3.2
M
etodos Gerais para Gerar Realizac
oes de Vari
aveis Aleat
orias
Para vari
aveis aleat
orias discretas, devemos modificar o teorema para podermos
contemplar func
oes de distribuic
oes F em escada, como sao as funcoes de distribuicao
de probabilidades associadas a essas variaveis aleatorias.
Ferreira, D.F.
Estatstica Computacional
3.2 M
etodos Gerais para Gerar Realiza
c
oes de Vari
aveis Aleat
orias
37
Na Figura 3.1 representamos como gerar uma realizacao de uma variavel aleatoria X com densidade f e funcao de distribuicao F . Assim, basta gerarmos um
n
umero uniforme u0 e invertermos a funcao de distribuicao F neste ponto. Computacionalmente a dificuldade e obtermos analiticamente uma expressao para a funcao
F 1 para muitos modelos probabilsticos. Em geral, essas expressoes nao existem
e metodos numericos s
ao requeridos para inverter a funcao de distribuicao. Neste
captulo vamos apresentar este metodo para a distribuicao exponencial.
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
Ferreira, D.F.
38
Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
Estatstica Computacional
3.2 M
etodos Gerais para Gerar Realiza
c
oes de Vari
aveis Aleat
orias
39
G(x)
rejeitar x0
u1
aceitar x0
g(x0 )
g(x)
f (x)
f (x0 )
u2
x0
f (x) = ex
(3.2.1)
F (x) = 1 ex .
(3.2.2)
E a func
ao de distribuic
ao inversa x = F 1 (u) e dada por:
x = F 1 (u) =
Estatstica Computacional
ln(1 u)
(3.2.3)
Ferreira, D.F.
40
Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
em que u e um n
umero uniforme (0, 1).
Devido `
a distribuic
ao uniforme ser simetrica, podemos substituir 1u na equacao
(3.2.3) por u. Assim, para gerarmos uma realizacao de uma variavel exponencial X,
a partir de uma vari
avel aleat
oria uniforme, utilizamos o teorema 3.1 por intermedio
da equacao:
x=
ln(u)
.
(3.2.4)
u <- runif(n, 0, 1)
return(x)
# retorna o vetor x
+ }
> # exemplo
> rexpon(5, 1)
[1] 0.03569021 0.49386353 0.15204391 0.90617606
[5] 2.37686075
Estatstica Computacional
3.2 M
etodos Gerais para Gerar Realiza
c
oes de Vari
aveis Aleat
orias
41
f (x )q(xt ; x )
entao, xt+1 = x
u
<
min
1,
f (xt )q(x ; xt )
(3.2.5)
f (x )q(xt ; x )
u min 1,
entao, xt+1 = xt
f (xt )q(x ; xt )
A func
ao densidade candidata q(x ; xt ) deve ser escolhida a partir de algumas
caractersticas especficas, como possuir o mesmo domnio da distribuicao alvo, embora n
ao haja necessidade de ser um envelope, q(x) > f (x), para todos os valores
da vari
avel aleat
oria, alem de possuir funcao de distribuicao e inversa da funcao de
distribuic
ao conhecidas ou algum metodo simples de gerar observacoes. Assim, a
func
ao candidata, para fins de ilustracao, poderia ser a distribuicao normal centrada
no ponto xt e com vari
ancia 2 , ou seja,
q(x ; xt ) N (xt , 2 ),
que neste caso representa o algoritmo denominado passeio aleatorio.
Esta func
ao candidata nos permitiria gerar realizacoes da variavel aleatoria em
natural admitirmos que este processo
torno do estado atual xt com variancia 2 . E
possa ser generalizado para dimensoes maiores do que 1. Na sua forma original,
o algoritmo Metropolis requeria que a funcao candidata fosse simetrica, ou seja,
q(x ; xt ) = q(xt ; x ), mas, a partir do trabalho de Hastings, esta restricao foi eliminada. Alem do mais, e permitido que a funcao q(x ; xt ) nao dependa de xt , o que
e denominado de algoritmo de cadeias de Markov independentes para o MetropolisHastings, que difere do exemplo anterior, onde se ilustrou o algoritmo passeio aleatorio. Este algoritmo e muito eficiente se a escolha da funcao candidata for adequada,
Estatstica Computacional
Ferreira, D.F.
42
Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
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 aceitacao esteja em
torno de 60%. Se o seu valor for muito alto, a amostra caminhara lentamente em
torno do espaco e convergir
a lentamente para f (x); se por outro lado, a aceitacao for
muito baixa, a func
ao candidata esta gerando valores em uma regiao de densidade
muito pequena. Na Figura 3.3 ilustramos o algoritmo Metropolis-Hastings, para um
caso particular do passeio aleat
orio, onde a funcao de transicao inicialmente esta
centrada em x1 e, no passo seguinte, esta centrada em x2 .
f (x)
q(x ; x1 )
q(x ; x2 )
x1
x2
Estatstica Computacional
3.2 M
etodos Gerais para Gerar Realiza
c
oes de Vari
aveis Aleat
orias
43
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
houvesse uma maior facilidade de ilustrarmos as caractersticas do algoritmo. Neste
caso iniciamos com o valor inicial igual ao parametro e o valor candidato da segunda realizac
ao geramos de uma t com media igual ao valor anterior (inicial no
segundo passo) e par
ametro de dispersao igual a variancia da normal 2 . Escolhemos uma t com = 3 graus de liberdade como funcao candidata. Em geral, como ja
dissemos, o ponto crtico na utilizacao deste algoritmo e justamente a determinacao
apropriada da func
ao candidata.
> # retorna uma v.a. de uma t univariada com df graus de liberdade, e
> # par^
ametros media e sigma2
> rtdf <- function (n, media=0, sigma2 = 1, df = 1)
+ {
+
+ 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)
+ {
+
(x-media)**2 / (df*sigma2))**(-(df+1)/2)
+ }
> # Fun
c~
ao para exemplificar o uso do Metropolis-Hastings
> # Este exemplo pretende mostrar a gera
c~
ao 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
for (i in 2:n)
<- x0
y0
Estatstica Computacional
Ferreira, D.F.
44
Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
if (u <= axy)
<- runif(1) # n
umero uniforme para verificar se aceita ou descarta
x0 <- y0
return(x)
+ }
> 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,] 486.2022
> mean(x)
[1] 101.563
Ferreira, D.F.
Estatstica Computacional
3.3 Vari
aveis Aleat
orias de Algumas Distribui
c
oes Importantes
density.default(x = x)
0.005
0.000
200
0
50
100
150
3.3
0.010
Density
400
Frequency
600
0.015
800
Histogram of x
45
50
100
150
Vari
aveis Aleat
orias de Algumas Distribuic
oes Importantes
Ferreira, D.F.
46
Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
gerar. A func
ao densidade da normal e:
f (x) =
1
2 2
(x)2
2 2
(3.3.1)
1
1
e 2
f (y) =
y 2
i
ln(y) 2
y > 0.
(3.3.2)
f (y1 , . . . , yp ) = f (x1 , . . . , xp )abs
x1
y1
..
.
xp
y1
...
..
.
x1
yp
...
xp
yp
..
.
(3.3.3)
Estatstica Computacional
3.3 Vari
aveis Aleat
orias de Algumas Distribui
c
oes Importantes
y1 =
47
p
2 ln x1 cos (2x2 )
(3.3.4)
p
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
x1
y1
x2
y1
x1
y2
x2
y2
y e0,5(y12 +y22 ) y e0,5(y12 +y22 )
1
2
y
2
=
1
2
y2
y2
2
2y1 1+ 2
2y1 1+ 22
y
y
1
(3.3.6)
1 0,5(y12 +y22 )
e
2
Assim, a funca
o densidade conjunta de Y1 e Y2 e dada por f (x1 ,x2 )|J|, sendo
=
portanto:
2
y1
1
f (y1 ,y2 ) = e 2
2
1 y22
e 2 .
2
(3.3.7)
Desde que a densidade conjunta de Y1 e Y2 e o produto de duas normais independentes, podemos afirmar que as duas variaveis geradas sao normais padrao independentes, como pode ser visto em Johnson e Wichern (1998)[6] e Ferreira (2008)[5].
Assim, podemos usar esse resultado para gerarmos variaveis aleatorias normais.
A dificuldade, no entanto, e apenas computacional. A utilizacao de funcoes trigonometricas como seno e co-seno pode limitar a performance do algoritmo gerado
tornando-o lento. Um truque apresentado por Press et al. (1992)[13] e bastante
interessante para evitarmos diretamente o uso de funcoes trigonometricas. Esse truque representa uma melhoria do algoritmo de Box-M
uller e e devido a Marsaglia e
Bray (1964)[8].
Estatstica Computacional
Ferreira, D.F.
48
Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
Ao inves de considerarmos os valores das variaveis aleatorias uniformes x1 e x2
(u1 ,u2 )
u2
raio 1
u1
Estatstica Computacional
3.3 Vari
aveis Aleat
orias de Algumas Distribui
c
oes Importantes
49
# Polar
e a fun
c~
ao que retorna dois n
umeros normais
# padr~
ao em cada chamada do procedimento
repeat
} # fim de repeat
return(y)
} # fim de Polar
if (n %% 2 == 0) # n
e par
} # for
} else # n
e
mpar
k <- n %/% 2
if (k == 0)
x <- Polar()[1]
} else
} # for
Estatstica Computacional
Ferreira, D.F.
50
Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
} #else interno
} #else n par
x <- x * sigma + mu
return(x)
+ } # fim de BoxM
uller
> # Exemplos de utiliza
c~
ao
> x <- BoxMuller(12)
> x
[1] -1.5798738
0.6492094
0.9272537
1.5786116
[5]
0.9535420 -0.6813367
0.9755343
0.4737049
0.3295623
86.84473
92.23484
92.43087
97.21734
[11]
94.82370 117.32725
0.02
0.00
0.01
Density
0.03
0.04
60
80
100
120
140
Ferreira, D.F.
Estatstica Computacional
3.3 Vari
aveis Aleat
orias de Algumas Distribui
c
oes Importantes
51
Algumas aproximac
oes s
ao apresentadas em Atkinson e Pearce (1976) [1] e serao apenas descritas na sequencia. Uma das aproximacoes faz uso da densidade
Tukey-lambda e aproxima a normal igualando os quatro primeiros momentos. Esse
algoritmo, alem de ser uma aproximacao, tem a desvantagem de utilizar a exponenciac
ao que e uma operac
ao lenta. Utilizando essa aproximacao podemos obter uma
vari
avel normal X a partir de uma variavel uniforme U U (0,1) por:
n x
P (X = x) =
p (1 p)nx ,
x
x = 0,1, , n e n 1,
(3.3.8)
em que os par
ametros n e p referem-se, respectivamente, ao tamanho da amostra
e a probabilidade de sucesso de se obter um evento favoravel em uma amostragem
Estatstica Computacional
Ferreira, D.F.
52
Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
de 1 u
nico elemento ao acaso da populacao. O termo
n
x
e o coeficiente binomial
definido por:
n
n!
=
.
x!(n x)!
x
A probabilidade de sucesso p, em amostras de tamanho n da populacao, ou
seja, em n ensaios de Bernoulli, deve permanecer constante e os sucessivos ensaios
devem ser independentes. O par
ametro n em geral e determinado pelo pesquisador
e deve ser um inteiro maior ou igual a 1. Se n = 1, entao a distribuicao binomial se
especializa na distribuic
ao Bernoulli. Assim, a distribuicao binomial e a repeticao
de n ensaios Bernoulli independentes e com probabilidade de sucesso constante. Os
seguintes teoremas e lemas s
ao importantes, para a definicao de alguns metodos que
apareceram na sequencia. Estes lemas serao apresentados sem as provas.
Teorema 3.2 (Genese). Seja X o n
umero de sucessos em uma sequencia de n
ensaios Bernoulli com probabilidade de sucesso p, ou seja,
X=
n
X
I(Ui p)
i=1
em que U1 , U2 , , Un s
ao vari
aveis uniformes (0,1) i.i.d. e I() e uma func
ao
indicadora. Ent
ao, X tem distribuic
ao binomial (n, p).
Lema 3.1 (Soma de binomiais). Se X1 , X2 , , Xk s
ao vari
aveis aleat
orias binomiPk
ao binomial,
ais independentes com (n1 , p), , (nk , p), ent
ao i=1 Xi tem distribuic
Pk
com par
ametros ( i=1 ni , p).
Lema 3.2 (Tempo de espera - propriedade 1). Sejam G1 , G2 , vari
aveis aleat
orias geometricas independentes e, X, o menor inteiro tal que
X+1
X
Gi > n.
i=1
Estatstica Computacional
3.3 Vari
aveis Aleat
orias de Algumas Distribui
c
oes Importantes
P (G = g) = p(1 p)g1 ,
g = 1,2
53
(3.3.9)
Ei
> ln(1 p).
ni+1
Ferreira, D.F.
54
Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
1. Faca y = 0, x = 0 e c = ln(1 p)
2. Se c = 0, v
a para o passo 6
3. Gere u de uma U (0,1)
4. y = y + bln(u)/cc + 1, em que bc denotam a parte inteira do argumento
5. Se y n, faca x = x + 1 e v
a para o passo 3
6. Retorne x de uma binomial (n, p)
O algoritmo utilizado no passo 4 do algoritmo BG e baseado em truncar uma
variavel exponencial para gerar uma variavel geometrica, conforme descricao feita
por Devroy (1986) [4]. O tempo de execucao desse algoritmo e proporcional a np,
o que representa uma consider
avel melhoria da performance. Assim, p > 0,5, podese melhorar o tempo de execuc
ao de BG explorando a propriedade de que se X e
binomial com par
ametro n e p, ent
ao n X e binomial com parametros n e 1 p.
Especificamente o que devemos fazer e substituir p pelo min(p,1 p) e retornar x
se p
1
2
vezes o valor min(p,1 p). A desvantagem desse procedimento e que sao necessarias
varias chamadas do gerador de realizacoes de variaveis aleatorias uniformes, ate 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 inversao da funcao de
distribuic
ao binomial.
Como j
a havamos comentado em outras oportunidades o metodo da inversao e o
metodo b
asico para convertermos uma variavel uniforme U em uma variavel aleatoria
X, invertendo a func
ao de distribuic
ao. Para uma variavel aleatoria contnua, temos
o seguinte procedimento:
Gerar um n
umero uniforme u
Retornar x = F 1 (u)
O procedimento an
alogo para o caso discreto requer a busca do valor x, tal que:
F (x 1) =
X
i<x
Ferreira, D.F.
P (X = i) < u
P (X = i) = F (x).
ix
Estatstica Computacional
3.3 Vari
aveis Aleat
orias de Algumas Distribui
c
oes Importantes
55
P (X = 0) = (1 p)n
(3.3.10)
P (X = x) = P (X = x 1)
nx+1 p
x
1p
Estatstica Computacional
Ferreira, D.F.
56
Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
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 (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 c <= 0
return(x)
+ } # function BG
> BINV <- function(n,p)
+ {
+
<- pp / q
<- r * (n + 1)
<- runif(1, 0, 1)
<- 0; f <- qn
<- 1 - pp
Ferreira, D.F.
Estatstica Computacional
3.3 Vari
aveis Aleat
orias de Algumas Distribui
c
oes Importantes
+
while (u > f)
u <- u - f
x <- x + 1
57
f <- f * (g / x - r)
} # while
return(x)
+ } # function BINV
> # Exemplo de utiliza
c~
ao da fun
c~
ao BINV
> 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)
[1] 5.039
> var(x)
[1] 2.497977
Estatstica Computacional
Ferreira, D.F.
58
Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
50
100
Frequency
150
200
250
Histogram of x
10
Procedimentos de gerac
ao de n
umeros aleatorios poderiam ser apresentados para
muitas outras distribuic
oes de probabilidades. Felizmente no R nao temos este tipo
de preocupac
ao, pois estas rotinas j
a existem e estao implementadas em linguagem
nao interpretada. Inclusive para os modelos considerados temos rotinas prontas em
R. Veremos uma boa parte delas na proxima secao.
3.4
Nesta sec
ao, veremos alguns dos principais comandos R para acessarmos os processos de gerac
ao de realizac
oes de variaveis aleatorias de diferentes modelos probabilsticos. Os modelos probabilsticos contemplados pelo R estao apresentados na
Tabela 3.1.
Se acrescentarmos os prefixos d para densidade, p para CDF (funcao de distribuicao de probabilidades), q para quantis e r para simulacao (realizacoes de
Ferreira, D.F.
Estatstica Computacional
59
Nome R
Parametros
beta
beta
binomial
binom
size, prob
Cauchy
cauchy
location, scale
quiquadrado
chisq
df, ncp
exponencial
exp
rate
gama
gamma
shape, scale
geometrica
geom
prob
hipergeometrica
hyper
m, n, k
log-normal
lnorm
meanlog, sdlog
logstica
logis
location, scale
binomial negativa
nbinom
size, prob
normal
norm
mean, sd
Poisson
pois
lambda
t de Student
df, ncp
uniform
unif
min, max
Weibull
weibull
shape, scale
Wilcoxon
wilcox
m, n
vari
aveis aleat
orias), ent
ao poderemos utilizar as funcoes basicas da Tabela 3.1 em
diferentes contextos. No caso particular deste captulo temos interesse na geracao
de realizac
oes de vari
aveis aleatorias e, portanto, no comando rmodelo deve ser utilizado. O primeiro argumento e x para dmodelo, q para pmodelo, p para qmodelo
and n for rmodelo (exceto para rhyper e rwilcox, nos quais o primeiro argumento e
nn). Estas excec
oes se devem ao fato de que n e usado como um argumento da funcao (par
ametro). Assim, nn representa o tamanho da amostra que queremos gerar.
Em algum modelos probabilsticos nao centrais existe a possibilidade de utilizar o
par
ametro de n
ao-centralidade (ncp).
O uso destas func
oes para gerarmos n
umeros aleatorios e bastante simples. Se,
por exemplo, quisermos gerar dados de uma distribuicao beta com parametros = 1
e = 2, podemos utilizar o programa ilustrativo apresentado na sequencia. PodeEstatstica Computacional
Ferreira, D.F.
60
Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
[1] 0.3328736
[1] 0.3333333
[1] 0.05553159
> alpha*beta/((alpha+beta)^2*(alpha+beta+1))#prop
osito de compara
c~
ao
[1] 0.05555556
Ferreira, D.F.
Estatstica Computacional
3.5 Exerccios
61
1.0
0.0
0.5
Density
1.5
density.default(x = x)
0.0
0.2
0.4
0.6
0.8
1.0
3.5
Exerccios
3.5.1 Seja f (x) = 3x2 uma funcao densidade de uma variavel aleatoria contnua
X com domnio definido no intervalo [0; 1]. Aplicar o metodo da inversao
e descrever um algoritmo para gerar realizacoes de variaveis aleatorias dessa
densidade. Implementar 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 te
oricos.
3.5.2 Os dados a seguir referem-se ao tempo de vida, em dias, de n = 40 insetos.
Considerando que a distribuicao do tempo de vida e a exponencial e que o
par
ametro pode ser estimado pelo estimador de maxima verossimilhanca
= 1/X,
em que X
= Pn Xi /n, obter o intervalo de 95% de confianca
i=1
utilizando o seguinte procedimento: i) gerar uma amostra da exponencial de
tamanho n = 40, utilizando o algoritmo rexpon, considerando o parametro
Estatstica Computacional
Ferreira, D.F.
62
Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
4,187
2,516
1,913
8,780
5,912
0,761
12,037
2,604
1,689
5,626
6,361
5,068
3,031
1,128
1,385
12,578
2,029
0,595
0,445
3,601
7,829
1,383
1,934
0,864
8,514
4,977
0,576
1,503
0,475
1,041
0,301
1,781
2,564
5,359
2,307
1,530
8,105
3,151
8,628
Estatstica Computacional
3.5 Exerccios
63
1
()
(y/)1 e
Ferreira, D.F.
64
Gera
c
ao de Realiza
c
oes de Vari
aveis Aleat
orias N
ao-Uniformes
Y = Y /n. Gerar amostras de tamanho n = 1.000 e n = 100.000 e estimar os
quantis 2,5% e 97,5% da distribuicao de Y , em cada uma delas. Confrontar os
intervalos de confianca, dessa forma obtidos, com os do exerccio 3.5.2. Quais
sao suas conclus
oes? Qual e a vantagem de utilizar a distribuicao gama?
3.5.7 Duas amostras binomiais foram realizadas em duas (1 e 2) diferentes populacoes. Os resultados do n
umero de sucesso foram y1 = 2 e y2 = 3 em amostras
de tamanho n1 = 12 e n2 = 14, respectivamente, de ambas as populacoes. Estimar os par
ametros p1 e p2 das duas populacoes por: p1 = y1 /n1 e p2 = y2 /n2 .
Para testarmos a hip
otese H0 : p1 = p2 ou H0 : p1 p2 = 0, podemos utilizar o
seguinte algoritmo bootstrap parametrico: a) utilizar p1 e p2 como parametros
das binomiais, para gerarmos realizacoes considerando tambem como parametros os tamanhos amostrais n1 e n2 ; b) estimar p1j = y1j /n1 e p2j = y2j /n2 na
j-esima repetic
ao desse processo; c) calcular dj = p1j p2j ; 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 distribuicao bootstrap de dj ; e
g) se o valor hipotetico 0 estiver contido nesse intervalo, nao rejeitar H0 , caso
contr
ario, rejeitar a hip
otese de igualdade das proporcoes binomiais das duas
populac
oes.
Ferreira, D.F.
Estatstica Computacional
Captulo 4
Gera
c
ao de Amostras Aleat
orias
de Vari
aveis Multidimensionais
Os modelos multivariados ganharam grande aceitacao no meio cientfico em funcao das facilidades computacionais e do desenvolvimento de programas especializados nesta
area. Os fen
omenos naturais sao em geral multivariados. Um tratamento
aplicado em um ser, a um solo ou a um sistema nao afeta isoladamente apenas uma
vari
avel, e sim todas as vari
aveis. Ademais, as variaveis possuem relacoes entre si e
qualquer mudanca em uma ou algumas delas, afeta as outras. Assim, a geracao de
realizac
oes de vetores ou matrizes aleatorias e um assunto que nao pode ser ignorado.
Vamos neste captulo disponibilizar ao leitor mecanismos para gerar realizacoes de
vari
aveis aleat
orias multidimensionais.
4.1
Introdu
c
ao
Ferreira, D.F.
66
Gera
c
ao de Amostras Aleat
orias de Vari
aveis Multidimensionais
4.2
Distribui
c
ao Normal Multivariada
A func
ao densidade normal multivariada de um vetor aleatorio X e dada por:
p2
fX (x) =(2)
21
||
1
exp (x )> 1 (x )
2
(4.2.1)
em que e s
ao, respectivamente, o vetor de media e a matriz de covariancias,
simetrica e positiva definida, e p e a dimensao do vetor aleatorio X.
Um importante resultado diz respeito a combinacoes lineares de variaveis normais
multivariadas e ser
a apresentado no seguinte teorema.
Teorema 4.1 (Combinac
oes lineares). Considere o vetor aleat
orio normal multivariado X = [X1 , X2 , , Xp ]> com media e covari
ancia e considere C uma
matriz (p p) de posto p, ent
ao a combinac
ao linear Y = CX (p 1) tem distribuic
ao normal multivariada com media Y = C e covari
ancia Y = CC > .
Estatstica Computacional
4.2 Distribui
c
ao Normal Multivariada
p/2
fY (y) =(2)
12
||
67
1 1
> 1
1
exp (C y ) (C y ) |C|1
2
1
p/2
=(2)
C.Q.D.
O teorema 4.1 nos fornece o principal resultado para gerarmos dados de uma normal multivariada. Assim, como nosso objetivo e gerar dados de uma amostra normal
multivariada com vetor de medias e matriz de covariancias pre-estabelecidos,
devemos seguir os seguintes procedimentos. Inicialmente devemos obter a matriz
raiz quadrada de , representada por 1/2 . Para isso, vamos considerar a decomposic
ao espectral da matriz de covariancias dada por = P P > . Logo, podemos
definir a matriz raiz quadrada de por 1/2 = P 1/2 P > , em que e a matriz
diagonal dos autovalores, 1/2 e a matriz diagonal contendo a raiz quadrada destes
elementos e P e a matriz de autovetores, cada um destes vetor disposto em uma de
suas colunas. Desta decomposicao facilmente podemos observar que = 1/2 1/2 .
Assim, podemos utilizar o seguinte metodo para gerarmos uma realizacao pvariada de uma normal multivariada. Inicialmente devemos gerar um vetor aleatorio
Z = [Z1 , Z2 , , Zp ]> de p variaveis normais padrao independentes utilizando, por
exemplo, o algoritmo de Box-M
uller. Isto que dizer que Z = 0 e que Cov(Z) = I.
Este vetor deve sofrer a seguinte transformacao linear:
Y =1/2 Z + .
(4.2.2)
Ferreira, D.F.
68
Gera
c
ao de Amostras Aleat
orias de Vari
aveis Multidimensionais
4 1
1 1
#
.
p <- nrow(Sigma)
z <- rnorm(p,0,1)
x <- t(Sigmaroot%*%z+mu)
if (n > 1)
z <- rnorm(p,0,1)
y <- Sigmaroot%*%z+mu
+
+
x <- rbind(x,t(y))
} # for ii in 2:n
} # if $n > 1$
+ } # rnormmv
> # exemplo de utiliza
c~
ao
Ferreira, D.F.
Estatstica Computacional
4.2 Distribui
c
ao Normal Multivariada
69
>
> 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
c~
ao (mean) `
as colunas de X - op. 2
> xb
[1] 10.06558 50.00551
> var(x)
[,1]
[,2]
53
50
47
48
49
x[,2]
51
52
10
12
14
16
x[,1]
Uma alternativa e realizarmos uma implementacao que nao exige loops. Realizamos isso e verificamos um grande ganho em eficiencia da funcao obtida, como pode
Estatstica Computacional
Ferreira, D.F.
70
Gera
c
ao de Amostras Aleat
orias de Vari
aveis Multidimensionais
p <- nrow(Sigma)
+
+
+ } # rnormmv
> # exemplo de utiliza
c~
ao
>
> 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
c~
ao (mean) `
as colunas de X - op. 2
> xb
[1]
9.997095 50.003410
> var(x)
[,1]
[,2]
Ferreira, D.F.
Estatstica Computacional
4.2 Distribui
c
ao Normal Multivariada
user
system
218.3333
71
elapsed
Inf 221.6667
> tg1
user
system
elapsed
50
47
48
49
x[,2]
51
52
53
4e-07
system elapsed
0e+00
4e-07
10
12
14
16
x[,1]
Ferreira, D.F.
72
Gera
c
ao de Amostras Aleat
orias de Vari
aveis Multidimensionais
[,2]
4.3
Distribui
c
ao Wishart e Wishart Invertida
As distribuic
oes Wishart e Wishart invertida sao relativas `as matrizes de somas
de quadrados e produtos n
ao-corrigidas W obtidas de amostras de tamanho da
distribuic
ao normal multivariada com media 0. Considere Xj = [X1 , X2 , , Xp ]>
o j-esimo vetor (j = 1, 2, , ) de uma amostra aleatoria de tamanho de uma
normal com media 0 e covari
ancia , entao a matriz aleatoria
W =
Xj Xj>
j=1
possui distribuic
ao Wishart com graus de liberdade e parametro (matriz positiva
definida).
Da mesma forma, se temos uma amostra aleatoria de tamanho n de uma distribuicao normal multivariada com media e covariancia , a distribuicao da matriz
Ferreira, D.F.
Estatstica Computacional
4.3 Distribui
c
ao Wishart e Wishart Invertida
73
aleat
oria
W =
n
X
>
(Xj X)(X
j X)
j=1
fW (w|,) =
1
||/2 |w|(p1)/2
1
exp
tr
w
p
Y
2
i+1
p/2
p(p1)/4
2
(4.3.1)
i=1
em que (x) =
R
0
p <- nrow(Sigma)
mu <- matrix(0, p)
return(w)
+ }
> # exemplo de utiliza
c~
ao
>
> library(mvtnorm) # Carregar o pacote mvtnorm antes de chamar a fun
c~
ao
> Sigma <- matrix(c(4, 1, 1, 1), 2, 2)
> nu <- 5
> w <- rWishart(nu, Sigma)
> w
Estatstica Computacional
Ferreira, D.F.
74
Gera
c
ao de Amostras Aleat
orias de Vari
aveis Multidimensionais
[,1]
[,2]
2.948303
Outra distribuic
ao relacionada que aparece frequentemente na inferencia multivariada e a Wishart invertida. Considere W uma matriz aleatoria Wp (, ), entao
a distribuic
ao de S = W 1 , dada pela funcao densidade
1
|1 |/2 |s|(+p+1)/2
1 1
fS (s|,) =
exp 2 tr s
p
Y
i
+
1
2p/2 p(p1)/4
(4.3.2)
i=1
p <- nrow(Sigma)
mu <- matrix(0, p)
wi <- solve(w)
return(list(w = w, wi = wi))
+ }
> # exemplo de utiliza
c~
ao
>
> library(mvtnorm) # Carregar o pacote mvtnorm antes de chamar a fun
c~
ao
> Sigma <- matrix(c(4, 1, 1, 1), 2, 2)
> nu <- 5
Ferreira, D.F.
Estatstica Computacional
4.3 Distribui
c
ao Wishart e Wishart Invertida
75
[,2]
[,2]
0.18035202 -0.01073521
[2,] -0.01073521
0.38637020
p <- nrow(Sigma)
if (p > 1)
+
+
wi <- solve(w)
return(list(w = w, wi = wi))
Estatstica Computacional
Ferreira, D.F.
76
Gera
c
ao de Amostras Aleat
orias de Vari
aveis Multidimensionais
+ } # fun
c~
ao rWWI
> # Exemplo de uso
>
> nu <- 5
> Sigma <- matrix(c(4, 1, 1, 1), 2, 2)
> rWWI(nu, Sigma)
$w
[,1]
[,2]
6.245423 3.486662
$wi
[,1]
[1,]
[,2]
0.07880522 -0.1411585
[2,] -0.14115848
0.5396549
Estatstica Computacional
4.4 Distribui
c
ao t de Student Multivariada
77
4.4
Distribui
c
ao t de Student Multivariada
A famlia de distribuic
oes elpticas e muito importante na multivariada e nas
aplicac
oes Bayesianas. A distribuicao t de Student multivariada e um caso particular desta famlia. Esta distribuicao tem particular interesse nos procedimentos
de comparac
ao m
ultipla dos tratamentos com alguma testemunha avaliada no experimento. A func
ao densidade do vetor aleatorio X = [X1 , X2 , , Xp ]> Rp
com par
ametros dados pelo vetor de medias = [1 , 2 , , p ]> Rp e matriz
simetrica e positiva definida (p p) e
g((x )> 1 (x ))
||1/2
+p
2
+p
1
> 1
2
=
1 + (x ) (x )
p/2
1/2
() (/2)||
fX (x) =
(4.4.1)
+p
z (+p)/2
2
1
+
em que a func
ao g e dada por g(z) =
. A variavel
()p/2 (/2)
aleat
oria X tem media e matriz de covariancias /( 2) no caso de > 2.
Se efetuarmos a transformacao Y = 1/2 (X ) obteremos a distribuicao t
multivariada esferica simetrica, cuja densidade e dada por:
+p
+p
1 > 2
2
fY (y) =
1+ y y
.
()p/2 (/2)
(4.4.2)
A vari
avel aleat
oria Y tera vetor de medias nulo e covariancias I/( 2) e a
densidade ter
a contornos esfericos de mesma probabilidade.
Estatstica Computacional
Ferreira, D.F.
78
Gera
c
ao de Amostras Aleat
orias de Vari
aveis Multidimensionais
Vamos apresentar a forma geral para gerarmos variaveis aleatorias p-dimensionais
Z
,
U
(4.4.3)
possui distribuic
ao t multivariada esferica com graus de liberdade. O vetor X
obtido pela transformac
ao linear
X = 1/2 Y + ,
(4.4.4)
possui distribuic
ao t multivariada elptica com graus de liberdade e parametros
e .
Assim, devemos aplicar a transformacao (4.4.4) n vezes a n diferentes vetores
aleatorios Y e vari
aveis U . Ao final deste processo teremos uma amostra de tamanho
n da distribuic
ao t multivariada almejada com graus de liberdade. Assim, para
gerarmos dados de uma t multivariada com dimensao p, graus de liberdade (nao
necessariamente inteiro), vetor de media qualquer e matriz positiva definida
podemos utilizar a seguinte func
ao R, substituindo na expressao (4.4.4) a matriz
raiz quadrada pelo fator de Cholesky F de :
> # Fun
c~
ao para gerarmos vari
aveis aleat
orias t
> # multivariadas (n, mu, Sigma, nu). Devemos carregar o
> # pacote mvtnorm antes de usar a fun
c~
ao
> # usa o comando: library(mvtnorm)
> rtmult <- function (n, mu=c(0, 0, 0), sigma = diag(3), df = 1)
+ {
+
library(mvtnorm)
F <- chol(sigma)
p <- nrow(sigma)
+
+
+ }
> # Exemplo de uso
> nu <- 3
> par(mfrow = c(1,2))
> plot(rtmult(2000, c(0,0), diag(2), nu))
> Sigma <- matrix(c(4, 1.9, 1.9, 1), 2, 2)
Ferreira, D.F.
Estatstica Computacional
4.4 Distribui
c
ao t de Student Multivariada
79
[,2]
5.390314 2.807334
5.7
[2,]
3.0
5.7
> plot(x)
10
x[,2]
5
0
5
10
15
10
20
25
15
30
10
10
20
0 10
30
x[,1]
Ferreira, D.F.
80
Gera
c
ao de Amostras Aleat
orias de Vari
aveis Multidimensionais
4.5
Outras Distribui
c
oes Multivariadas
4.6
Exerccios
4.6.1 Gerar uma amostra de tamanho (n = 10) uma distribuicao normal trivariada
com vetor de medias = [5,10, 15]> e
= 1
2
matriz de covariancias
1 2
3 2
.
2 7
Estatstica Computacional
4.6 Exerccios
81
de cada vari
avel aleat
oria, vetor p-dimensional. Testar isso usando um grande
valor para n.
4.6.3 Para gerar vari
aveis Wishart e Wishart invertida demonstrar como utilizar as
func
oes rwishart do pacote bayesm e rwish do pacote MCMCpack.
4.6.4 Sabemos que vari
aveis Wishart possuem media . Apresentar um programa
para verificar se o valor esperado, ignorando o erro de Monte Carlo, e alcancado
com o uso das func
oes apresentadas para gerar variaveis Wishart. Utilizar
10.000 repetic
oes de Monte Carlo. Isso seria uma forma simples, embora nao
conclusiva, de checar se a funcao esta realizando as simulacoes corretamente.
4.6.5 Implementar func
oes R para gerarmos variaveis aleatorias log-normal e normalcontaminada elpticas multivariadas.
4.6.6 Implementar uma func
ao R para gerarmos variaveis aleatorias t multivariada
com par
ametros , e de dimensao p. Utilizar vetor de medias Rp
qualquer, n
ao necessariamente nulo. Tambem possibilitar a especificacao de
valores reais positivos para o parametro , como na rtmult, mas substituir o
gerador qui-quadrado pelo gerador gama de realizacoes de variaveis aleatorias,
o que diferenciaria a funcao a ser desenvolvida da rtmult.
Estatstica Computacional
Ferreira, D.F.
82
Gera
c
ao de Amostras Aleat
orias de Vari
aveis Multidimensionais
Ferreira, D.F.
Estatstica Computacional
Captulo 5
Algoritmos para M
edias,
Vari
ancias e Covari
ancias
Muitos algoritmos para o calculo de medias, variancias e covariancias sao imprecisos, podendo gerar resultados finais contendo grandes erros. A necessidade de
utilizarmos algoritmos eficientes para realizarmos estas tarefas simples sao evidentes
e ser
ao descritos neste captulo.
5.1
Introdu
c
ao
Ferreira, D.F.
84
Algoritmos para M
edias, Vari
ancias e Covari
ancias
5.2
Algoritmos Univariados
A ideia b
asica de utilizarmos algoritmos para media, para a soma de potencias
dos desvios em relac
ao a media ou para soma de produtos de desvios e aplicarmos
recursivamente as f
ormulas existentes. Se desejamos, por exemplo, obter a media de
n observac
oes, podemos inicialmente calcular a media da primeira observacao, que
e a propria. Em um segundo est
agio, propor uma expressao para atualizarmos a
media da primeira observac
ao, contemplando a segunda e assim sucessivamente. O
mesmo procedimento de atualizac
ao e aplicado `as variancias ou `as covariancias, no
caso de termos mais de uma vari
avel.
Para uma amostra de tamanho n dada por X1 , X2 , , Xn , a media e a variancia
amostral convencionais s
ao obtidas, respectivamente, por:
n
X
Xi
. = i=1
,
X
n
(5.2.1a)
n
X
n
X
1
2
S =
Xi2
n1
i=1
!2
Xi
i=1
(5.2.1b)
Xi
k1 = i=1
.
X
k1
No k-esimo passo teremos observado Xk e a media atualizada e:
Ferreira, D.F.
Estatstica Computacional
85
k
X
k =
X
Xi
i=1
(5.2.2)
Xi + Xk
i=1
k =
X
k
(k 1)
k1
X
Xi
Xk
(k 1)k
k
(k 1)Xk1 Xk
=
+
k
k
k1 Xk
X
k1
=X
+
k
k
i=1
resultando na equac
ao recursiva final
k =X
k1 + Xk Xk1 ,
X
k
(5.2.3)
1 = X1 .
para 2 k n, sendo que X
Da mesma forma se definirmos a soma de quadrados corrigidas das k primeiras
observac
oes amostrais 1 < k n por:
k
X
W 2k =
k
X
i=1
Xi2
!2
Xi
i=1
Ferreira, D.F.
86
Algoritmos para M
edias, Vari
ancias e Covari
ancias
k1
X
k1
X
W 2k =
Xi2
Xk2
!2
Xi + Xk
i=1
i=1
k
=W 2k1 + k Xk X
2
/(k 1)
(5.2.4)
A express
ao que desenvolvemos (5.2.4) e equivalente a apresentada por West
k obtida na
(1979)[17]. Isso pode ser demonstrado facilmente se substituirmos X
equacao (5.2.3) na equac
ao (5.2.4), de onde obtivemos:
k1
W 2k =W 2k1 + (k 1) Xk X
2
/k
(5.2.5)
W 2k =
k1
X
Xi2 + Xk2
!2
Xi + Xk
i=1
k
!2
i=1
k1
X
k1
X
Xi2 + Xk2
Xi
+ 2Xk
i=1
i=1
(k 1)
k1
X
Xi
+ 2(k 1)Xk
i=1
Xi2 + Xk2
k1
X
Xi2
i=1
=W 2k1 +
!2
i=1
k1
!2
k1
X
Xi
i=1
k1
X
Xi
+ Xk2 +
Xi + (k 1)Xk2
k(k 1)
!2
2(k 1)Xk
Xi
i=1
k(k 1)
2(k 1)Xk
k1
X
i=1
i=1
k1
X
Xi + Xk2
k
!2
i=1
k1
X
k1
X
k1
X
i=1
Xi
+
k1
X
i=1
k(k 1)
Xi
Xk2
k
(k 1)Xk2
k
k(k 1)
k(k 1)
2
k1 (k 1)X 2
(k 1)Xk1 2(k 1)Xk X
k
=W 2k1 +
+
,
k
k
k
Ferreira, D.F.
Estatstica Computacional
87
resultando em
k1
W 2k = W 2k1 + (k 1) Xk X
2
/k.
k1
W 2k,(x,y) =W 2k1,(x,y) + (k 1) Xk X
Yk Yk1 /k
(5.2.6)
k2
k
3
2
k1 )4
(k 4k + 6k 3)(Xk X
W 4k =W 4k1 +
+
k3
k1 )2 W 2k1 4(Xk X
k1 )W 3k1
6(Xk X
+
k2
k
W 3k =W 3k1 +
(5.2.7a)
(5.2.7b)
para 2 k n, sendo W 31 = 0 e W 41 = 0.
Desta forma podemos implementar a funcao medsqk() que retorna a media, a
soma de quadrado, cubo e quarta potencia dos desvios em relacao a media e variancia
a partir de um vetor de dados X de dimensao n.
> # fun
c~
ao para retornar a m
edia, somas de desvios em rela
c~
ao a m
edia
> # ao quadrado, ao cubo e quarta pot^
encia e vari^
ancia
> medsqk <- function(x)
+ {
+
n <- length(x)
if (n <= 1) stop("Dimens~
ao do vetor deve ser maior que 1!")
xb <- x[1]
W2 <- 0
W3 <- 0
Estatstica Computacional
Ferreira, D.F.
88
Algoritmos para M
edias, Vari
ancias e Covari
ancias
W4 <- 0
W4
W3
W2
xb
<- xb + aux / ii
S2 <- W2 / (n - 1)
+ }
> 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] 391.4519
5.3
Estatstica Computacional
89
as mesmas express
oes, tomando o devido cuidado para adapta-las para lidar com
operac
oes matriciais e vetoriais. Assim, para estimarmos o vetor de medias populacionais, devemos em vez de utilizar o estimador classico dos livros textos dado
por
n
X
=
X
Xi
i=1
utilizaremos a express
ao recursiva dada por
k =X
k1 + Xk Xk1 ,
X
k
(5.3.1)
1 = X1 .
para 2 k n, sendo que X
Da mesma forma, a adaptacao para p dimensoes da expressao (5.2.5) e direta e
o resultado obtido e:
k1
Wk =Wk1 + (k 1) Xk X
k1
Xk X
>
/k
(5.3.2)
<- nrow(x)
<- ncol(x)
if (n <= 1) stop("Dimens~
ao linha da matriz deve ser maior que 1!")
xb <- x[1,]
<- matrix(0, p, p)
Estatstica Computacional
Ferreira, D.F.
90
Algoritmos para M
edias, Vari
ancias e Covari
ancias
xb
<- xb + aux / ii
+
+
<- W / (n - 1)
+ }
> n <- 1000
> p <- 5
> 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.033960113
[5] -0.003781036
$covariancia
[,1]
[,2]
[,3]
[,4]
[1,]
0.97884928 0.03409395
0.04077857 -0.02616893
[2,]
0.03409395 1.01067454
0.08795528
[3,]
0.04077857 0.08795528
1.01216965 -0.06580606
0.04070132
1.02642780
[1,]
0.05669264
[2,]
0.06865559
[3,] -0.02624952
[4,] -0.02102594
[5,]
1.00952535
$SQP
[,1]
[,2]
[,3]
[,4]
[1,] 977.87043
34.05985
40.73780
-26.14277
[2,]
34.05985 1009.66387
87.86732
40.66061
[3,]
40.73780
87.86732 1011.15748
-65.74025
[4,] -26.14277
40.66061
-65.74025 1025.40138
[5,]
68.58694
-26.22327
56.63595
-21.00491
[,5]
[1,]
56.63595
[2,]
68.58694
[3,]
-26.22327
Ferreira, D.F.
Estatstica Computacional
5.4 Exerccios
[4,]
91
-21.00491
[5,] 1008.51583
> var(x)
[,2]
[,3]
[,4]
[1,]
0.97884928 0.03409395
0.04077857 -0.02616893
[2,]
0.03409395 1.01067454
0.08795528
[3,]
0.04077857 0.08795528
1.01216965 -0.06580606
0.04070132
1.02642780
[1,]
0.05669264
[2,]
0.06865559
[3,] -0.02624952
[4,] -0.02102594
[5,]
1.00952535
[5] -0.003781036
Felizmente, devido ao R usar precisao dupla e utilizar algoritmos de otima qualidade para estas tarefas, n
ao precisaremos nos preocupar com a implementacao de
func
oes como as apresentadas neste captulo. Mas se formos utilizar um compilador
da linguagem Pascal, Fortran ou C e C++ , deveremos fazer uso destes algoritmos,
pois somente assim alcancaremos elevada precisao, principalmente se tivermos lidando com dados de grande magnitude ou muito proximos de zero.
5.4
Exerccios
O coeficiente de assimetria e
Ferreira, D.F.
92
Algoritmos para M
edias, Vari
ancias e Covari
ancias
dado por
Ferreira, D.F.
Estatstica Computacional
Captulo 6
Aproxima
c
ao de Distribui
co
es
Algoritmos para a obtenc
ao de probabilidades foram alvos de pesquisas de muitas
decadas e ainda continuam sendo. A importancia de se ter algoritmos que sejam
rapidos e precisos e indescritvel. A maior dificuldade e que a maioria dos modelos
probabilsticos n
ao possui funcao de distribuicao explicitamente conhecida. Assim,
metodos numericos sofisticados sao exigidos para calcularmos probabilidades. Um
outro aspecto e a necessidade de invertermos as funcoes de distribuicao para obter
quantis da vari
avel aleat
oria para uma probabilidade acumulada conhecida. Nos
testes de hip
oteses e nos processos de estimacao por intervalo e por regiao quase
sempre utilizamos estes algoritmos indiretamente sem nos darmos conta disso.
Neste captulo vamos introduzir estes conceitos e apresentar algumas ideias basicas de metodos gerais para realizar as quadraturas necessarias. Metodos numericos
particulares ser
ao abordados para alguns poucos modelos. Tambem abordaremos
separadamente os casos discreto e contnuo. Para finalizarmos apresentaremos as
principais func
oes pre-existentes do R para uma serie de modelos probabilsticos.
6.1
Introdu
c
ao
N
ao temos muitas preocupacoes com a obtencao de probabilidades e quantis,
quando utilizamos o R, pois a maioria dos modelos probabilsticos e das funcoes
especiais j
a est
a implementada. Nosso objetivo esta alem deste fato, pois nossa
intenc
ao e buscar os conhecimentos necessarios para ir adiante e para entendermos
como determinada func
ao opera e quais sao suas potencialidades e limitacoes.
Vamos iniciar nossa discussao com a distribuicao exponencial para chamarmos
Estatstica Computacional
Ferreira, D.F.
94
Aproxima
c
ao de Distribui
c
oes
x>0
(6.1.1)
e a funcao de distribuic
ao
F (x) = 1 ex .
(6.1.2)
ln(1 p)
.
(6.1.3)
Implementamos, em R, as func
oes densidade, de distribuicao e inversa da distribuicao e as denominamos pdfexp, cdfexp e icdfexp, respectivamente. Estas funcoes
sao:
> # fun
c~
ao densidade exponencial
> # f(x) = lambda*exp(-lambda * x)
> pdfexp <- function(x, lambda = 1)
+ {
+
return(fx)
+ }
> # fun
c~
ao de distribui
c~
ao exponencial
> # F(x) = 1 - exp(-lambda * x)
> cdfexp <- function(x, lambda = 1)
+ {
+
Fx <- 1 - exp(-lambda * x)
return(Fx)
+ }
> # fun
c~
ao inversa da distribui
c~
ao exponencial
> # q = -log(1 - p) / lambda
> icdfexp <- function(p, lambda = 1)
+ {
Ferreira, D.F.
Estatstica Computacional
95
return(q)
+ }
> 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
(x )2
f (x) =
exp
2 2
2 2
1
(6.1.4)
6.2
Ferreira, D.F.
96
Aproxima
c
ao de Distribui
c
oes
n x
P (X = x) =
p (1 p)(nx)
x
(6.2.1)
F (x) =
x
X
n
t=0
pt (1 p)nt .
(6.2.2)
<- function(x, n, p)
+ {
+
if (p>0.5)
pp <- 1 - p
<- n - x
} else pp <- p
q <- 1 - pp
qn <- q^n
<- pp / q
Ferreira, D.F.
Estatstica Computacional
cdf <- f
if (x > 0)
<- r * (n + 1)
u <- 0
while (u < x)
<- u + 1
<- f * (g / u - r)
97
# while
} # if x > 0
+ } # fun
c~
ao
> # inversa da fun
c~
ao distribui
c~
ao binomial(n, p)
> icdfbinom <- function(prob, n, p)
+ {
+
<- 1 - p
qn <- q^n
<- p / q
<- r * (n + 1)
<- 0
<- qn
<- prob
u <- u - f
x <- x + 1
f <- f * (g / x - r)
return(x)
# while
+ }
> # 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
Estatstica Computacional
Ferreira, D.F.
98
Aproxima
c
ao de Distribui
c
oes
A func
ao de distribuic
ao binomial possui uma relacao exata com a funcao distri-
buicao beta. Se tivermos algoritmos para obter a beta incompleta podemos utilizar
esta relac
ao para obter probabilidades da distribuicao binomial. A funcao de distribuicao binomial, F (x), se relaciona com a funcao beta incompleta, Ip(,), da
seguinte forma:
(
F (x; n,p) =
1 Ip (x + 1,n x)
se 0 x < n
se x = n.
(6.2.3)
Desta forma podemos antever a importancia de conhecermos algoritmos de integracao numerica das distribuic
oes contnuas. Isso fica mais evidente quando percebemos que para grandes valores de n os algoritmos recursivos sao ineficientes e
podem se tornar imprecisos. Na sec
ao 6.3 apresentaremos alguns metodos gerais de
de integrac
ao para func
oes contnuas. No script seguinte utilizamos a relacao (6.2.3)
para a obtenc
ao da func
ao de distribuicao da binomial.
> # fun
c~
ao de probabilidade e distribui
c~
ao da binomial(n, p)
> # a partir da rela
c~
ao com a fun
c~
ao beta incompleta
>
> Fbinbeta <- function(x, n, p)
+ {
+
if (x < n)
alpha <- x + 1
beta
<- n - x
cdf
return(cdf)
+ }
> # exemplo de uso
> p <- 0.5
> n <- 4
> x <- 3
> Fbinbeta(x, n, p)
[1] 0.9375
> pbinom(x, n, p)
[1] 0.9375
Ferreira, D.F.
Estatstica Computacional
99
A distribuic
ao Poisson e a segunda que consideraremos. Existe relacao da funcao
de distribuic
ao da Poisson com a gama incompleta, porem utilizaremos o metodo
recursivo para obtermos funcao de probabilidade, a funcao de distribuicao e inversa
da func
ao de distribuic
ao. Se uma variavel aleatoria discreta X com valores x = 0,
1, 2, 3, possui distribuic
ao Poisson com parametro , entao podemos definir a
func
ao de probabilidade por
P (X = x) =
x e
x!
(6.2.4)
P (X = x) = P (X = x 1) ,
x
(6.2.5)
qn
<- exp(-lamb)
cdf <- f
if (x > 0)
u <- 0
while (u < x)
<- u + 1
<- f * lamb / u
# while
} # if x>0
+ }
> # Inversa da fun
c~
ao distribui
c~
ao Poisson(lamb)
>
Estatstica Computacional
Ferreira, D.F.
100
Aproxima
c
ao de Distribui
c
oes
qn <- exp(-lamb)
<- 0
<- qn
<- p
u <- u - f
x <- x + 1
f <- f * lamb / x
return(x)
# while
+ }
> # exemplos de utiliza
c~
ao
>
> lamb <- 3
> x
<- 5
> p
<- 0.95
6.3
Estatstica Computacional
101
(x )2
exp
f (x) =
2 2
2 2
.
(6.3.1)
A func
ao de distribuic
ao de probabilidade nao pode ser obtida explicitamente e
e definida por:
F (x) =
(t )2
exp
dt.
2 2
2 2
1
(6.3.2)
xn
f (x)dx =
x1
h
(f1 + f2 ) + O(h3 f 00 ),
2
(6.3.3)
Ferreira, D.F.
102
Aproxima
c
ao de Distribui
c
oes
xn
f (x)dx = h
x1
f1
fn
+ f2 + f3 + + fn1 +
2
2
+O
(xn x1 )3 f 00
n2
. (6.3.4)
if (n == 1)
else
it
for (j in 1:it)
<- 2^(n - 2)
<- a + 0.5 * del
<- x + del
# if then else
return(s)
Ferreira, D.F.
Estatstica Computacional
103
+ }
> # fun
c~
ao para executar quadraturas de fun
c~
oes definidas em func()
> # at
e que uma determinada precis~
ao tenha sido alcan
cada
> qtrap <- function (func, a, b)
+ {
+
EPS
<- 1.e-9
jmax <- 20
<- 1
fim
<- 0
repeat
s <- trapzd(func, a, b, s, j)
# evitar converg^
encia prematura esp
uria
if (j > 5)
olds <- s
if (fim == 1) break
j <- j
+ 1
if (j > jmax)
return(s)
+ }
return(fx)
+ }
> #fun
c~
ao de distribui
c~
ao de probabilidade normal padr~
ao
>
> cdfnorm <- function(func,x)
+ {
+
Estatstica Computacional
Ferreira, D.F.
104
Aproxima
c
ao de Distribui
c
oes
Fx <- 0.5 - Fx
return(Fx)
else
+ }
> # exemplo de uso
> z <- 1.96
> p <- cdfnorm(fdpnorm, z)
> p
[1] 0.9750021
evidente que temos metodos numericos gerais mais eficientes do que o apresenE
tado. As quadraturas gaussianas representam uma classe de metodos que normalmente sao mais eficientes que este apresentado. Nao vamos nos atentar para estes
metodos gerais, por duas raz
oes b
asicas. A primeira e que existem metodos especficos para obtermos as quadraturas dos principais modelos probabilsticos que sao
mais eficientes. A maior eficiencia destes metodos especficos se da por dois aspectos:
velocidade de processamento e precisao. A segunda razao refere-se ao fato de que
no R estas rotinas especficas j
a estao implementadas. Como ilustracao, podemos
substituir a func
ao que implementamos cdfnorm() pela pre-existente no R pnorm().
Vamos ilustrar um destes algoritmos especializados para obtermos a funcao de distribuicao da normal padr
ao. O algoritmo de Hasting possui erro maximo de 1106
e e dado por:
(
(x) =
se x 0
1G
se x > 0
(6.3.5)
G = (a1 + a2 2 + a3 3 + a4 4 + a5 5 )(x)
em que
=
1
1 + 0,2316418|x|
Estatstica Computacional
105
>
> hcdfnorm <- function(x)
+ {
+
a1
a3
a5
<- 1.330274429
+
+
Fx <- 1 - G
return(Fx)
+ }
> # exemplo de uso
>
> z <- 1.96
> p <- hcdfnorm(z)
> p
[1] 0.9750022
retangulo A = |z1 |/ 2. Se a area sob a curva, que desejamos estimar, for definida
por A1 , podemos gerar n
umeros uniformes u1 entre 0 e |z1 | e n
umeros uniformes
Estatstica Computacional
Ferreira, D.F.
106
Aproxima
c
ao de Distribui
c
oes
<- abs(x)
u1
<- runif(nMC) * z
# 0 < u1 < z
u2
f1
return(Fx)
+ }
> # exemplo de uso
>
> mcdfnorm(1.96, 1500000)
[1] 0.9755763
Z
0
1
2
et /2 dt =
2
abs(z)
(t)dt
0
Z
0
Ferreira, D.F.
abs(z)
#
m
1 X
(t)dt z
(zi ) ,
m
"
i=1
Estatstica Computacional
107
x <- runif(m,0,abs(z))
+
+
+ }
> # Exemplo
> m <- 15000
# n
umero de pontos muito inferior ao caso anterior
[1] 0.9734084
> pnorm(z)
[1] 0.9750021
> # Ordem de erro: O(m^(-1/2))
> 1/m^0.5
[1] 0.008164966
> # verifica
c~
ao da converg^
encia
> set.seed(1000)
> x <- runif(m, 0, abs(z))
> pdf <- (1/(2*pi)^0.5)*exp(-(x^2)/2)
> if (z < 0) cdf <- 0.5 - abs(z)*cumsum(pdf)/(1:m) else
+
> plot(cdf,type="l",xlab="Simula
c~
oes MC")
> abline(a=pnorm(z), b=0, col="red") # linha com o valor real
Estatstica Computacional
Ferreira, D.F.
Aproxima
c
ao de Distribui
c
oes
1.05
0.95
1.00
cdf
1.10
108
5000
10000
15000
Simulaes MC
z =1 (p),
em que 0 < p < 1 e o valor da funcao de distribuicao da normal padrao, 1 (p) e
a funcao inversa da func
ao de distribuicao normal padrao no ponto p e z o quantil
correspondente, que queremos encontrar dado um valor de p. Podemos apresentar
esse problema por meio da seguinte equacao
(z) p =0,
em que (z) e a func
ao de distribuicao normal padrao avaliada em z. Assim, nosso
objetivo e encontrar os zeros da funcao f (z) = (z) p. Em geral, podemos resolver
essa equac
ao numericamente utilizando o metodo de Newton-Raphson, que e um
Ferreira, D.F.
Estatstica Computacional
109
processo iterativo. Assim, devemos ter um valor inicial para o quantil para iniciarmos
o processo e no (n + 1)-esimo passo do processo iterativo podemos atualizar o valor
do quantil por
zn+1 =zn
f (zn )
,
f 0 (zn )
(6.3.6)
em que f 0 (zn ) e derivada de primeira ordem da funcao para a qual queremos obter
as razes avaliada no ponto zn . Para esse caso particular temos que
zn+1 =zn
[(zn ) p]
,
(zn )
(6.3.7)
+ }
> # M
etodo de Newton-Raphson para obtermos quantis da distribui
c~
ao normal
> # com m
edia real mu e desvio padr~
ao real positivo sig, dado 0 < p < 1
> # utiliza as fun
c~
oes phi(z) e
>
> qPhi <- function(p, mu = 0, sig = 1)
+ {
+
it
<- 1
Estatstica Computacional
Ferreira, D.F.
110
Aproxima
c
ao de Distribui
c
oes
itmax
<- 2000
eps
<- 1e-8
while (!convergiu)
if ((abs(z0 - z1) <= eps * z0) | (it > itmax)) convergiu <- TRUE
it <- it + 1
z0 <- z1
+ }
> # Exemplo de uso
>
> p
<- 0.975
> mu
<- 0
Poderamos, ainda, ter utilizado o metodo da secante, uma vez que ele nao
necessita da derivada de primeira ordem, mas precisa de dois valores iniciais para
iniciar o processo e tem convergencia mais lenta. O leitor e incentivado a consultar
Press et al. (1992)[13] para obter mais detalhes. Tambem poderia ter sido usada a
funcao cdfnorm, que utiliza o metodo trapezoidal. Nesse caso a precisao seria maior,
mas o tempo de processamento tambem e maior. Para isso bastaria substituir a
linha de comando
> z1 <- z0 - (hcdfnorm(z0) - p) / phi(z0)
por
> z1 <- z0 - (cdfnorm(z0) - p) / phi(z0)
Ferreira, D.F.
Estatstica Computacional
6.4 Fun
c
oes Pr
e-Existentes no R
111
6.4
Fun
c
oes Pr
e-Existentes no R
6.5
Exerccios
Estatstica Computacional
1
(1 + x2 )
Ferreira, D.F.
112
Aproxima
c
ao de Distribui
c
oes
Utilizar o metodo trapezoidal estendido para implementar a obtencao dos valores da distribuic
ao Cauchy. Podemos obter analiticamente tambem a funcao
de distribuic
ao e sua inversa. Obter tais funcoes e implementa-las no R. Utilize
as func
oes R pre-existentes para checar os resultados obtidos.
6.5.4 Utilizar o metodo Monte Carlo descrito nesse captulo, para obter valores da
func
ao de distribuic
ao Cauchy, apresentada no exerccio proposto 6.5.3. Utilizar alguns valores numericos para ilustrar e comparar com funcoes implementadas em R para esse caso. Qual deve ser o n
umero mnimo de simulacoes
Monte Carlo requeridas para se ter uma precisao razoavel?
Ferreira, D.F.
Estatstica Computacional
Refer
encias Bibliogr
aficas
[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. 51
[2] DACHS, J. N. W. Estatstica computacional. Uma introduc
ao ao Turbo Pascal.
Livros Tecnicos e Cientficos, 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. 53
[4] DEVROY, L. Non-uniform random variate generation. Springer-Verlag, New
York, 1986. 843p. 54, 55
[5] FERREIRA, D. F. Estatstica Multivariada. Editora UFLA, Lavras, 2008.
662p. 47
[6] JOHNSON, R. A.; WICHERN, D. W. Applied multivariate statistical analysis.
Prentice Hall, New Jersey, 4th edition, 1998. 816p. 47
[7] KACHITVICHYANUKUL, V.; SCHMEISER, B. W. Binomial random variate
generation. Communications of the ACM, 31(2):216222, 1988. 53, 55
[8] MARSAGLIA, G.; BRAY, T. A. A convenient method for generating normal
variables. SIAM Review, 6(3):260264, 1964. 47
[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. 29
Estatstica Computacional
Ferreira, D.F.
REFERENCIAS
BIBLIOGRAFICAS
114
Ferreira, D.F.
Estatstica Computacional
Indice Remissivo
algoritmo
binomial, 54
exponencial, 39, 40, 94
Hasting, 104
amostragem
de probabilidade
binomial, 51, 96
por rejeic
ao, 37
geometrica, 52
beta
Poisson, 99
incompleta, 98
densidade
exponencial, 94
densidade
normal, 95
exponencial, 39
normal multivariada, 66
log-normal, 46
Wishart, 73
normal, 46
Wishart invertida, 74
Tukey-lambda, 51
distribuic
ao
binomial, 51
de combinac
oes
lineares, 66
funcoes
trigonometricas, 47
geracao
de variaveis
t multivariada
esferica, 77
equac
ao
t multivariada, 78
gerador
padrao
mnimo, 26
recursiva, 85
Jacobiano
func
ao
da transformacao, 47
de distribuic
ao
binomial, 96
lema
exponencial, 94
genese da binomial, 52
normal, 101
soma de binomiais, 52
de distribuic
ao inversa
Estatstica Computacional
tempo de espera
Ferreira, D.F.
INDICE REMISSIVO
116
da exponencial, 53
da geometrica, 52
simulacao
matrizes aleatorias
Wishart, 75
linguagem
Wishart invertidas, 75
de alto-nvel, 25
soma
metodo
de produtos, 87
Box-M
uller, 46
congruencial, 24
da invers
ao
discreto, 54
matriz
covari
ancias, 89
soma de quadrados e produtos, 89
teorema
da transformacao
de probabilidades, 36
Wishart
invertida, 74
Mersenne
Twister, 29
n
umeros
aleatorios, 23, 26
pseudo-aleat
orios, 23
uniformes, 24
precisao
dupla, 28
quadraturas
gaussianas, 104
Monte Carlo, 105
quantis
exponencial, 94
random, 24
ranuni, 31
regra
trapezoidal
estendida, 101
runif, 31
Ferreira, D.F.
Estatstica Computacional