GET00130 - Métodos Computacionais para EstatÃstica II
Conteúdo da aula
- Revisando ggplot2;
- Revisando criação de funções;
- Revisando transformações de variáveis e distribuições amostrais.
1 - Situação problema 1
Suponha que possuÃmos dados referentes a vendas de produtos em lojas espalhadas por diversas cidades brasileiras.
Na base Vendas.csv possuÃmos dados do número de um conjunto de produtos vendidos nos meses de Janeiro a Junho, do número de funcionários, da cidade na qual a loja está localizada e se a loja participou de uma campanha publicitária para esses produtos. Todas as informações estão disponÃveis para os anos de 2019 e 2020. Caso o número de funcionários seja 0, considere essa informação como NA.
Suponha que desejamos criar um arquivo único com todos os dados disponÃveis.
Atividade: Importe o arquivo Vendas.csv, fazendo com que a função de importação leia a variável cod_loja como um character. Armazene em um objeto chamado base.
#Visualizando o objeto base
base# A tibble: 400 x 11
cod_loja cidade campanha ano venda_JAN venda_FEV venda_MAR venda_ABR
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 5654 Niterói 0 2019 73 96 48 59
2 5654 Niterói 1 2020 76 103 56 61
3 23029 Belo Horizon… 0 2019 78 104 58 61
4 23029 Belo Horizon… 1 2020 79 104 59 62
5 26994 São Gonçalo 0 2019 79 107 61 62
6 26994 São Gonçalo 0 2020 80 107 63 62
7 23507 São Gonçalo 1 2019 80 109 63 64
8 23507 São Gonçalo 0 2020 82 110 63 64
9 38465 Cabo Frio 1 2019 82 111 64 64
10 38465 Cabo Frio 0 2020 83 113 64 65
# … with 390 more rows, and 3 more variables: venda_MAI <dbl>, venda_JUN <dbl>,
# funcionarios <dbl>
Fazendo o tratamento da base.
#transformando em factor as variáveis qualitativas
base$cidade = factor(base$cidade)
base$campanha = factor(base$campanha,
labels = c("Não","Sim"))
#transformando o 0 em NA na variável número de funcionários
base$funcionarios = na_if(base$funcionarios, 0)
#Visualizando o objeto
base# A tibble: 400 x 11
cod_loja cidade campanha ano venda_JAN venda_FEV venda_MAR venda_ABR
<chr> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
1 5654 Niterói Não 2019 73 96 48 59
2 5654 Niterói Sim 2020 76 103 56 61
3 23029 Belo Horizon… Não 2019 78 104 58 61
4 23029 Belo Horizon… Sim 2020 79 104 59 62
5 26994 São Gonçalo Não 2019 79 107 61 62
6 26994 São Gonçalo Não 2020 80 107 63 62
7 23507 São Gonçalo Sim 2019 80 109 63 64
8 23507 São Gonçalo Não 2020 82 110 63 64
9 38465 Cabo Frio Sim 2019 82 111 64 64
10 38465 Cabo Frio Não 2020 83 113 64 65
# … with 390 more rows, and 3 more variables: venda_MAI <dbl>, venda_JUN <dbl>,
# funcionarios <dbl>
Suponha que nosso desejo seja fazer um boxplot da venda no mês de Junho.
#boxplot da variável venda_JUN
base |>
ggplot(mapping = aes(y = venda_JUN)) +
geom_boxplot() +
labs(y = "Número de produtos vendidos") Ao visualizar os resultados, alguém nos disse que seria interessante comparar as vendas no mês de junho para as lojas que participaram da campanha e para as que não participaram.
#boxplot venda em junho por campanha
base |>
ggplot(mapping = aes(x = campanha, y = venda_JUN)) +
geom_boxplot() +
labs(x = "Campanha",
y = "Número de produtos vendidos")Suponha que queiramos observar graficamente a relação entre as vendas dos meses de janeiro e junho para cada cidade em cada ano.
#boxplot venda em junho por campanha
graf_1 = base |>
ggplot(mapping = aes(x = venda_JAN,
y = venda_JUN)) +
geom_point() +
labs(x = "Número de produtos vendidos em Janeiro",
y = "Número de produtos vendidos em Junho")
#Visulaizando gráfico
graf_1#Criando o gráfico para as combinações de cidade e ano
graf_1 +
facet_grid(ano ~ cidade)Atividade: Faça uma comparação gráfica, por meio de histogramas, do comportamento da venda do número de produtos no primeiro trimestre de 2019 por municÃpio.
2 - Situação problema 2
Suponha que o nosso interesse seja o de criar funções e plotar as mesmas no R. Para exemplificarmos, vamos considerar o cenário a seguir.
Vamos considerar uma amostra aleatória simples, \(X_1, \ldots, X_n\) de uma distribuição Exponencial(\(\lambda\)). A função de verossimilhança é dada por
\[L(\lambda|x_1,\ldots,x_n) = \prod_{i=1}^{n} f(x_i|\lambda) = \lambda e^{-\lambda x_1} \times \ldots \times \lambda e^{-\lambda x_n} = \lambda^ne^{-\lambda\sum_{i=1}^{n}x_i}.\]
#Criando uma função que calcula a função de verossimilhança de uma Exponencial
f.vero = function(l,amostra){
val = l^length(amostra)*exp(-l*sum(amostra))
return(val)
}Suponha que foi observada a seguinte amostra 0.117203051, 0.028553559, 0.006832052, 0.180076271, 0.003652716, 0.040062848, 0.049557241 e 0.007092685.
Vamos fazer o plot da função de verossimilhança de 0 a 100?!
#Plotando o gráfico da função de verossimilhança
ggplot(data = tibble(z = c(0,100)),
mapping = aes(x = z)) +
stat_function(fun = f.vero,
args = list(amostra = c(0.117203051, 0.028553559, 0.006832052, 0.180076271, 0.003652716, 0.040062848, 0.049557241, 0.007092685))) +
labs(y = "Função de verossimilhança",
x = expression(lambda))Atividade: Faça o gráfico da função de verossimilhança de uma distribuição Gama(\(\alpha\),2), supondo que foi observada a amostra: 0.0633, 0.8730, 0.4798, 0.7240 e 1.5393
3 - Situação problema 3
Muitas vezes, nos deparamos com resultados teóricos, que podem ser difÃceis de visualizarmos. Uma abordagem, que pode nos auxiliar nestes momentos, é tentar verificar esses resultados numericamente.
Para simbolizar a ideia global, suponha que definida uma variável aleatória \(X\) e uma transformação sobre a mesma, suponha \(Y = X^2\). Se existe um resultado que garante qual a distribuição de \(Y\), é possÃvel verificar a mesma de forma numérica da seguinte forma:
- 1 - Gere uma amostra \(x_1,\ldots,x_n\) de \(X\);
- 2 - Aplique a transforação \(Y\) na amostra \(x_1,\ldots,x_n\) obtida no passo anterior;
- 3 - Analise o comportamento da amostra \(y_1,\ldots,y_n\), comparando com a distribuição de \(Y\).
Vamo supor que \(X \sim N(0,1)\) e \(Z \sim N(0,1)\). Existe um resultado que garante que \(Y = X^2 + Z^2 \sim \chi^2_{(2)}\). É possÃvel checarmos o resultado usando o conhecimento de probabilidade, mas aqui, vamos fazer isso numericamente.
# 1 - Gerando n valores de N(0,1)
amostra1 = rnorm(n = 500,
mean = 0,
sd = 1)
amostra2 = rnorm(n = 500,
mean = 0,
sd = 1)
# 2 - Calculando Y na amostra de X
y = amostra1^2 + amostra2^2
# 3 - Analisando o comportamento da amostra e comparando com a distribuição Qui-quadrado com 1 grau de liberdade
ggplot(data = tibble(valor = y),
mapping = aes(x = valor)) +
geom_histogram(aes(y = ..density..),
boundary = 0) +
stat_function(fun = dchisq,
args = list(df = 2),
colour = "Red") +
labs(x = expression(x^2),
y = "Densidade")Atividade: Seja \(X \sim Gama(5,1)\) e \(Y \sim Gama(10,1)\). Verifique numericamente se a distribuição de \(X + Y \sim Gama(15,1)\)
Vamos tentar checar outro resultado?!
Seja \(X_1, \ldots, X_n\) uma amostra aleatória de uma N(\(\mu\),\(\sigma^2\)). Existe um resultado que nos diz que \[md(X_1, \ldots, X_n) \sim N\left(\mu,\frac{\pi\sigma^2}{2n}\right).\]
Vamos verificar o resultado numericamente?! Suponha \(\mu = 10\), \(\sigma^2 = 16\) e \(n = 20\).
#Definindo o número de amostras de tamanho n que serão sorteadas
num.amostra = 5000
#Definindo o tamanho da amostra
n = 20
#Definindo o objeto onde serão armazenads as amostras
amostra = matrix(NA,ncol = num.amostra, nrow = n)
#Sorteando as 1000 amostras de tamanho 3
for(i in 1:num.amostra){
amostra[,i] = rnorm(n = n,
mean = 10,
sd = 4)
}
#Calculando a mediana de cada amostra
variancia = apply(X = amostra,
MARGIN = 2,
FUN = median)
#Vamos plotar o histograma dos valores observados de T e acrescentar sob o histograma
#a densidade teórica de uma distribuição t
ggplot(data = tibble(variancia),
mapping = aes(x = variancia)) +
geom_histogram(aes(y = ..density..)) +
stat_function(fun = dnorm,
args = list(mean = 10,
sd = sqrt(pi*16/(2*n))),
col = "red") +
labs(x = "md",
y = "Densidade")