• Nenhum resultado encontrado

Estatística Computacional A - Aula Geradores Geradores pseudoaleatórios a distribuição uniforme Prof. José Carlos Fogo

N/A
N/A
Protected

Academic year: 2021

Share "Estatística Computacional A - Aula Geradores Geradores pseudoaleatórios a distribuição uniforme Prof. José Carlos Fogo"

Copied!
24
0
0

Texto

(1)

Estatística Computacional A - Aula Geradores

Geradores pseudoaleatórios – a distribuição uniforme

Prof. José Carlos Fogo

Seja X uma v.a. contínua, então X tem distribuição uniforme no intervalo (a, b), a,bℝ, se a probabilidade de ocorrência de X em subintervalos de mesmos tamanhos, contidos em (a, b), for constante.

Considere um ponto qualquer x0(a,b) e sejam os intervalos: ) , ( ) , (k k  a b e (,)(a,b), então, se X tem distribuição uniforme(a, b):

x0(k,k)

P

x0(,)



P .

A função de distribuição de probabilidade (fdp) e função de distribuição, ou função distribuição acumulada (fda) de X, são dadas por:

Função distribuição de probabilidade (fdp) Função de distribuição (fda)

            b x b x a a b a x x f , 0 , 1 , 0 ) (              b x b x a a b a x a x x F , 1 , , 0 ) (

Por definição, a função de distribuição (fda) é dada por F x f t dt

x R

 () ) ( e, no caso da uniforme em ) , (a b temos: ) , ( , 1 ) ( ) ( x a b a b a x dt a b dt t f x F x a x a       

.

Notação: se X tem distribuição uniforme no intervalo (a,b), usamos a seguinte notação: X

~

U(a,b) ou X

~

uniforme(a,b).

(2)

A distribuição uniforme(0, 1).

Caso especial da uniforme em (a,b) quando a0 e b1, tem função de distribuição de probabilidade e função de distribuição dadas por:

Função distribuição de probabilidade (fdp) Função de distribuição (fda)

          1 0 1 0 1 0 , 0 ) ( x x x x f           1 1 1 0 0 , 0 ) ( x x x x x F Notação: X ~ U(0,1).

A distribuição uniforme(0,1) é muito importante na geração de valores pseudoaleatórios pois ela servirá de base para a geração de todas as demais distribuições de probabilidade.

Se 0 ≤ u ≤ 1 é um valor obtido a partir de um gerador de números pseudoaleatórios, então u segue uma distribuição uniforme no intervalo (0, 1) e,

X u

F u u P   ( ) .

Logo, com técnicas apropriadas, geramos a distribuição de probabilidade de qualquer v.a. X, a partir da geração de u.

(3)

Gerando de distribuições discretas

Caso 1: a distribuição de Bernoulli(p) – (gerando um sucesso)

Se pretendemos simular a ocorrência de um fenômeno que aparece em uma população numa proporção p ( 0 ≤ p ≤ 1), então, geramos um valor u ~ U(0,1), e se u(0, p) dizemos que geramos um sucesso, caso contrário, foi gerado um fracasso.

Note que gerar sucesso ou fracasso equivale na geração de uma v.a. de Bernoulli com parâmetro p, em que, p = P(sucesso).

Como o intervalo (0, p está contido em ) (0,1), podemos gerar um sucesso com qualquer intervalo de tamanho p que também esteja contido em (0,1). Por exemplo, seja o intervalo:

) 1 , 0 ( ) , (k kp  ,

então, se o valor gerado u(k,kp), foi gerado um sucesso.

Código em R para a geração de ensaios de Bernoulli com probabilidade de sucesso p:

# Bernoulli(p)

#

# m = número de amostras

# p = probab. de sucesso

#########################

# 1a. situação: gerando sucesso no intervalo (0, p)

####################################################

bernoulli.1 <- function(m,p){

x <- rep(NA,m)

for(i in 1:m){

k <- 0

if(runif(1)<=p) k <- 1

x[i] <- k

}

return(x)

}

# verificando

##############

m <- 1000

pr <- 0.65

y <- bernoulli.1(m,pr)

mean(y)

var(y)

pr*(1-pr)

(4)

# 2a. situação: gerando sucesso no intervalo (p

0

, p

0

+ p)

#########################################################

bernoulli.2 <- function(m,p){

po <- runif(1)

while(po+p > 1) po <- runif(1)

x <- rep(NA,m)

for(i in 1:m){

k <- 0

u <- runif(1)

if(u>=po & u<po+p) k <- 1

x[i] <- k

}

return(list(x=x,intervalo=c(po,p+po)))

}

# verificando

##############

m <- 1000

pr <- 0.36

