Universidade Federal do Paraná
Curso de Estatística
CE 083 - Estatística Computacional I - 2014/2
Prof. Dr. Walmes Marques Zeviani


Aula 22

##-----------------------------------------------------------------------------
## Método da congruência. Gerar números uniformes.

## Computadores fazem algebra com precisão finita.
unlist(.Machine)

## Tipos de divisão.
16/13
16%/%13
16%%13

##-----------------------------------------------------------------------------
## Método da congruência.

## Escolha das constantes.
A <- 4; C <- 17

x <- 4; n <- 20; i <- 1
while(i<n){
    x[i+1] <- (A*x[i])%%C
    i <- i+1
    print(x[i])
}

## Uma melhor escolha das constantes.
A <- 7^5; C <- 2^32-1

x <- 4; n <- 20; i <- 1
while(i<n){
    x[i+1] <- (A*x[i])%%C
    i <- i+1
    print(x[i])
}

## Tomando a hora dos sistema como valor inicial.
x <- as.integer(Sys.time()); n <- 1000; i <- 1
while(i<n){
    x[i+1] <- (A*x[i])%%C
    ## print(x[i+1])
    i <- i+1
}

## Transformando em número uniforme, ou seja, u in [0,1).
u <- x/C
plot(u)

plot of chunk unnamed-chunk-2

hist(u)

plot of chunk unnamed-chunk-2

## De um número uniforme, como obter de outras distribuições?
y <- qnorm(u)
plot(ecdf(y)); curve(pnorm(x), col=2, add=TRUE)

plot of chunk unnamed-chunk-2

plot(density(y)); curve(dnorm(x), col=2, add=TRUE)

plot of chunk unnamed-chunk-2

##-----------------------------------------------------------------------------
## ... A história do homem que pasava os pães todos os dias e deu início
## aos métodos para detecção de fraudes.

## Um pão ao acaso.
R <- replicate(1000, rnorm(100)[1])
plot(ecdf(R), xlim=c(-2, 5))

plot of chunk unnamed-chunk-2

plot(density(R), xlim=c(-2, 5))

plot of chunk unnamed-chunk-2

## Um pão dos grandes.
R <- replicate(1000, sort(rnorm(100))[75])
plot(ecdf(R), xlim=c(-2, 5))

plot of chunk unnamed-chunk-2

plot(density(R), xlim=c(-2, 5))

plot of chunk unnamed-chunk-2

##-----------------------------------------------------------------------------
## Simulação para verificar a distribuição da estatística t.

n <- 4
## x <- rnorm(n, mean=10, sd=1)
## T <- (mean(x)-10)/sqrt(var(x)/n); T

## População normal.
r1 <- replicate(10000,
                {
                    x <- rnorm(n, mean=10, sd=1)
                    T <- (mean(x)-10)/sqrt(var(x)/n); T
                })

plot(ecdf(r1), xlim=c(-7,7))
curve(pt(x, df=n-1), add=TRUE, col=3, lwd=2)

plot of chunk unnamed-chunk-2

## População uniforme.
r2 <- replicate(10000,
                {
                    x <- runif(10, 7, 13)
                    T <- (mean(x)-10)/sqrt(var(x)/n); T
                })

plot(ecdf(r2), xlim=c(-7,7))
curve(pt(x, df=n-1), add=TRUE, col=3, lwd=2)

plot of chunk unnamed-chunk-2

## Ops, falha nos pressupostos implica em erros de decisão fora dos
## nominais.

Um exemplo de loop infinito