GET00130 - Métodos Computacionais para Estatística II
Conteúdo da aula
- Distribuições amostrais;
- Teorema do Limite Central.
1 - Distribuições amostrais
Sabemos que o problema da inferência estatística é fazer uma afirmação sobre os parâmetros por meio da amostra.
Considere o seguinte cenário:
- Populacão: Moradores do bairro do Ingá que possuem 18 anos ou mais.
- Variável de interesse será: X - a renda dos moradores do Ingá maiores de 18 anos.
- Parâmtero de interesse: \(\mu\) - a renda média dos moradores do Ingá com 18 anos ou mais.
- Estatística: \(\bar{X}\) - a renda média amostral dos moradores do Ingá com 18 anos ou mais.
Suponha que foi colhida uma amostra aleatória simples (AAS) de \(n\) elementos. Deste modo, obteremos um particular valor de \(\bar{X}\), digamos \(\bar{x}_1\). Baseado neste valor é que faremos uma afirmação sobre \(\mu\).
Suponha que coletássemos uma nova amostra, também de tamanho \(n\). É bem provável que a nova estimativa, vamos chamar de \(\bar{x}_2\), observada para a nova amostra assuma um valor diferente da anterior, isto é, \[\bar{x}_1 \neq \bar{x}_2.\]
Conhecer o que acontece com a estatística \(\bar{X}\), quando retiramos todas as amostras de mesmo tamanho segundo um plano amostral adotado, é fundamental para fazermos afirmações sobre o parâmetro de interesse \(\mu\). Para isso, precisamos conhecer a distribuição amostral da estatística \(\bar{X}\).
Vamos definir um procedimento abaixo para verificar empiricamente alguns resultados teóricos apresentados na disciplina de Estatística II.
Vamos supor inicialmente que a nossa população é composta somente por N = 5 indivíduos.
#Definindo os elementos da nossa população
pop = c(1,3,5,5,7)Suponha que o plano de amostragem é AAS com reposição e serão retiradas amostras de tamanho 2.
#Vamos definir o tamanho da amosra com a qual iremos trabalhar
n = 2Agora, vamos retirar 1.000 amostras de tamanho n = 2 e iremos armazená-las em uma matriz. Para tal precisaremos da função sample.
Principais argumentos da função sample :
- x - o vetor com os valores a ser sorteado;
- size - o número de elementos que serão sorteados;
- replace - devem ser consideradas retiradas com reposição?
#Vamos definir o número de amostras da dstribuição de x_barra
num.amostra = 1000
#Definindo uma matriz com 1000 colunas e 2 linhas preenchida com NA
mat.amostras = matrix(data = NA,
ncol = num.amostra,
nrow = n)
#Sorteando 1.000 amostras de tamanho 2 e armazenando-as na matriz
for(i in 1:num.amostra){
mat.amostras[,i] = sample(x = pop,
size = n,
replace = TRUE)
}O objeto mat.amostras contem as 1.000 amostras de tamanho 2, isto é, cada coluna representa uma amostra de tamanho 2 sorteada aleatoriamente da população de interesse.
Em seguida, vamos calcular a média amostral de cada uma das 1.000 amostras de tamanho 2 sorteadas. Para tal, iremos usar a função apply.
Principais argumentos da função apply :
- X - uma matriz ou um array;
- MARGIN - um valor que vai indicar se a operação será executada sob as linhas (1) ou sob as colunas (2);
- FUN - a função que será aplicada.
#Calcular a média para todas as amostras obtidas
media.amostral = apply(X = mat.amostras,
MARGIN = 2,
FUN = mean)Para entendermos o comportamento das estimativas obtidas, podemos plotar um histograma.
#Carregando o tidyverse
library(tidyverse)
#Visualizar o histograma das médias amostrais
ggplot(data = tibble(valores = media.amostral),
mapping = aes(x = valores)) +
geom_histogram() +
labs(x = expression(bar(x)),
y = "Frequência",
title = "n = 2")Observamos que a distribuição amostral assume alguns valores, com probabilidades maiores para valores próximo ao 4.
O que aconteceria com essa amostra se o tamanho da amostra com o qual estamos trabalhando fosse maior do que n = 2?? Vamos repetir o procedimento com n = 20!
#Vamos definir o tamanho da amosra que iremos trabalhar
n = 20
#Vamos definir o número de amostras da dstribuição de x_barra
num.amostra = 1000
#Definindo uma matriz com 1000 colunas e 20 linhas preenchida com NA
mat.amostras = matrix(data = NA,
ncol = num.amostra,
nrow = n)
#Sorteando 1.000 amostras de tamanho 20 e armazenando-as na matriz
for(i in 1:num.amostra){
mat.amostras[,i] = sample(x = pop,
size = n,
replace = TRUE)
}
#Calcular a média para todas as amostras obtidas
media.amostral = apply(X = mat.amostras,
MARGIN = 2,
FUN = mean)
#Visualizar o histograma das médias amostrais
ggplot(data = tibble(valores = media.amostral), aes(x = valores)) +
geom_histogram() +
labs(x = expression(bar(x)),
y = "Frequência",
title = "n = 20")Aumentando o tamanho da amostra de n = 2 para n = 20, o que aconteceu com o formato da distribuição amostra de \(\bar{X}\)?
Teorema do Limite Central (TLC)
A pergunta feita anteriormente, pode ser resposndida pelo TLC.
Para uma amosra aleatória simples \((X_1,\ldots,X_n)\) retiradas de uma população com média \(\mu\) e variância \(\sigma^2\) finita, a distribuição amostral da média \(\bar{X}\) aproxima-se, para n grande, de uma distribuição normal, com média \(\mu\) e variância \(\sigma^2/n\).
Para checarmos o teorema empiricamente, vamos obter a distribuição amostral de \(\bar{X}\) para diferentes tamanhos de amostrais (n = 3, 4, 20 e 200).
#Vamos calcular a média populacional
med.pop = mean(pop)
#Vamos calcular a variância populacional
#Note que não usamos a função var, pois ela calcula a variância amostral
var.pop = 1/(5) * ((1-med.pop)^2 + (3-med.pop)^2 + (5-med.pop)^2 - (5-med.pop)^2 + (7-med.pop)^2)
# -------------------- Executando para n = 3 ---------------------
#Vamos definir o tamanho da amosra que iremos trabalhar
n = 3
#Vamos definir o número de amostras da dstribuição de x_barra
num.amostra = 1000
#Definindo uma matriz com 1000 colunas e 3 linhas preenchida com NA
mat.amostras = matrix(data = NA,
ncol = num.amostra,
nrow = n)
#Sorteando 1.000 amostras de tamanho 3 e armazenando-as na matriz
for(i in 1:num.amostra){
mat.amostras[,i] = sample(x = pop,
size = n,
replace = TRUE)
}
#Calcular a média para todas as amostras obtidas
media.amostral = apply(X = mat.amostras,
MARGIN = 2,
FUN = mean)
#Visualizar o histograma das médias amostrais
graf1 = ggplot(data = tibble(valores = media.amostral),
mapping = aes(x = valores)) +
geom_histogram(aes(y = ..density..), bins = 15) +
stat_function(fun = dnorm,
args = list(mean = med.pop,
sd = sqrt(var.pop/n)),
colour = "Red") +
labs(x = expression(bar(x)),
y = "Densidade",
title = "n = 3")
# -------------------- Executando para n = 4 ---------------------
#Vamos definir o tamanho da amosra que iremos trabalhar
n = 4
#Vamos definir o número de amostras da dstribuição de x_barra
num.amostra = 1000
#Definindo uma matriz com 1000 colunas e 4 linhas preenchida com NA
mat.amostras = matrix(data = NA,
ncol = num.amostra,
nrow = n)
#Sorteando 1.000 amostras de tamanho 4 e armazenando-as na matriz
for(i in 1:num.amostra){
mat.amostras[,i] = sample(x = pop,
size = n,
replace = TRUE)
}
#Calcular a média para todas as amostras obtidas
media.amostral = apply(X = mat.amostras,
MARGIN = 2,
FUN = mean)
#Visualizar o histograma das médias amostrais
graf2 = ggplot(data = tibble(valores = media.amostral),
mapping = aes(x = valores)) +
geom_histogram(aes(y = ..density..), bins = 15) +
stat_function(fun = dnorm,
args = list(mean = med.pop,
sd = sqrt(var.pop/n)),
colour = "Red") +
labs(x = expression(bar(x)),
y = "Densidade",
title = "n = 4")
# -------------------- Executando para n = 20 ---------------------
#Vamos definir o tamanho da amosra que iremos trabalhar
n = 20
#Vamos definir o número de amostras da dstribuição de x_barra
num.amostra = 1000
#Definindo uma matriz com 1000 colunas e 20 linhas preenchida com NA
mat.amostras = matrix(data = NA,
ncol = num.amostra,
nrow = n)
#Sorteando 1.000 amostras de tamanho 20 e armazenando-as na matriz
for(i in 1:num.amostra){
mat.amostras[,i] = sample(x = pop,
size = n,
replace = TRUE)
}
#Calcular a média para todas as amostras obtidas
media.amostral = apply(X = mat.amostras,
MARGIN = 2,
FUN = mean)
#Visualizar o histograma das médias amostrais
graf3 = ggplot(data = tibble(valores = media.amostral),
mapping = aes(x = valores)) +
geom_histogram(aes(y = ..density..), bins = 15) +
stat_function(fun = dnorm,
args = list(mean = med.pop,
sd = sqrt(var.pop/n)),
colour = "Red") +
labs(x = expression(bar(x)),
y = "Densidade",
title = "n = 20")
# -------------------- Executando para n = 200 ---------------------
#Vamos definir o tamanho da amosra que iremos trabalhar
n = 200
#Vamos definir o número de amostras da dstribuição de x_barra
num.amostra = 1000
#Definindo uma matriz com 1000 colunas e 200 linhas preenchida com NA
mat.amostras = matrix(data = NA,
ncol = num.amostra,
nrow = n)
#Sorteando 1.000 amostras de tamanho 200 e armazenando-as na matriz
for(i in 1:num.amostra){
mat.amostras[,i] = sample(x = pop,
size = n,
replace = TRUE)
}
#Calcular a média para todas as amostras obtidas
media.amostral = apply(X = mat.amostras,
MARGIN = 2,
FUN = mean)
#Visualizar o histograma das médias amostrais
graf4 = ggplot(data = tibble(valores = media.amostral),
mapping = aes(x = valores)) +
geom_histogram(aes(y = ..density..), bins = 15) +
stat_function(fun = dnorm,
args = list(mean = med.pop,
sd = sqrt(var.pop/n)),
colour = "Red") +
labs(x = expression(bar(x)),
y = "Densidade",
title = "n = 200")
library(gridExtra)
grid.arrange(graf1, graf2, graf3, graf4, ncol = 2, nrow = 2)A aproximação do histograma com a distribuição normal começa a ficar razoável quando o tamanho da amostra cresce. Que fica de acordo com o que o TLC nos fala sobre o tamanho da amostra retirada da população (n deve ser grande).
Vale a pena ressaltar que nos gráficos acima, estamos apresentando os histogramas em densidade (e não em frequência), fizemos isso ao acrescentar um aes(y = ..density..) na função geom_histogram. Também definimos que todos os histogramas deveriam ser apresentados com 15 intervalos de classes (bins = 15).
O procedimento empírico que foi executado acima poderia ser aplicado para outras estatísticas de interesse, como mediana, variância, entre outras.