y <- bernoulli.2(m,pr)

y$intervalo

mean(y$x)

var(y$x)

pr*(1-pr)

(5)

Caso 2: a distribuição de binomial(n, p)

Para a geração de uma v.a. binomial(n, p), devemos gerar n v.a.´s de Bernoulli (ou ensaios) e contar quantos sucessos ocorrem nesses n ensaios.

Código em R para a geração de m amostras binomiais com parâmetros n e p:

# binomial(n,p)

#

# m = número de amostras

# n = ensaios de Bernoulli

# p = probabilidade de sucesso

#################################

# 1a. situação

###############

binomial.1 <- function(m,n,p){

x <- rep(NA,m)

for(i in 1:m){

k <- runif(n)

v <- which(k <= p)

x[i]<-length(v)}

return(x)

}

# verificando

##############

m <- 1000

n <- 10

p <- 2/3

b1 <- binomial.1(m,n,p)

mean(b1)/n

mean(b1)

var(b1)

# 2a. situação: modo simplificado

##################################

binomial <- function(m,n,p){

x <- rep(NA,m)

for(i in 1:m)x[i]<-length(which(runif(n)<=p))

return(x)

}

(6)

# verificando

##############

m <- 1000

n <- 8

p <- 0.62

b2 <- binomial(m,n,p)

mean(b2)/n

mean(b2)

var(b2)

(7)

Caso 3: a distribuição binomial negativa, BN(r, p)

Para a geração de uma v.a. BN(r, p), devemos gerar v.a.´s de Bernoulli e contar os fracassos até a ocorrência do r-ésimo sucesso.

Obs: a v.a. binomial negativa pode, ainda, ser definida como o número de ensaios até o r-ésimo sucesso. Nesse caso, devemos contar os ensaios e não apenas os fracassos.

Código em R para a geração de m amostras binomiais negativas com parâmetros r e p:

# binomial negativa: BN(r,p)

# (contando fracassos)

#

# m = número de amostras

# r = número de sucessos

# p = probab. de sucesso

#############################

b.neg <- function(m,r,p){

x <- rep(NA,m)

for(i in 1:m){

f <- 0

s <- 0

while(s < r){

k <- runif(1)

while(k > p){

f <- f+1

k <- runif(1)

}

s <- s+1

}

x[i] <- f

}

return(x)

}

# verificando

##############

m <- 1000

r <- 3

p <- 0.25

bn <- b.neg(m,r,p)

mean(bn)

var(bn)

(8)

Caso 4: a distribuição Poisson(λ)

Para a geração de uma v.a. Poisson(λ), vamos explorar uma relação entre existente entre as distribuições exponencial e Poisson.

Considere um evento qualquer como por exemplo chegadas de pessoas numa fila de banco, decolagens de aviões num aeroporto, recebimentos de chamadas numa central telefônica ou até mesmo defeitos na superfície de um tecido. Considere, ainda, que a taxa de ocorrência deste evento por unidade de tempo, é λ.

Se definirmos uma v.a. T para quantificar o tempo “entre duas ocorrências sucessivas” deste evento, então, T terá uma distribuição exponencial com parâmetro λ, ou seja,

T ~ exponencial(λ).

Por outro lado, se definirmos uma v.a. X que conta o número de ocorrências do evento num intervalo de tempo fixo (igual à unidade de tempo), X terá uma distribuição de Poisson com o mesmo parâmetro λ

X ~ Poisson(λ).

Obs: em muitas situações a distribuição de Poisson considera intervalos de tempos Δt. Nessas situações, o parâmetro da distribuição será dado por λΔt.

Exemplo 1: Se o tempo entre chegadas de clientes na fila de um banco tem distribuição exponencial com taxa λ = 5 chegadas/minuto, ou seja, T ~ exponencial(5), então, a v.a. que conta o número de pessoas que chegam na fila a cada intervalo de um minuto tem distribuição de Poisson(5).

Desta forma, a v.a. que conta o número de pessoas que chegam na fila:

i) a cada intervalo Δt = 3 minuto, tem distribuição de Poisson(5·3), ou seja, Poisson(15); ii) a cada intervalo Δt = 24 segundos, tem distribuição de Poisson(2).

Então, para a geração de uma v.a. Poisson(λ), devemos seguir os seguintes passos:

i) definir o intervalo de tempo Δt para contagem dos eventos da Poisson e fixar o limite superior do intervalo com o valor Δt;

ii) inicializar o relógio (normalmente com o tempo 0); iii) inicializar o contador;

iv) gerar t da distribuição exponencial(λ) pelo processo da transformação inversa e incrementar o relógio fazendo: relógio = relógio + t;

