Usamos os dados coletados por Andryw Marques para o mestrado dele. Cada medição reflete os hábitos de uma pessoa usando o last.fm durante um semestre. Usaremos dois atributos que crio abaixo: o número (médio) de artistas novos (ie. previamente não escutados) escutados por mês pela pessoa, e se a pessoa é do grupo de 5% de pessoas que escuta artistas mais/menos populares.
lastfm = read_csv(
here::here("data/experimento-lastfm.csv"),
col_types = cols(.default = col_double(),
user = col_character())
)
amostra = lastfm %>%
filter(!is.na(news + old)) %>%
mutate(
novos = news / 6,
grupo = case_when(
mediana_pop >= quantile(mediana_pop, .95) ~ "fã de pop",
mediana_pop <= quantile(mediana_pop, .05) ~ "não gosta de pop",
TRUE ~ "outros"
)
) %>%
filter(grupo != "outros") %>%
select(grupo, novos)
amostra %>% count(grupo)
glimpse(amostra)
## Rows: 1,200
## Columns: 2
## $ grupo <chr> "não gosta de pop", "não gosta de pop", "fã de pop", "fã de pop…
## $ novos <dbl> 4.166667, 4.666667, 3.500000, 3.833333, 2.000000, 20.166667, 23…
amostra %>%
ggplot(aes(x = novos)) +
facet_wrap(~ grupo, ncol = 1) +
geom_histogram(binwidth = 1, boundary = 0) +
geom_rug()
fas = amostra %>%
filter(grupo == "fã de pop")
fas %>%
summarise(media = mean(novos))
s <- function(d, i) {
sumarizado = d %>%
slice(i) %>%
summarise(do_grupo = mean(novos))
sumarizado %>%
pull(do_grupo)
}
s(fas, 1:(nrow(fas))) # theta_chapeu
## [1] 4.033333
library(boot)
library(broom)
booted <- boot(data = fas,
statistic = s,
R = 2000)
ci_fas = tidy(booted,
conf.level = .95,
conf.method = "basic",
conf.int = TRUE)
glimpse(ci_fas)
## Rows: 1
## Columns: 5
## $ statistic <dbl> 4.033333
## $ bias <dbl> -0.0002558333
## $ std.error <dbl> 0.1071847
## $ conf.low <dbl> 3.811688
## $ conf.high <dbl> 4.236375
ci_fas %>%
ggplot(aes(
ymin = conf.low,
y = statistic,
ymax = conf.high,
x = "Fãs de pop"
)) +
geom_linerange() +
geom_point(color = "coral", size = 2) +
scale_y_continuous(limits = c(0, 5)) +
labs(x = "", y = "Artistas novos/mês") +
coord_flip()
nao_fas = amostra %>%
filter(grupo != "fã de pop")
nao_fas %>%
summarise(media = mean(novos))
booted <- boot(data = nao_fas,
statistic = s,
R = 1000)
ci_naofas = tidy(booted,
conf.level = .95,
conf.method = "basic",
conf.int = TRUE)
glimpse(ci_naofas)
## Rows: 1
## Columns: 5
## $ statistic <dbl> 6.071389
## $ bias <dbl> -0.009993889
## $ std.error <dbl> 0.2430288
## $ conf.low <dbl> 5.573625
## $ conf.high <dbl> 6.518263
cis = bind_rows(
"pop" = ci_fas,
"antipop" = ci_naofas,
.id = "grupo"
)
cis %>%
ggplot(aes(
ymin = conf.low,
y = statistic,
ymax = conf.high,
x = grupo
)) +
geom_linerange() +
geom_point(color = "coral", size = 2) +
scale_y_continuous(limits = c(2, 8)) +
labs(x = "", y = "Artistas novos/mês") +
coord_flip()
s <- function(d, i) {
agrupado = d %>%
slice(i) %>%
group_by(grupo) %>%
summarise(do_grupo = mean(novos), .groups = "drop")
a = agrupado %>% filter(grupo == "fã de pop") %>% pull(do_grupo)
b = agrupado %>% filter(grupo == "não gosta de pop") %>% pull(do_grupo)
a - b
}
theta_c = s(amostra, 1:nrow(amostra))
theta_c
## [1] -2.038056
booted <- boot(data = amostra,
statistic = s,
R = 2000)
ci = tidy(booted,
conf.level = .95,
conf.method = "basic",
conf.int = TRUE)
glimpse(ci)
## Rows: 1
## Columns: 5
## $ statistic <dbl> -2.038056
## $ bias <dbl> -0.006059701
## $ std.error <dbl> 0.2594757
## $ conf.low <dbl> -2.528261
## $ conf.high <dbl> -1.517547
ci %>%
ggplot(aes(
ymin = conf.low,
y = statistic,
ymax = conf.high,
x = ""
)) +
geom_linerange() +
geom_point(color = "coral", size = 3) +
scale_y_continuous(limits = c(-5, 5)) +
labs(x = "", y = "Diferença na média (fãs - não fãs)") +
coord_flip()