Universidade Federal do Paraná
Curso de Estatística
CE 083 -
Estatística Computacional I - 2014/2
Prof. Dr. Walmes Marques Zeviani
##-----------------------------------------------------------------------------
## 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)
hist(u)
## 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(density(y)); curve(dnorm(x), col=2, add=TRUE)
##-----------------------------------------------------------------------------
## ... 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(density(R), xlim=c(-2, 5))
## Um pão dos grandes.
R <- replicate(1000, sort(rnorm(100))[75])
plot(ecdf(R), xlim=c(-2, 5))
plot(density(R), xlim=c(-2, 5))
##-----------------------------------------------------------------------------
## 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)
## 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)
## Ops, falha nos pressupostos implica em erros de decisão fora dos
## nominais.