Você está na página 1de 7

lista_1 https://teste-marcoscv71.notebooks.azure.com/nb/nbconvert/html/Est_...

Lista 1 - Estatística Computacional e Otimização - Prof. Luiz Duczmal - 10/08/18 - Data de entrega: 21/08/18

Exercício 1)
O seguinte código em R constrói 20 vezes intervalos de 95% de confiança (com os quantis da distribuição t de Student) para
a média para amostras de tamanho 5, obtidas a partir de uma população normalmente distribuída (com média 100 e desvio
padrão 10).

(a) Implemente um contador para verificar automaticamente quantas vezes os intervalos de confiança construídos contém a
média verdadeira. Verifique, usando m=100000 intervalos de confiança, que cerca de 95% das vezes o intervalo construído
de fato contém a média verdadeira.

In [2]: set.seed(14)
m <- 100000
n <- 5
media <- 100
sigma <- 10
s <- seq(1,m)
medias <- rep(0,m)
icesq <- rep(0,m)
icdir <- rep(0,m)
cont <- 0

Calcula o número de vezes que o intervalo de confiança contém a média verdadeira

In [3]: for (i in s) {
resist <- round(rnorm(n,media,sigma),0)
medias[i] <- mean(resist)
erro <- qt(0.975,df=length(resist)-1) * sd(resist)/sqrt(length(resist))
icesq[i] <- mean(resist) - erro
icdir[i] <- mean(resist) + erro
# Conta quantas vezes o intervalo de confianca nao contem a media verdadeira
if(icesq[i] > media || icdir < media) {
cont <- cont + 1
}
}
m - cont

97473

Como podemos perceber, com m = 100.000, o intervalo de confiança contem a média verdadeira em 97.473 vezes (97.47%),
para amostras de tamanho 5.

(b) O que acontece se os intervalos forem construídos com os quantis da distribuição normal (ao invés de usar os quantis da
distribuição t de Student)?

1 of 7 22/08/2018 22:41
lista_1 https://teste-marcoscv71.notebooks.azure.com/nb/nbconvert/html/Est_...

In [5]: set.seed(14)
m <- 100000
n <- 5
media <- 100
sigma <- 10
s <- seq(1,m)
medias <- rep(0,m)
icesq <- rep(0,m)
icdir <- rep(0,m)
cont <- 0
for (i in s) {
resist <- round(rnorm(n,media,sigma),0)
medias[i] <- mean(resist)
erro <- qnorm(0.975) * sd(resist)/sqrt(length(resist))
icesq[i] <- mean(resist) - erro
icdir[i] <- mean(resist) + erro
# Conta quantas vezes o intervalo de confianca nao contem a media verdadeira
if(icesq[i] > media || icdir < media) {
cont <- cont + 1
}
}
m - cont

93886

Se os intervalos forem construídos com os quantis da distribuição normal, em 93.886 intervalos (93.89%) contém a média
verdadeira. Um desempenho pior que da distribuição t, como esperado, visto que a amostra de tamanho 5 é muito pequena.

(c) Repita o procedimento das letras (a) e (b) para n=10, n=30 e n=100. O que você pode concluir?

In [8]: set.seed(14)
m <- 100000
n <- 100
media <- 100
sigma <- 10
s <- seq(1,m)
medias <- rep(0,m)
icesq <- rep(0,m)
icdir <- rep(0,m)
cont <- 0
for (i in s) {
resist <- round(rnorm(n,media,sigma),0)
medias[i] <- mean(resist)
erro <- qt(0.975,df=length(resist)-1) * sd(resist)/sqrt(length(resist))
icesq[i] <- mean(resist) - erro
icdir[i] <- mean(resist) + erro
# Conta quantas vezes o intervalo de confianca nao contem a media verdadeira
if(icesq[i] > media || icdir < media) {
cont <- cont + 1
}
}
m - cont

97425

2 of 7 22/08/2018 22:41
lista_1 https://teste-marcoscv71.notebooks.azure.com/nb/nbconvert/html/Est_...

Usando a distribuição t, para:

n = 10 -> Intervalos: 97.501