v) repetir (iv), acumulando a contagem, até o relógio ultrapassar o limite superior do intervalo; vi) incrementar o limite superior do intervalo com Δt, para avançar para o próximo intervalo; vii) repetir os passos (iii) a (v) até completar o número de amostras desejadas.

(9)

Código em R para a geração de m amostras de Poisson com parâmetro λ:

# Poisson(lamb)

#

# m = número de amostras

# lamb = taxa de ocorrência

############################

gera.poisson <- function(m,lamb){

x <- rep(NA,m)

tempo <- -log(1-runif(1))/lamb

dt <- 1

for(i in 1:m){

cont <- 0

while(tempo <= dt){

cont <- cont+1

t <- -log(1-runif(1))/lamb

tempo <- tempo+t

}

x[i] <- cont

dt <- dt+1 }

return(x) }

# verificando

##############

m <- 1000

lamb <- 2.5

poi <- gera.poisson(m,lamb)

mean(poi)

var(poi)

(10)

Geração de distribuições contínuas.

O processo anterior é apropriado para a geração de variáveis aleatórias discretas, especialmente binomiais.

Para o caso contínuo, há uma relação funcional entre a função de distribuição F(x) (fda) de uma v.a. com a distribuição uniforme(0,1) que permite a geração de amostras de qualquer distribuição contínua de probabilidade.

A geração de v.a’s contínuas é feita com a aplicação de técnicas apropriadas que exploram esta relação, dentre as quais destacamos: transformação inversa, relações entre v.a’s (somas e funções) e envelopamento.

Caso 1: A técnica da transformação inversa

Teorema: Seja uma v.a. X com função distribuição de probabilidade f(x). Então a sua função de distribuição acumulada F(x) segue uma distribuição uniforme(0,1), ou seja,

F(x)

~

uniforme(0,1).

Desta forma, se gerarmos um valor 0 ≤ u ≤ 1, podemos obter uma amostra de X a partir da transformação inversa:

 seja u

~

uniforme(0,1);

 então, xF1(u) tem distribuição F(x).

Nota: Para a utilização do método da transformação inversa, a fda F(x), da v.a. X, precisa ser determinada algebricamente. Nos casos em que não é possível se determinar F(x) devemos utilizar outra técnica para a geração de valores de X.

Exemplo 2: Seja uma v.a. X com função distribuição de probabilidade exponencial(λ) cuja f(x) é da forma . 0 , 0 , e ) (x   x  f x

Então, a sua função distribuição acumulada é dada por

. e 1 ) ( e ) ( 0 x t x x F dt x F        

Para gerar uma amostra de valores com distribuição exponencial(λ) utilizamos o seguinte procedimento: a) gerar u ~ U(0,1);

(11)

c) determinar o valor de x pela transformação inversa:     ln(1 u) x .

Desta forma, teremos x ~ exponencial(λ).

Assumindo λ = 2, f(x)2e2x e F(x)1e2x. Então, gerando u ~ U(0,1), 2 ) 1 ln( u

x   tem distribuição exponencial(2).

Caso 2: Relação entre variáveis

Podemos utilizar a relação entre v.a.´s, tais como somas ou funções para a geração de algumas variáveis aleatórias cujas F(x) não podem ser determinadas algebricamente ou não permitem a obtenção da inversa

) ( 1 F .

A seguir vamos apresentar alguns casos que exploram estas relações:

i)

geração de v.a gama(α, λ), cujo parâmetro α é um valor inteiro.

Seja X uma v.a. com distribuição gama com parâmetros α e λ, ou seja X ~ gama(,), então sua fdp é dada por:

 

x x x f        e ) ( 1 , x ≥ 0, α > 0, λ > 0,

em que () é a função gama, sendo que

       0 1 e ) ( x xdx.

Resultado 1: seja a v.a. X1 com distribuição gama(1,)e a v.a. X2 com distribuição gama(2,) então, asoma X1 + X2 tem distribuição gama(12,).

Resultado 2: a distribuição exponencial(λ), é um caso especial da gama para α = 1, ou seja:

exponencial(λ) ≡ gama(1, λ).

Resultado 3: sejam X1, X2, . . . , Xn v.a.´s independentes e identicamente distribuídas (iid) segundo uma exponencial(λ), então, a soma:

  n i i X S 1 ,

tem distribuição gama com parâmetros n e λ, ou seja: S ~ gama(n,).

Para gerar uma v.a. gama(n,), com n inteiro, basta gerar n valores da exponencial(λ) e somá-los.

ii)

geração de v.a normal(μ, σ

2

), em que μ é a média da distribuição e σ

2

é a sua variância.

Seja X uma v.a. com distribuição normal com parâmetros μ e σ2, ou seja X ~ normal(μ, σ2), então sua fdp é dada por:

(12)

             2 2 2 ) ( exp 2 1 ) (x x f , − < x < , − < μ < , σ > 0.

Resultado 1: Seja X ~ normal(μ, σ2) e seja a variável padronizada

    X

Z , então Z tem distribuição normal(0, 1), ou normal padrão. Z é um caso especial da normal(μ, σ2) quando μ = 0 e σ2 = 1 e sua fdp é:

2 / 2 e 2 1 ) (z z f    , − < z < .

Resultado 2, transformação Box-Muller: sejam v.a.´s U1 e U2 com distribuição uniforme(0,1), então, as v.a.´s Z1 e Z2 , resultantes das transformações

) ln( 2 ) 2 cos( 2 1 1 U U Z    ) ln( 2 ) 2 sen( 2 1 2 U U Z    ,

são independentes com distribuição normal(0,1).

Desta forma, gerando u1 e u2 da uniforme(0,1), a partir da transformação de Box-Muller, obtemos duas amostras, z1 e z2, da normal(0, 1).

E, para gerar uma v.a. normal(μ, σ2), utilizamos a relação inversa da padronização da normal: se Z tem distribuição normal(0, 1), então, XZ tem distribuição normal(μ, σ2).

iii)

geração de v.a quiquadrado com ν graus de liberdade,

2

.

Seja X uma v.a. com distribuição quiquadrado com ν graus de liberdade, ou seja X ~ 2, então sua fdp é dada por:

 

/2 1e /2 2 / 2 1 ) (x x x f       , x > 0 e ν > 0.

Resultado 1: A distribuição quiquadrado com ν graus de liberdade é um caso especial da gama(a, b), quando

2 /

 

a e b1/2, ou seja, 2gama(/2,1/2).

Resultado 2: Seja X ~ normal(0, 1), então YX2 tem distribuição quiquadrado com ν = 1 grau de liberdade,

ou seja: Y ~ 12 e sua fdp é dada por:

 

1/2 1e /2 2 / 1 2 1 ) (x y y f     , y > 0.

Resultado 3: Do resultado 1 da distribuição gama, se X1, X2, . . . , Xk são v.a.´s independentes e identicamente distribuídas12, então a soma

  k i i X S 1

tem distribuição quiquadrado com k graus de liberdade: S ~ 2k.

Então, para gerar uma v.a. quiquadrado com k graus de liberdade (k inteiro), basta gerar k valores 12da relação da quiquadrado com a gama (resultado 1) ou com a normal (resultado 2) e somá-las.

(13)

Caso 3: O método do envelopamento

Considere que desejamos gerar valores de uma distribuição de probabilidade f(x) e que não é possível utilizar nenhum os métodos anteriores. Uma possibilidade seria utilizar o método do envelopamento.

Para a aplicação do envelopamento precisamos de uma função g(x), tal que: g(x) f(x) x. Os passos para gerar de um valor de f(x) pelo método do envelopamento são:

i) definir um intervalo (a, b) tal que

( ) 1 b

a

dx x

f ;

ii) encontrar uma função g(x) tal que g(x)f(x), x(a,b).

Uma possibilidade (não muito prática) é considerar a função g(x) = m, em que mmax[f(x)], num processo chamado envelopamento uniforme (ver exemplo);

iii) gerar u1 ~ U(a,b) e u2 ~ U[0,g(u1)];  se u2 > f(u1), então, o valor u1 é descartado;  se u2 ≤ f(u1), então, u1 é um valor de f(x) e,

 o processo é repetido até que o total de amostras de f(x) seja obtido.

