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


Aula 07

Tabela de conteúdo



Testes de hipótese via simulação Monte Carlo

##-----------------------------------------------------------------------------
## Lançamento de uma moeda.

## x <- scan()
## dput(x)

## Laçamento da moeda pelo Leonardo.
x <- c(1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 
       1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 
       0, 1, 0, 1, 1, 0, 0, 0)

## Proporção amostral.
sum(x)/length(x)
## [1] 0.4571
## Número de trocas de face.
o <- sum(abs(diff(x))); o
## [1] 27
## Laçamento de uma moeda verdadeira (p=0.5, lanç indep = sem memória)
sample(0:1, 70, replace=TRUE)
##  [1] 1 1 0 1 1 0 0 0 1 0 0 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 0 1 0 1 1 1 1 0 0 0 1 1 1 0 1 1 1
## [44] 0 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 0 0 0 0 0 0
sum(abs(diff(sample(0:1, 70, replace=TRUE))))
## [1] 30
## Função que lança uma moeda verdadeira e retorna o número de
## trocas. Ela reproduz o experimento sob a hipótese nula, ou seja, com
## p=0.5 e lançamentos independentes (sem memória).

moeda <- function(n){
    ## sum(abs(diff(rbinom(n, 1, 0.5))))
    sum(abs(diff(sample(0:1, n, replace=TRUE))))
}

moeda(70)
## [1] 39
## Faz várias execuções do experimento aleatório.
r <- replicate(50000, moeda(70))

## A distribuição amostral da estatística número de trocas.
hist(r, breaks=seq(min(r), max(r)+1, by=1)-0.5, prob=TRUE,
     xlab="Número de trocas em 70 lançamentos",
     ylab="Densidade", main=NULL)
abline(v=o, col=2)
text(x=o, y=par()$usr[4], label="Estatística observada", srt=90,
     adj=c(1.25,-0.25))

plot of chunk unnamed-chunk-2

plot(ecdf(r))
abline(v=o, col=2)
text(x=o, y=par()$usr[4], label="Estatística observada", srt=90,
     adj=c(1.25,-0.25))

plot of chunk unnamed-chunk-2

## Como a v.a. é discreta.
sum(r<=o)/length(r)
## [1] 0.04532
sum(r<o)/length(r)
## [1] 0.02628
## A distribuição do número de trocas sob H0 é uma Binomial.
i <- 0:69
p <- pbinom(i, size=69, p=0.5)

plot(ecdf(r), verticals=TRUE, cex=NA, main=NULL,
     xlab="Número de trocas em 70 lançamentos",
     ylab="Probabilidade acumulada")
lines(p~i, type="s", col=2)
legend("right",
       legend=c("Distribuição empírica", "Distribuição teórica"),
       col=1:2, lty=1, bty="n")

plot of chunk unnamed-chunk-2

##-----------------------------------------------------------------------------
## Teste para média de duas populações.

require(lattice); require(latticeExtra)
## Loading required package: lattice
## Loading required package: latticeExtra
## Loading required package: RColorBrewer
## as.factor(rep(1:2, each=30))
## factor(rep(1:2, each=30), labels=c("N","S"))

da <- data.frame(local=gl(2, 30, labels=c("N","S")))
da$bico <- with(da, rnorm(length(local),
                          mean=49+2*as.integer(local),
                          sd=2))
head(da)
##   local  bico
## 1     N 48.28
## 2     N 51.09
## 3     N 49.43
## 4     N 49.10
## 5     N 50.63
## 6     N 50.19
densityplot(~bico, groups=local, data=da,
            auto.key=list(title="Local da ilha", cex.title=1.1),
            ylab="Densidade", xlab="Comprimento do bico das aves")

plot of chunk unnamed-chunk-3

##-----------------------------------------------------------------------------

## Média amostral observada.
a <- with(da, tapply(bico, local, mean)); a
##     N     S 
## 50.72 52.88
d <- diff(a); d
##     S 
## 2.158
## Aleatorizando os valores já que sob a hipótese nula não há diferença
## de médias entre as população o que implica dizer que os valores são
## todos provenientes da mesma população.
with(da, tapply(sample(bico, replace=TRUE), local, mean))
##     N     S 
## 52.27 51.63
## Distribuição da diferença de médias.
r <- replicate(50000, diff(with(da, tapply(sample(bico), local, mean))))
head(r)
##        S        S        S        S        S        S 
## -0.02463 -0.12364 -0.07986  0.11643 -0.43638 -0.04584
par(mfrow=c(1,2))
plot(density(r))
abline(v=d)
plot(ecdf(r))
abline(v=d); layout(1)

plot of chunk unnamed-chunk-3

## Cálculo do p-valor empírico.
sum(abs(r)>=d)/length(r)
## [1] 8e-05
##-----------------------------------------------------------------------------
## Teste Monte Carlo para a hipótese de distribuição aleatória de
## pontos.

## Pontos aleatórios dentro de um quadrado unitário (as posições são
## independentes dos demais pontos).
x <- runif(50)
y <- runif(50)
plot(x, y, asp=1, axes=FALSE, ann=FALSE)
rect(0, 0, 1, 1, lty=2)

plot of chunk unnamed-chunk-3

d <- dist(cbind(x,y))
d <- as.vector(d)
c(length(d), 100*99/2)
## [1] 1225 4950
## Menor distância entre dois pontos.
min(d)
## [1] 0.007768
## Distribução acumulada das distência entre pontos.
plot(ecdf(d), xlab="Distância", ylab="Proporção de pontos")

plot of chunk unnamed-chunk-3

##-----------------------------------------------------------------------------
## Distribuições de eventos espaciais não independentes.

require(spatstat)
## Loading required package: spatstat
## 
## spatstat 1.38-1       (nickname: 'Le Hardi') 
## For an introduction to spatstat, type 'beginner'
## 
## Attaching package: 'spatstat'
## 
## The following object is masked from 'package:lattice':
## 
##     panel.histogram
## Distribuição regular.
xy <- rSSI(n=50, r=0.1)
## plot(xy)

plot(xy$x, xy$y, asp=1, axes=FALSE, ann=FALSE)
rect(0, 0, 1, 1, lty=2)

plot of chunk unnamed-chunk-3

## Distância para pontos com distribuição regular.
drg <- as.vector(dist(cbind(xy$x, xy$y)))

## Menor distância entre dois pontos.
min(drg)
## [1] 0.1
## Distribução acumulada das distência entre pontos.
plot(ecdf(drg), xlab="Distância", ylab="Proporção de pontos")

plot of chunk unnamed-chunk-3

## Distribuição agregada.
zk <- rGaussPoisson(40, 0.1, 0.98)

plot(zk$x, zk$y, asp=1, axes=FALSE, ann=FALSE)
rect(0, 0, 1, 1, lty=2)

plot of chunk unnamed-chunk-3

## Distância para pontos com distribuição regular.
dag <- as.vector(dist(cbind(zk$x, zk$y)))

## Menor distância entre dois pontos.
min(dag)
## [1] 0.009561
## Distribução acumulada das distência entre pontos.
plot(ecdf(dag), xlab="Distância", ylab="Proporção de pontos")

plot of chunk unnamed-chunk-3

## Todos os gráficos juntos.
plot(ecdf(d), xlab="Distância", ylab="Proporção de pontos")
lines(ecdf(drg), col=2)
lines(ecdf(dag), col=4)

plot of chunk unnamed-chunk-3