n = 30 -> Intervalos: 97.534

n = 100 -> Intervalos: 97.425

In [11]: set.seed(14)
m <- 100000
n <- 100
media <- 100
sigma <- 10
s <- seq(1,m)
medias <- rep(0,m)
icesq <- rep(0,m)
icdir <- rep(0,m)
cont <- 0
for (i in s) {
resist <- round(rnorm(n,media,sigma),0)
medias[i] <- mean(resist)
erro <- qnorm(0.975) * sd(resist)/sqrt(length(resist))
icesq[i] <- mean(resist) - erro
icdir[i] <- mean(resist) + erro
# Conta quantas vezes o intervalo de confianca nao contem a media verdadeira
if(icesq[i] > media || icdir < media) {
cont <- cont + 1
}
}
m - cont

97274

Usando a distribuição Normal, para:

n = 10 -> Intervalos: 95.924

n = 30 -> Intervalos: 97.047

n = 100 -> Intervalos: 97.274

Como podemos ver, aumentando o tamanho da amostra n, a quantidade de intervalos com a verdadeira média não varia
para a distribuição t, em compensação, esse aumento da amostra é priomordial para o aumento de intervalos com a
verdadeira média no caso do uso de quantis da distribuição normal. Isso era naturalmente esperado, visto que o uso da
distribuição Normal não é recomendado para amostras pequenas. Geralmente pede-se seu uso para amostras com n > 30.

Exercício 2)
O seguinte código em R constrói 20 vezes intervalos bootstrap de 80% de confiança para a mediana do vetor x.

(a) Mostre como varia a estimação do intervalo de confiança bootstrap para grandes valores de nboot.

3 of 7 22/08/2018 22:41
lista_1 https://teste-marcoscv71.notebooks.azure.com/nb/nbconvert/html/Est_...

In [53]: set.seed(14)
x = c(30,37,36,43,42,43,43,46,41,42)
#x = c(30,30.1,32.0,32.1,33.0,33.1,40,45,60,90)
n = length(x)
nboot=100
xbarmedian = median(x)
tmpdata = sample(x,n*nboot, replace=TRUE)
bootstrapsample = matrix(tmpdata, nrow=n, ncol=nboot)
#bsmeans = colMeans(bootstrapsample)
bsmedians=rep(0,nboot)
for (i in seq(1,nboot)){
v = bootstrapsample[,i]
bsmedians[i]=median(v)
}
#bsmedians
sortbsmedians=sort(bsmedians)
#sortbsmedians
#xbarmedian
deltastar = sortbsmedians - xbarmedian

#deltastar
d = quantile(deltastar, c(0.10, 0.90))

#d
ci = xbarmedian + d
cat("Confidence interval: ",ci, "\n")

Confidence interval: 39 43

Para um grande numero de amostras bootstrap, o intervalo de confiança se estabiliza e permanece o mesmo. (Algo em torno
de 90)

(b) Construa o vetor x como uma amostra de uma população normal (como no exercício 1) e verifique se de fato o intervalo
de confiança contém a média verdadeira em 80% das vezes em que se realiza o procedimento de bootstrap.

(c) Repita os procedimentos das letras (a) e (b) para outros estimadores diferentes da mediana (média, mínimo, máximo,
etc.)

Exercício 3)
O seguinte código em R simula a retirada aleatória, sem reposição, de uma caixa com 2 bolas azuis, 3 bolas brancas, e 4
bolas cinzas, e conta quantas vezes a última bola cinza a ser retirada é a i-ésima bola, para i=1,2,...,9.

4 of 7 22/08/2018 22:41
lista_1 https://teste-marcoscv71.notebooks.azure.com/nb/nbconvert/html/Est_...