Exemplo 3: Gerar uma amostra aleatória de uma v.a. X com distribuição de Cauchy pelo método do envelopamento uniforme.

 A fdp de X, dada pela linha vermelha, é:

) 1 ( 1 ) ( 2 x x f    , − < x <  ;  O intervalo (a, b) foi definido como (−5, 5);

 O ponto máximo de f(x) ocorre em x = 0, sendo é igual a m = 0.31831;  A função g(x), linha azul, é dada por: g(x) = m = 0.31831 (constante).

No exemplo apresentado pela Figura 1, o valor u1 foi gerado de uma uniforme(−5, 5) e o valor u2 de uma uniforme(0, m), formando o ponto identificado como P.

Como f(u1) < u2, então o valor u1 (atual) deve ser descartado, um novo par (u1, u2) deve ser gerado e o processo repetido até a obtenção da amostra completa da Cauchy.

Observe que, com o envelope uniforme uma quantidade muito grande de pontos será descartada, como podemos observar pela região não pintada na figura, entre as linhas vermelha e azul.

(14)

Avaliando geradores pseudoaleatórios

A avaliação dos geradores pseudoaleatórios é feita de maneira exaustiva, segundo diferentes critérios e teste, desenvolvidos especialmente para tal.

Um “bom” gerador deve passar por todos esses critérios e testes para garantir que os valores gerados atendem aos requisitos de “aleatoriedade” exigidos para sua aplicação em pesquisas científicas avançadas.

Nesta disciplina vamos apresentar dois testes elementares para a verificação da “aderência” de uma amostra à uma distribuição de probabilidade: o teste quiquadrado de Pearson e o teste de Kolmogorov-Smirnov. Estes testes não devem ser vistos em hipótese alguma como testes para a avaliação dos geradores, mas podem servir para uma rápida verificação se os dados gerados seguem, de fato, a distribuição de probabilidade desejada.

Caso 1: o teste de quiquadrado de Pearson

Considere uma v.a. X com função distribuição de probabilidade discretizada em k classes, sendo que a probabilidade de ocorrência de X em cada classe é igual a pi, i = 1, 2, . . ., k, em que 1

1 

k i i p . Classes de X pi classe 1 p1 classe 2 p2 classe 3 p3 ⁞ ⁞ classe k pk soma 1

Obs: Para o caso de X ser uma v.a. contínua, as classes são intervalos na imagem de X, contidos em R, normalmente do mesmo tamanho e, para o caso discreto, as classes são os valores possíveis de X.

A seguir apresentaremos a aplicação do teste quiquadrado de Pearson para o caso discreto.

i)

o teste quiquadrado de Pearson para o caso discreto:

Seja uma v.a.discreta X assumindo k valores distintos, definidos segundo uma distribuição discreta p(x). Considere uma amostra de X, de tamanho n, obtida através de um gerador pseudoaleatório cujas frequências observadas

o

i, i = 1, 2, . . . , k, são apresentadas na tabela.

Valores de X frequências observadas (oi) x1

o1

x2

o2

x3

o3

⁞ ⁞ xk

o

k soma n

Tendo sido observadas as frequências

o1

,

o2

,

o3

, . . .,

o

k, podemos considerar que a distribuição de probabilidade de X é p(x)?

(15)

Para responder a esta pergunta vamos comparar as frequências observadas

o1

,

o2

,

o3

, . . .,

o

k com as frequências esperadas (ou teóricas) caso a distribuição de X seja, de fato, p(x).

As frequências esperadas dos valores de X serão calculadas a partir das suas probabilidades de ocorrências k i p x X P x p( i) (  i) i, 1,2, e serão dadas por: einpi, i1,2,k, conforme mostra a tabela:

Valores de X Probabilidade de ocorrência frequências esperadas segundo p(x) x1 p1 e1 = np1 x2 p2 e2 = np2 x3 p3 e3 = np3 ⁞ ⁞ ⁞ xk pk ek = npk soma 1 n

Desta forma, podemos concluir pela “aderência” da amostra à distribuição de probabilidade p(x) a partir da proximidade das frequências esperadas e observadas (ver tabela abaixo):

 se os valores

o

i estiverem muito afastados de ei , então, teremos uma evidência de que a distribuição de X não é p(x);

 por outro lado, se os valores

o

i estiverem próximos (o suficiente) de ei, então, a evidência será a favor de p(x), ou seja, a evidência será de que a distribuição de probabilidade de X pode ser p(x).

Valores de X frequências observadas (oi) frequências esperadas segundo p(x) x1

o1

e1 x2

o2

e2 x3

o3

e3 ⁞ ⁞ ⁞ xk

o

k ek soma n n

A avaliação da distância entre as frequências observadas e esperadas pode ser feita pela medida X2 de Pearson, definida por:

   k i i i i e e o 1 2 2 ( ) X .

Valores elevados de X2 serão evidência de que a distribuição de probabilidade de X não é p(x), enquanto que, valores baixos, serão evidência de que p(x) pode ser a distribuição de probabilidade de X.

Como a medida X2 de Pearson tem distribuição de probabilidade quiquadrado com k − 1 graus de liberdade, ou seja, X2 ~ 2k1, podemos comparar o seu valor calculado a partir da amostra com um valor tabelado da distribuição 2k1. Normalmente utiliza-se a tabela para um nível de significância de 5% (0.05).

(16)

Assim, o teste quiquadrado de Pearson será definido por:  se X ≤ valor tabelado a 5% da distribuição 2 2

1 

k  há evidência suficiente na amostra para concluirmos que a distribuição de probabilidade de X pode ser p(x).  se X > valor tabelado a 5% da distribuição 2 2

1 

k  a amostra nos dá evidência de que a distribuição de probabilidade de X não é p(x).

