Capítulo 8 Distribuicao Amostral

Este capítulo faz a ligação entre a Teoria da Probabilidade estudada nos capítulos anteriores e os próximos capítulos, onde será estudada a inferência nos modelos econométricos bem como o comportamento dos estimadores em diferentes amostras.

Em inferência estatística, utiliza-se características da amostra (estatística ou estimador) para estimar os parâmetros populacionais de interesse. Todo estimador é uma variável aleatória, e portanto, é possível entender o comportamento de um estimador com uso de funções de probabilidades, médias e desvios padrão.

A distribuição amostral de um estimador (ou de uma estatística) é a distribuição de probabilidade de um grande número de amostras de tamanho \(n\) de uma dada população. Portanto, a distribuição amostral não é a distribuição de uma única amostra. Vamos chamar a distribuição da amostra realizada de distribuição empírica.

Na prática, quando estamos analisando determinada relação entre dois ou mais eventos, observamos apenas uma realização da amostra, e portanto, tanto a distribuição populacional quanto a distribuição amostral são desconhecidas. No entanto, é possível utilizar um ambiente computacional com simulação de dados para ganhar intuição e entender melhor a distribuição amostral dos estimadores.

Antes de estudar a distribuição amostral, é importante aprendermos como extrair amostras aleatórias, comparar o comportamento da distribuição populacional com a distribuição empírica e como utilizar as ferramentas do R para realizar as simulações necessárias para construir a distribuição amostral.

8.1 Extração de Amostras Aleatórias

library(prob)
library(distr)
library(distrEx)