In [9]: na=2
nb=3
nc=4
nt=na+nb+nc
s=seq(1,nt)
bolasabc=rep(0,nt)
for(i in s){
if(i<=na)bolasabc[i]=1
else if(i<=na+nb)bolasabc[i]=2
else bolasabc[i]=3
}
#bolasabc
retiradas=sample(bolasabc,nt,replace=FALSE)
#retiradas
#A última bola cinza a ser retirada é a i-ésima bola.
nsim=100000
sim=seq(1,nsim)
na=2
nb=3
nc=4
nt=na+nb+nc
s=seq(1,nt)
cont=rep(0,nt)
bolasabc=rep(0,nt)
for(i in s){
if(i<=na)bolasabc[i]=1
else if(i<=na+nb)bolasabc[i]=2
else bolasabc[i]=3
}
for(i in sim){
retiradas=sample(bolasabc,nt,replace=FALSE)
uc=nt
while(retiradas[uc]!=3){
uc=uc-1
}
cont[uc]=cont[uc]+1
#print(retiradas)
#print(uc)
}
cont

0 0 0 783 3150 7987 15725 27626 44729

(a) Refaça a simulação para um número grande de experimentos, para estimar a porcentagem de vezes em que a última
bola cinza é a i-ésima bola retirada.

In [10]: cont/nsim

0 0 0 0.00783 0.0315 0.07987 0.15725 0.27626 0.44729

Foram feitas 100.000 realizações do experimento. Como podemos ver acima, essas são as probabilidades da última bola
cinza ser a i-ésima bola. Uma probabilidade muito pequena 0.7% de ser a quarta bola, essa realização seria todas as 4
primeiras bolas retiradas serem cinza, como era esperado. E essa probabilidade cresce a medido que o i cresce. A última
bola cinza retirada foi a nona em 44.73% das vezes.

(b) Refaça a simulação para estimar a probabilidade de que todas as bolas azuis sejam retiradas antes da última bola cinza.

5 of 7 22/08/2018 22:41
lista_1 https://teste-marcoscv71.notebooks.azure.com/nb/nbconvert/html/Est_...

In [44]: #A última bola cinza a ser retirada é a i-ésima bola.


nsim=10000
sim=seq(1,nsim)
na=2
nb=3
nc=4
nt=na+nb+nc
s=seq(1,nt)
cont=rep(0,nt)
bolasabc=rep(0,nt)
for(i in s){
if(i<=na)bolasabc[i]=1
else if(i<=na+nb)bolasabc[i]=2
else bolasabc[i]=3
}
sucess <- 0
for(i in sim){

retiradas=sample(bolasabc,nt,replace=FALSE)
uc=nt
while(retiradas[uc]!=3){
if(retiradas[uc]==1) {
uc = 0
break
}
uc=uc-1
}
cont[uc]=cont[uc]+1

#print(retiradas)
if(uc > 0) {
sucess <- sucess + 1
}
#print(uc)
}
#cont
sucess/nsim

0.6658

Nesse caso, a probabilidade de que todas as bolas azuis sejam retiradas antes das cinzas é de aproximadamente 66%

(c) Invente outra questão de probabilidade com a retirada sem reposição dessa caixa de bolas e faça uma simulação para
fazer a estimativa dessa probabilidade.

6 of 7 22/08/2018 22:41
lista_1 https://teste-marcoscv71.notebooks.azure.com/nb/nbconvert/html/Est_...

In [49]: #A última bola cinza a ser retirada é a i-ésima bola.


nsim=100000
sim=seq(1,nsim)
na=2
nb=3
nc=4
nt=na+nb+nc
s=seq(1,nt)
cont=rep(0,nt)
bolasabc=rep(0,nt)
for(i in s){
if(i<=na)bolasabc[i]=1
else if(i<=na+nb)bolasabc[i]=2
else bolasabc[i]=3
}
sucess <- 0
for(i in sim){
retiradas=sample(bolasabc,nt,replace=FALSE)
uc=nt
while(retiradas[uc]!=2){
if(retiradas[uc]==3) {
uc = 0
break
}
uc=uc-1
}
cont[uc]=cont[uc]+1

if(uc > 0) {
sucess <- sucess + 1
}
}
sucess/nsim

0.42854

Nessa simulação do código anterior foi calculado a probabilidade de todas as bolas cinzas serem retiradas antes da última
bola cinza. Como podemos ver, o resultado é aproximadamente 43%.

7 of 7 22/08/2018 22:41

Você também pode gostar