Obs: o teste acima foi apresentado de maneira simplificada, para um nível de significância de 0.05, apenas para atender o escopo da disciplina.

Exemplo 3: Considere n = 100 valores gerados segundo uma distribuição binomial(8, 0.62). Tendo observado esses 100 valores, podemos concluir que os mesmos seguem a distribuição de probabilidade proposta?

Ou seja, se n é uma amostra de uma v.a. X, a distribuição de X pode ser considerada como sendo uma binomial(8, 0.62)?

Como X ~ binomial(8, 0.62), então X

{

0, 1, 2, 3, 4, 5, 6, 7, 8

}

e as probabilidades de ocorrência dos valores de X é dada por:

. 8 , , 1 , 0 , ) 62 . 0 1 ( ) 62 . 0 ( 8 ) (   8            i x x i i i x x x X P p i i

A tabela com os valores observados e esperados segundo a binomial(8, 0.62) é apresentada abaixo: xi

o

i pi ei = npi 0 1 0.00043 0.04 1 1 0.00568 0.6 2 3 0.03241 3.2 3 9 0.10575 10.6 4 21 0.21567 21.6 5 34 0.28151 28.2 6 19 0.22965 23.0 7 12 0.10706 10.7 8 0 0.02183 2.2 Totais 100 0.99999 100.1

Assim, a estatística do teste quiquadrado de Pearson é calculada por:

X2 = 23.0400 + 0.2667 + 0.0125 + 0.2415 + 0.01667 + 1.1929 + 0.6957 + 0.1579 + 2.2000 X2 = 27.8239

Como temos k = 9 valores possíveis para X, o valor da distribuição quiquadrado com k – 1 = 8 graus de liberdade, para um nível de significância 0.05 (5%), é igual a 15.507.

Portanto, como X2 = 27.8239 > 15.507 , há evidência na amostra para concluirmos que a distribuição de probabilidade dos valores gerados não é a binomial(8, 0.62).

(17)

Com o Exemplo 3 não podemos concluir que o gerador utilizado não é bom. O que ocorreu foi que, tendo havido uma observação numa categoria com probabilidade muito baixa (no caso a categoria x = 0), o resultado final acabou sendo afetado, pois, pelo cálculo do X 2, a parcela referente a esta categoria foi dividida por um valor esperado muito pequeno (0.04), gerando uma parcela muito elevada (23.04), que por si só ultrapassa o valor de comparação tabelado. Vamos apresentar um segundo exemplo onde não ocorre essa

Exemplo 4: Considere, ainda, n = 100 valores gerados pela binomial(8, 0.62), utilizando a semente 909090. Podemos concluir que os dados gerados são, de fato, uma amostra da binomial(8, 0.62)?

Como X ~ binomial(8, 0.62), então X

{

0, 1, 2, 3, 4, 5, 6, 7, 8

}

e as probabilidades de ocorrência dos valores de X é dada por:

. 8 , , 1 , 0 , ) 62 . 0 1 ( ) 62 . 0 ( 8 ) (   8            i x x i i i x x x X P p i i

A tabela com os valores observados e esperados é apresentada abaixo: xi

o

i pi ei = npi 0 0 0.00043 0.04 1 1 0.00568 0.6 2 2 0.03241 3.2 3 12 0.10575 10.6 4 20 0.21567 21.6 5 33 0.28151 28.2 6 15 0.22965 23.0 7 13 0.10706 10.7 8 4 0.02183 2.2 Totais 100 0.99999 100.1

Assim, a estatística do teste quiquadrado de Pearson é calculada por:

X2 = 0.040 + 0.267 + 0.450 + 0.185 + 0.119 + 0.817 + 2.783 + 0.494 + 1.473 X2 = 6.628

Com k = 9 categorias, valor de comparação , para um nível de significância 0.05 (5%), é igual a 15.507. Portanto, como X2 = 6.628 < 15.507 , há evidência na amostra para concluirmos que a distribuição de probabilidade dos valores gerados pode ser a binomial(8, 0.62).

(18)

Exemplo 5: Como exemplo de um modelo contínuo vamos avaliar se os dados obtidos de um gerador pseudoaleatório construído para a disciplina podem ser considerados como vindos de uma U(0,1)

Vamos considerar o seguinte gerador congruencial misto: M = 102816, a = 1429 e b = 1691. Inicialmente, vamos avaliar se o gerador tem período máximo:

i) M = 25 33 7  17 e b = 19 89, portanto M e b são primos entre si;

ii) a = (22 3  7  17) + 1

Como o valor de M não é excessivamente elevado, podemos, ainda, fazer o teste pelo programa criado para este fim.