O comando `sample’ extrai uma amostra aleatória de um objeto. Essa amostra pode ser com ou sem repetição.

sample(x, size, replace = FALSE, prob = NULL)

Extrair uma observação de uma população finita composta por seis elementos enumerados de 1 a 6 com probabilidades iguais.

sample(1:6, 1)
## [1] 6
sample(1:6, 1)
## [1] 2
sample(1:6, 1)
## [1] 5

Extrair três elementos dessa mesma população sem repetição.

sample(1:6,3)
## [1] 3 6 4

Extrair quatro elementes dessa mesma população mas agora com repetição.

sample(1:6, 4, replace = T)
## [1] 2 3 2 2

Definir o espaço amostral de um lançamento de duas moedas:

coins = tosscoin(2)
coins
##   toss1 toss2
## 1     H     H
## 2     T     H
## 3     H     T
## 4     T     T

Extrair duas amostras aleatórias do espaço amostral definido acima:

coins[sample(nrow(coins),2),]
##   toss1 toss2
## 3     H     T
## 2     T     H

Repetir o procedimento.

coins[sample(nrow(coins),2),]
##   toss1 toss2
## 2     T     H
## 1     H     H

Criar um espaço amostral do lançamento de 3 dados com 4 faces.

S = rolldie(3, nsides = 4, makespace = TRUE)
S
##    X1 X2 X3    probs
## 1   1  1  1 0.015625
## 2   2  1  1 0.015625
## 3   3  1  1 0.015625
## 4   4  1  1 0.015625
## 5   1  2  1 0.015625
## 6   2  2  1 0.015625
## 7   3  2  1 0.015625
## 8   4  2  1 0.015625
## 9   1  3  1 0.015625
## 10  2  3  1 0.015625
## 11  3  3  1 0.015625
## 12  4  3  1 0.015625
## 13  1  4  1 0.015625
## 14  2  4  1 0.015625
## 15  3  4  1 0.015625
## 16  4  4  1 0.015625
## 17  1  1  2 0.015625
## 18  2  1  2 0.015625
## 19  3  1  2 0.015625
## 20  4  1  2 0.015625
## 21  1  2  2 0.015625
## 22  2  2  2 0.015625
## 23  3  2  2 0.015625
## 24  4  2  2 0.015625
## 25  1  3  2 0.015625
## 26  2  3  2 0.015625
## 27  3  3  2 0.015625
## 28  4  3  2 0.015625
## 29  1  4  2 0.015625
## 30  2  4  2 0.015625
## 31  3  4  2 0.015625
## 32  4  4  2 0.015625
## 33  1  1  3 0.015625
## 34  2  1  3 0.015625
## 35  3  1  3 0.015625
## 36  4  1  3 0.015625
## 37  1  2  3 0.015625
## 38  2  2  3 0.015625
## 39  3  2  3 0.015625
## 40  4  2  3 0.015625
## 41  1  3  3 0.015625
## 42  2  3  3 0.015625
## 43  3  3  3 0.015625
## 44  4  3  3 0.015625
## 45  1  4  3 0.015625
## 46  2  4  3 0.015625
## 47  3  4  3 0.015625
## 48  4  4  3 0.015625
## 49  1  1  4 0.015625
## 50  2  1  4 0.015625
## 51  3  1  4 0.015625
## 52  4  1  4 0.015625
## 53  1  2  4 0.015625
## 54  2  2  4 0.015625
## 55  3  2  4 0.015625
## 56  4  2  4 0.015625
## 57  1  3  4 0.015625
## 58  2  3  4 0.015625
## 59  3  3  4 0.015625
## 60  4  3  4 0.015625
## 61  1  4  4 0.015625
## 62  2  4  4 0.015625
## 63  3  4  4 0.015625
## 64  4  4  4 0.015625
S[sample(nrow(S),3),]
##    X1 X2 X3    probs
## 59  3  3  4 0.015625
## 54  2  2  4 0.015625
## 16  4  4  1 0.015625
S[sample(nrow(S),3),]
##    X1 X2 X3    probs
## 32  4  4  2 0.015625
## 16  4  4  1 0.015625
## 55  3  2  4 0.015625

Distribuição Normal

A função rnorm é um gerador de números aleatórios de uma distribuição normal. Possui três parâmetros. O número de realizações a serem extraídas da distribuição teórica, a média e o desvio padrão.

rnorm(1)
## [1] -1.373982
rnorm(5)
## [1] -1.13632832  0.02972808 -1.05083231  0.73908187 -0.86853863
rnorm(5,2,3)
## [1]  0.7101015  3.9166634  1.7442517 -0.8210868  1.4569061

Distribuição Uniforme

runif(1)
## [1] 0.9258298
runif(10)
##  [1] 0.7757844 0.4638127 0.1150527 0.3388508 0.4755708 0.4910929 0.1160265
##  [8] 0.9689752 0.1643502 0.9367687
runif(10,10,20)
##  [1] 19.78291 14.09771 12.98943 16.20636 14.52122 11.69022 11.05784 16.11251
##  [9] 17.11823 16.62783

8.2 Características da Amostra vs Características da População

Para que todos tenhamos os mesmos resultados, vamos fixar a semente do gerador de números aleatórios.

set.seed(1)

A primeira comparação a ser feita é entre a média populacional e a média da amostra de uma distribuição Normal Padrão.

x = rnorm(5,0,1)
mean(x)
## [1] 0.1292699
x = rnorm(500,0,1)
mean(x)
## [1] 0.02055156

Agora vamos comparar o desvio padrão:

x = rnorm(5,0,1)
sd(x)
## [1] 1.329763
x = rnorm(500,0,1)
sd(x)
## [1] 1.060446

Gráfico da densidade da distribuição empírica e da sua distribuição teórica associada.

set.seed(1)
plot(density(rnorm(10)), ylim=c(0,0.5), xlim = c(-5,5))
curve(dnorm(x), add = TRUE, col = "red")

set.seed(1)
plot(density(rnorm(100)), ylim=c(0,0.5), xlim = c(-5,5))
curve(dnorm(x), add = TRUE, col = "red")

set.seed(1)
plot(density(rnorm(1000)), ylim=c(0,0.5), xlim = c(-5,5))
curve(dnorm(x), add = TRUE, col = "red")

Função Distribuição Cumulativa

Distribuição Teórica

curve(pnorm(x), xlim = c(-5,5))

Distribuição Empírica

set.seed(1)
X = rnorm(100) 
P = ecdf(X)
pnorm(0)
## [1] 0.5
P(0)         # This returns the empirical CDF at zero (should be close to 0.5)
## [1] 0.46
plot(P)        # Draws a plot of the empirical CDF (see below)

curve(pnorm(x), xlim = c(-5,5))
lines(P, col = "red")        # Draws a plot of the empirical CDF (see below)

X = rnorm(1000) 
P = ecdf(X)
P(0.0)         # This returns the empirical CDF at zero (should be close to 0.5)
## [1] 0.521
curve(pnorm(x), xlim = c(-5,5))
lines(P, col = "red")        # Draws a plot of the empirical CDF (see below)

Distribuição Uniforme

X = Unif()
E(X)
## [1] 0.5
mean(runif(10))
## [1] 0.5013657
mean(runif(100))
## [1] 0.4656684
mean(runif(1000))
## [1] 0.5001652
X = Unif(0,10)
E(X)
## [1] 5
mean(runif(10,0,10))
## [1] 5.920047
mean(runif(100,0,10))
## [1] 4.615105
mean(runif(1000,0,10))
## [1] 4.956762

8.3 Introdução à simulação

A simulação de dados é uma ferramenta importante para o aprendizado de características de distribuições de probabilidade e consequentemente para um melhor entendimento do comportamento de um estimador.

Vamos apresentar duas ferramentas do \(R\) que auxiliam na realização de simulações, looping e o comando replicate.

Uma das formas de utilizar looping é com o uso do comando for:

for (i in 1:5){
  print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
for (i in c(1,5,3,8)){
  print(i)
}
## [1] 1
## [1] 5
## [1] 3
## [1] 8
v = c(1,4,5,10)
for (n in 1:length(v)){
  print(v[n])
}
## [1] 1
## [1] 4
## [1] 5
## [1] 10

Criar uma matriz:

A = matrix(rep(NA, 25), nrow = 5 )
for (j in 1:dim(A)[2]){
  A[,j] = rnorm(5)
}
A
##             [,1]        [,2]       [,3]        [,4]        [,5]
## [1,] -0.80816189 -1.56379809  1.3697870 -0.41850169  0.78040847
## [2,] -0.60677918 -1.49347152 -0.3783807 -0.03764293 -0.54214238
## [3,]  0.08690882 -1.09713482 -0.7787449  1.18729857 -2.02653215
## [4,] -0.23429703 -0.02910675  1.2640853 -0.10565769 -0.02167199
## [5,]  1.26252690  2.17368492  0.3080131  0.20244165  1.22228261
A = matrix(rep(NA, 25), nrow = 5 )
for (i in 1:dim(A)[1]){
  for (j in 1:dim(A)[2]){
    A[i,j] = rnorm(1)
  }
}
A
##            [,1]       [,2]        [,3]       [,4]       [,5]
## [1,] -0.1736816  0.6640132 -0.54783820 -0.9174420  0.4371058
## [2,] -0.3849686  0.8423753  0.95301631 -0.4106318  0.1008083
## [3,]  0.9207557  1.4595952 -0.39684253 -0.4830838 -0.3162191
## [4,]  1.2100039 -0.7529806 -0.64926724 -0.2542445 -1.2963696
## [5,] -0.4246571 -0.3991557  0.05987491  0.6806779  1.5694218
v = c()
for (i in 1:10){
  v[i] = mean(rnorm(5))
}
v
##  [1]  0.3832562  0.4072287 -1.0581297 -0.2736223  0.2920137  0.3944080
##  [7] -0.3745748  0.1069506 -0.2771388  0.5251626
v = c()
for (n in c(5,10,50,100,1000)){
  for (i in 1:5){
    v[i] = mean(rnorm(n))
  }
}
v
## [1] -0.0166026325 -0.0181839023 -0.0005956172 -0.0375908951  0.0053728775

Comando replicate

set.seed(1)
x = replicate(n = 10, expr = rnorm(1))
x
##  [1] -0.6264538  0.1836433 -0.8356286  1.5952808  0.3295078 -0.8204684
##  [7]  0.4874291  0.7383247  0.5757814 -0.3053884
x1 =c()
set.seed(1)
for (i in 1:10){
  x1[i] = rnorm(1)
}
x1
##  [1] -0.6264538  0.1836433 -0.8356286  1.5952808  0.3295078 -0.8204684
##  [7]  0.4874291  0.7383247  0.5757814 -0.3053884
x == x1
##  [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
x = replicate(n = 5, expr = rnorm(10))
x
##              [,1]        [,2]        [,3]       [,4]       [,5]
##  [1,]  1.51178117  0.91897737  1.35867955 -0.1645236  0.3981059
##  [2,]  0.38984324  0.78213630 -0.10278773 -0.2533617 -0.6120264
##  [3,] -0.62124058  0.07456498  0.38767161  0.6969634  0.3411197
##  [4,] -2.21469989 -1.98935170 -0.05380504  0.5566632 -1.1293631
##  [5,]  1.12493092  0.61982575 -1.37705956 -0.6887557  1.4330237
##  [6,] -0.04493361 -0.05612874 -0.41499456 -0.7074952  1.9803999
##  [7,] -0.01619026 -0.15579551 -0.39428995  0.3645820 -0.3672215
##  [8,]  0.94383621 -1.47075238 -0.05931340  0.7685329 -1.0441346
##  [9,]  0.82122120 -0.47815006  1.10002537 -0.1123462  0.5697196
## [10,]  0.59390132  0.41794156  0.76317575  0.8811077 -0.1350546
x = replicate(n = 5, expr = mean(rnorm(10)))
x
## [1]  0.4512100 -0.2477361  0.1273603  0.1123413  0.3474802
x = replicate(n = 5, expr = mean(rnorm(100)))
x
## [1] -0.01984126  0.02244953  0.01877427 -0.05562816 -0.02607009

8.4 Distribuição Amostral

Finalmente, nessa seção, estamos prontos para estudar a distribuição amostral de um estimador.

Estimador da média: \(\bar{x}_n = \frac{1}{n} \sum_{i=1}^nX_i\)

mean(rnorm(100))
## [1] -0.2155784

Vamos estudar algumas características deste estimador analisando aspectos de sua distribuição amostral:

\[E[\bar{X}_n] = \mu \]

mean(replicate(n = 1000, expr = mean(rnorm(10))))
## [1] -0.005145448

\[var[\bar{X}_n] = \frac{\sigma^2}{n}\]

var(replicate(n = 1000, expr = mean(rnorm(10))))
## [1] 0.09110611
var(replicate(n = 1000, expr = mean(rnorm(100))))
## [1] 0.01018165

Distribuição do estimador da média amostral \(\bar{X}_n\):

mean = replicate(n = 1000, expr = mean(rnorm(100)))

plot(density(mean),
       ylim = c(0,10),
       xlim = c(-0.4,0.4))
abline(v=0)

#mean = replicate(n = 1000, expr = mean(rnorm(100)[1])
mean = replicate(n = 1000, expr = mean(rnorm(1000)))
                 
plot(density(mean),
       ylim = c(0,15),
       xlim = c(-0.4,0.4))
abline(v=0)

#mean = replicate(n = 1000, expr = mean(rnorm(100)[1])
mean = replicate(n = 1000, expr = mean(rnorm(10000)))
                 
plot(density(mean),
       ylim = c(0,50),
       xlim = c(-0.4,0.4))
abline(v=0)