Skip to content

Instantly share code, notes, and snippets.

@GuiMarthe
Last active June 11, 2017 04:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GuiMarthe/d29f87f14351585519f5986cdd917c7a to your computer and use it in GitHub Desktop.
Save GuiMarthe/d29f87f14351585519f5986cdd917c7a to your computer and use it in GitHub Desktop.
Um simples script que cria 300 variáveis normais de 100 pares de média e variância distintas e calcula suas médias e intervalos de confiança por meio do bootstrap e ainda calcula a proporção de vezes que a verdadeira média esta no intervalo
library(tidyverse)
### criando 300 váriáveis normais para 20 diferentes
### pares de média e variância distintos
set.seed(42)
df <- tibble(
grupo = purrr::map_chr(1:100, ~paste('grupo_', ., sep = '')),
true_mean = runif(100),
true_variance = runif(100),
data = purrr::map2(true_mean, true_variance, rnorm, n = 300)
) %>%
unnest(obs = data)
## a função que calcula o intervalo de bootstrap para a média
## baseada na documentação do broom e no método delta de bootstrap
empirical_boot_mean <- function(tb, column, n=1e3) {
alpha = 0.05
group_mean <- mean(tb[[column]])
df <- tb %>%
broom::bootstrap(n) %>%
do(data_frame(boot_mean = mean(.[[column]]))) %>%
mutate(delta = boot_mean - group_mean) %>%
ungroup() %>%
summarise(
lowci = group_mean + quantile(delta, alpha),
highci = group_mean + quantile(delta, 1 - alpha),
mean_boot = group_mean
)
df
}
## calculando os intervalos de confiança por grupo de média e variância
dfResult <-
df %>%
group_by(grupo, true_mean, true_variance) %>%
nest() %>%
mutate(boot_interval = purrr::map(data, .f = ~empirical_boot_mean(.,'obs', n = 400))) %>%
unnest(boot_interval) %>%
select(-data)
## calculando a proporção de vezes que a verdadeira média
## esta dentro do intervalo de confiança
dfResult %>%
mutate(in_interval = true_mean > lowci & true_mean < highci) %>%
summarise(prop = sum(in_interval)/n())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment