buscas = read_csv(here::here("data/search_data.csv"))
## Parsed with column specification:
## cols(
## session_id = col_character(),
## search_index = col_double(),
## session_length = col_double(),
## session_start_timestamp = col_double(),
## session_start_date = col_datetime(format = ""),
## group = col_character(),
## results = col_double(),
## num_clicks = col_double(),
## first_click = col_double()
## )
glimpse(buscas)
## Observations: 136,234
## Variables: 9
## $ session_id <chr> "0000cbcb67c19c45", "0001382e027b2ea4", …
## $ search_index <dbl> 1, 1, 1, 1, 2, 3, 4, 5, 6, 1, 1, 2, 1, 1…
## $ session_length <dbl> 0, 303, 435, 58, 58, 58, 58, 58, 58, 0, …
## $ session_start_timestamp <dbl> 20160303152045, 20160307084955, 20160305…
## $ session_start_date <dttm> 2016-03-03 15:20:45, 2016-03-07 08:49:5…
## $ group <chr> "b", "b", "b", "a", "a", "a", "a", "a", …
## $ results <dbl> 20, 18, 20, 20, 20, 20, 20, 20, 20, 1, 0…
## $ num_clicks <dbl> 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0…
## $ first_click <dbl> NA, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA…
theta_diferenca_grupos_click = function(d, i){
clicks_grupos = d %>%
slice(i) %>%
group_by(group) %>%
summarise(click_grupo = mean(num_clicks > 0))
a = clicks_grupos %>% filter(group == "a") %>% pull(click_grupo)
b = clicks_grupos %>% filter(group == "b") %>% pull(click_grupo)
a - b
}
theta_diferenca_grupos_click(buscas, 1:NROW(buscas))
## [1] 0.136344
ci1 = buscas %>%
boot(statistic = theta_diferenca_grupos_click, R = 500) %>%
tidy(conf.level = 0.95,
conf.int = TRUE)
glimpse(ci1)
## Observations: 1
## Variables: 5
## $ statistic <dbl> 0.136344
## $ bias <dbl> 0.00001457066
## $ std.error <dbl> 0.002369003
## $ conf.low <dbl> 0.1316861
## $ conf.high <dbl> 0.1413082
ci1 %>%
ggplot(aes(
x = "",
y = statistic,
ymin = conf.low,
ymax = conf.high
)) +
geom_pointrange() +
geom_point(size = 3) +
labs(x = "a - b",
y = "")
theta_embaralhado = function(d){
clicks_grupos_th = d %>%
mutate(grupo_embaralhado = sample(group, n())) %>%
group_by(grupo_embaralhado) %>%
summarise(click_grupo_th = mean(num_clicks > 0))
a = clicks_grupos_th %>% filter(grupo_embaralhado == "a") %>% pull(click_grupo_th)
b = clicks_grupos_th %>% filter(grupo_embaralhado == "b") %>% pull(click_grupo_th)
a - b
}
theta_embaralhado(buscas)
## [1] 0.001712871
diffs1 = replicate(1000, {theta_embaralhado(buscas)})
tibble(diferenca = diffs1) %>%
ggplot(aes(x = diferenca)) +
# geom_histogram(binwidth = .2, fill = "white", color = "darkgreen") +
geom_density(fill = "white", color = "darkgreen") +
geom_vline(xintercept = theta_diferenca_grupos_click(buscas, 1:NROW(buscas)),
color = "orange") +
geom_vline(xintercept = - theta_diferenca_grupos_click(buscas, 1:NROW(buscas)),
color = "orange") +
geom_rug()
# p-valor (click)
mean(abs(diffs1) >= abs(theta_diferenca_grupos_click(buscas, 1:NROW(buscas))))
## [1] 0
# p-valor biblioteca (click)
grupo_a = buscas %>% filter(group == "a", num_clicks > 0) %>% pull(num_clicks)
grupo_b = buscas %>% filter(group == "b", num_clicks > 0) %>% pull(num_clicks)
permTS(grupo_a, grupo_b)
##
## Permutation Test using Asymptotic Approximation
##
## data: grupo_a and grupo_b
## Z = 21.695, p-value < 0.00000000000000022
## alternative hypothesis: true mean grupo_a - mean grupo_b is not equal to 0
## sample estimates:
## mean grupo_a - mean grupo_b
## 0.2407235
A diferença entre o clickthrough rate dos grupos A e B via intervalos de confiança de 95% e R = 500 foi igual a 0.136344, com limite inferior igual a 0.1319746, limite superior igual a 0.1407032 e erro padrão igual a 0.002198737. A diferença entre o clickthrough rate dos grupos A e B via testes de hipótese com permutação foi igual a 0.0007414102, com p-valor muito próximo de zero e igual a 0.00000000000000022. Com o teste de hipóteses, vimos que o p-valor foi muito próximo de zero, significando que a probabilidade de ele ser igual a um modelo nulo também é muito próxima de zero. Já com os intervalos de confiança, vimos que a diferença entre os grupos é muito pequena, em torno de 0,1. Eles concordam e são importantes para alguém tomando decisões na wikimedia, pois mostram que a diferença entre esses dois grupos é muito pequena nos dois casos (com intervalos de confiança e testes de hipótese).
theta_diferenca_grupos_resultado = function(d, i){
resultados_grupos = d %>%
slice(i) %>%
group_by(group) %>%
summarise(resultado_grupo = mean(results == 0))
a = resultados_grupos %>% filter(group == "a") %>% pull(resultado_grupo)
b = resultados_grupos %>% filter(group == "b") %>% pull(resultado_grupo)
a - b
}
theta_diferenca_grupos_resultado(buscas, 1:NROW(buscas))
## [1] -0.00257301
ci2 = buscas %>%
boot(statistic = theta_diferenca_grupos_resultado, R = 500) %>%
tidy(conf.level = 0.95,
conf.int = TRUE)
glimpse(ci2)
## Observations: 1
## Variables: 5
## $ statistic <dbl> -0.00257301
## $ bias <dbl> -0.00003937472
## $ std.error <dbl> 0.002202617
## $ conf.low <dbl> -0.006896372
## $ conf.high <dbl> 0.001630891
ci2 %>%
ggplot(aes(
x = "",
y = statistic,
ymin = conf.low,
ymax = conf.high
)) +
geom_pointrange() +
geom_point(size = 3) +
labs(x = "a - b",
y = "")
theta_embaralhado = function(d){
clicks_grupos_th = d %>%
mutate(grupo_embaralhado = sample(group, n())) %>%
group_by(grupo_embaralhado) %>%
summarise(click_grupo_th = mean(results == 0))
a = clicks_grupos_th %>% filter(grupo_embaralhado == "a") %>% pull(click_grupo_th)
b = clicks_grupos_th %>% filter(grupo_embaralhado == "b") %>% pull(click_grupo_th)
a - b
}
theta_embaralhado(buscas)
## [1] -0.0009650742
diffs2 = replicate(1000, {theta_embaralhado(buscas)})
tibble(diferenca = diffs2) %>%
ggplot(aes(x = diferenca)) +
# geom_histogram(binwidth = .2, fill = "white", color = "darkgreen") +
geom_density(fill = "white", color = "darkgreen") +
geom_vline(xintercept = theta_diferenca_grupos_resultado(buscas, 1:NROW(buscas)),
color = "orange") +
geom_vline(xintercept = - theta_diferenca_grupos_resultado(buscas, 1:NROW(buscas)),
color = "orange") +
geom_rug()
# p-valor (resultados zero)
mean(abs(diffs2) >= abs(theta_diferenca_grupos_resultado(buscas, 1:NROW(buscas))))
## [1] 0.271
A diferença na proporção buscas com zero resultados dos grupos A e B via intervalos de confiança de 95% e R = 500 foi igual a -0.00257301, com limite inferior igual a -0.00257301, limite superior igual a 0.001727133 e erro padrão igual a 0.002130845. A diferença na proporção buscas com zero resultados dos grupos A e B via testes de hipótese com permutação foi igual a 0.0009108504, com p-valor igual a 0.239. Com o teste de hipóteses, vimos que o p-valor foi em torno de 0.24, significando que a probabilidade de ele ser igual a um modelo nulo é em torno de 24%. Já com os intervalos de confiança, vimos que a diferença entre os grupos é muito pequena, em torno de -0,002. Eles não concordam e ficaria difícil para alguém da wikimedia tomar decisões com esses dados vindos de intervalos de confiança e testes de hipóteses, porque além de ter dado diferenças pequenas, o p-valor foi alto.