Obs: o programa, apresentado na sequência, NÃO DEVE ser utilizado para avaliar geradores cujo valor de M seja muito elevado, pois a operação poderá demorar em demasia.

Saída do programa para a avaliação do gerador:

z$per # período

[1] 102816

z$aviso

[1] "Período completo"

tempo # tempo (s) da avaliação

elapsed 127.22

Como foi constatado, o gerador é de período completo, tendo a avaliação demorado 17.22 segundos, ou seja, aproximadamente 2 minutos e 7 segundos (num notebook Toshiba Satellite Pro, centrinho core 2 duo).

Vamos, então, gerar uma amostra de tamanho n = 120 observações com o “nosso” gerador com uma semente , y0 = 999. Para isso, vamos utilizar o segundo programa: gerador.eca().

Para as contagens das frequências observadas utilizamos o comando hist() com as opções plot=FALSE e rigth=FALSE.

Neste caso, como a escala é contínua, vamos trabalhar com intervalos de classes de amplitude h = 0.10. Além disso, as probabilidades de ocorrências nas classes serão todas iguais a p0 = 0.10 e as frequências esperadas, todas iguais a ei = 120/10 = 12. Os resultados, já com as frequências observadas oi, são apresentados na tabela abaixo.

Tabela com os valores observados e esperados segundo a U(0, 1). xi

o

i ei = npi 0.0 |-- 0.1 13 12 0.1 |-- 0.2 13 12 0.2 |-- 0.3 11 12 0.3 |-- 0.4 13 12 0.4 |-- 0.5 16 12 0.5 |-- 0.6 12 12 0.6 |-- 0.7 11 12 0.7 |-- 0.8 12 12 0.8 |-- 0.9 10 12 0.9 |-- 1.0 9 12 Totais 120 120

(19)

Os resultados obtidos através do R são apresentados a seguir: a <- 0 b <- 1 k <- 10 m <- 120 classe <- seq(0,1,by=0.1) amostra <- gerador.eca(m,999)

oi <- hist(amostra, breaks=classe, right=F, plot=F)$count pi <- (b-a)/10 ei <- m*pi x2.parcelas <- (oi-ei)^2/ei x2 <- sum(x2.parcelas) vt <- qchisq(0.95,k-1) x2 [1] 2.833333 # valor da estatística X2 vt

[1] 16.91898 # valor de comparação com k1 = 9 g.l.

A estatística teste é X 2 = 2.833 e o valor da distribuição quiquadrado com k – 1 = 9 graus de liberdade, para um nível de significância 0.05 (5%), é igual a 16.919.

Portanto, como 2.833 < 16.919, há evidência para concluirmos que a distribuição de probabilidade dos valores gerados pode ser a U(0, 1).

(20)

Exemplo 6: Gerar uma amostra com n = 125 valores da distribuição exponencial(1.6) e aplicar o teste quiquadrado para avaliar a aderência dos dados.

Vamos considerar o seguinte gerador congruencial misto com M = 102816, a = 1429 e b = 1691 e aplicar o método da transformação inversa: x = F1(u), em que u U(0, 1).

Procedimento:

a) gerar uma amostra de tamanho n = 125 valores u U(0, 1) com o gerador.eca(), tendo como semente y0 = 111; b) com a transformação     ln(1 u)

x obter a amostra da exponencial(1.6).

Comandos do R: u <- gerador.eca(125,111) n <- 125 lambda <- 1.6 amostra <- -log(1-u)/lambda max(amostra) [1] 2.564313

Vamos considerar k = 8 classes de amplitude h = 0.35, sendo as probabilidades de ocorrências em cada classe dadas por:

infi

 

supi

infi supi

i i i i p inf F sup F p 6 . 1 6 . 1 e e e 1 e 1 ) ( ) (          

em que supi e infi , i = 1, 2, . . ., k, são, respectivamente, os limites superior e inferior das classes. Tabela com os valores observados e esperados segundo a exponencial(1.6).

xi

o

i ei = npi 0.00 |-- 0.35 55 53.6 0.35 |-- 0.70 33 30.6 0.70 |-- 1.05 17 17.5 1.05 |-- 1.40 9 10.0 1.40 |-- 1.75 4 5.7 1.75 |-- 2.10 4 3.3 2.10 |-- 2.45 1 1.9 2.45 |-- 2.80 2 1.1 Totais 125 125

Os resultados obtidos através do R são apresentados a seguir: k <- 8

classe <- seq(0,2.8,by=0.35)

oi <- hist(amostra, breaks=classe, right=F, plot=F)$count n <- sum(oi)

pi <- rep(NA,k) lambda <- 1.6

(21)

for(i in 1:k){ F.s <- exp(-1.6*classe[i+1]) pi[i] <- F.i-F.s F.i <- F.s } ei <- round(n*pi,1) x2.parcelas <- (oi-ei)^2/ei x2 <- sum(x2.parcelas) vt <- qchisq(0.95,k-1) x2 [1] 2.15727 vt [1] 14.06714

A estatística teste é X 2 = 2.157 e o valor da distribuição quiquadrado com k – 1 = 8 graus de liberdade, para um nível de significância 0.05 (5%), é igual a 14.067.

Portanto, como 2.157 < 14.067, há evidência para concluirmos que a distribuição de probabilidade dos valores gerados pode ser a exponencial(1.6).

(22)

Programas em R para os exemplos 5 e 6:

## Teste para avaliar se o ## gerador tem período completo ###############################

teste.gerador <- function(a,b,M,y0){ nota <- "Período não completo"

y <- as.vector((a*y0 + b) %% M) n <- 1 final <- TRUE while(final){ k <- (a*y[n] + b) %% M if(k!=y[1]){y <- c(y,k) n <- n+1 print(n)} else {final <- FALSE} }

if(n==M) nota <- "Período completo" return(list(per=n,aviso=nota)) }

y0 <- 12345

tempo <- system.time({z <- teste.gerador(1419,1691,102816,y0)})[3] z$per z$aviso tempo ######################## ### Gerador E.C.A. ### ######################## gerador.eca <- function(n,y0){

if(y0 <= 0)print("Argumento inválido: semente deve ser positiva e diferente de zero") else{ y <- rep(NA,n) for(i in 1:n){ y[i]<- (1429*y0+1691)%%102816 y0 <- y[i] } y <- y/M return(y)} }

(23)

Distribuições de Probabilidade no R

Distribuição fdp fd (fda) quantil gerador

uniforme dunif punif qunif runif

normal dnorm pnorm qnorm rnorm

exponencial dexp pexp qexp rexp

Weibull dweibull pweibull qweibull rweibull χ 2

(quiquadrado) dchisq pchisq qchisq rchisq

F de Snedcor df pf qf rf

tStudent dt pt qt rt

gama dgamma pgamma qgamma rgamma

beta dbeta pbeta qbeta rbeta

binomial dbinom pbinom qbinom rbinom

geométrica dgeom pgeom qgeom rgeom

binomial negativa dnbinom pnbinom qnbinom rnbinom hipergeométrica dhyper phyper qhyper rhyper

Poisson dpois ppois qpois rpois

Legenda e Sintaxe:

I. A primeira letra identifica cada comando, assim:

d - é a função distribuição de probabilidade ou de densidade (fdp); p - é a função distribuição acumulada ou (fda);

q - é a função quantil (inversa da fda);

 r - é a função geradora de valores pseudoaleatórios.

II. A sintaxe dos comandos segue a mesma regra para todos os casos, variando apenas o nome da distribuição:

dnome(x, parâmetros), x = quantil (valor) da variável; pnome(q, parâmetros), q = quantil (valor) da variável; qnome(p, parâmetros), p = probabilidade;

(24)

Exemplos:

a) Para a uniforme, os comandos dunif, punif, qunif e runif têm como default a U(0, 1):  dunif(x) retorna f(x);

 punif(q) retorna P(X ≤ q) = F(q);  qunif(p) retorna xp = F

−1

(p), sendo que P(X ≤ xp) = p;

 runif(n) retorna n valores com distribuição U(0, 1).

Para a distribuição U(a, b), os comandos devem indicar os parâmetros:

dunif(x,a,b), punif(q,a,b), qunif(p,a,b) e runif(n,a,b).

b) Para a binomial, o comandos dbinom, pbinom, qbinom e rbinom retornam a binomial(n, pr):  dbinom(x,n,pr) retorna p(x);

 pbinom(q,n,pr) retorna P(X ≤ q) = F(q);  qbinom(p,n,pr) retorna xp = F

1

(p), sendo que P(X ≤ xp) = p;

 rbinom(m,n,pr) retorna m valores com distribuição binomial(n, p). Obs: pr é a probabilidade de sucesso.

c) Para a normal, o comandos dnorm, pnorm, qnorm e rnorm tem como default a Normal(0, 1):  dnorm(x) retorna ϕ(x);

 pnorm(q) retorna P(X ≤ q) = Φ(q);  qnorm(p) retorna xp = Φ

1

(p), sendo que P(X ≤ xp) = p;

 rnorm(n) retorna n valores com distribuição Normal(0, 1).

Para a distribuição Normal(µ, σ), os comandos devem indicar os parâmetros: dnorm(x,µ,σ), pnorm(q,µ,σ), qnorm(p,µ,σ) e rnorm(n,µ,σ).

Referências

Documentos relacionados