dados = read_csv(here::here("data/satisfacoes.csv"), 
                 col_types = "cdcc") 

glimpse(dados)
## Rows: 115
## Columns: 4
## $ user_id      <chr> "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11",…
## $ satisfaction <dbl> 2.0, 3.0, 1.5, 1.0, 2.0, 2.5, 2.0, 3.0, 2.0, 2.0, 2.0, 2…
## $ scenario     <chr> "baseline", "baseline", "baseline", "baseline", "baselin…
## $ group        <chr> "3", "1", "2", "2", "1", "1", "3", "3", "2", "1", "3", "…

comparacao1 = dados %>% 
    filter(scenario %in% c("baseline", "like/dislike"))

theta <- function(d, i) {
    agrupado = d %>% 
        slice(i) %>% 
        group_by(scenario) %>% 
        summarise(media = mean(satisfaction))
    b = agrupado %>% filter(scenario == "baseline") %>% pull(media)
    l = agrupado %>% filter(scenario == "like/dislike") %>% pull(media)
    l - b
}

theta(comparacao1, i = 1:NROW(comparacao1))
## [1] 1.521739
ci1 = boot(data = comparacao1,
           statistic = theta,
           R = 2000) %>%
    tidy(conf.level = .95,
         conf.method = "bca",
         conf.int = TRUE)

datatable(head(ci1), options = list(pageLength = 10, dom = 'tip'), rownames = FALSE)

comparacao2 = dados %>% 
    filter(scenario %in% c("baseline", "up/downvoting"))

theta <- function(d, i) {
    agrupado = d %>% 
        slice(i) %>% 
        group_by(scenario) %>% 
        summarise(media = mean(satisfaction))
    b = agrupado %>% filter(scenario == "baseline") %>% pull(media)
    l = agrupado %>% filter(scenario == "up/downvoting") %>% pull(media)
    l - b
}

theta(comparacao2, i = 1:NROW(comparacao2))
## [1] 2.26087
ci2 = boot(data = comparacao2,
           statistic = theta,
           R = 2000) %>%
    tidy(conf.level = .95,
         conf.method = "bca",
         conf.int = TRUE)

datatable(head(ci2), options = list(pageLength = 10, dom = 'tip'), rownames = FALSE)

comparacao3 = dados %>% 
    filter(scenario %in% c("baseline", "skip"))

theta <- function(d, i) {
    agrupado = d %>% 
        slice(i) %>% 
        group_by(scenario) %>% 
        summarise(media = mean(satisfaction))
    b = agrupado %>% filter(scenario == "baseline") %>% pull(media)
    l = agrupado %>% filter(scenario == "skip") %>% pull(media)
    l - b
}

theta(comparacao3, i = 1:NROW(comparacao3))
## [1] 0.3913043
ci3 = boot(data = comparacao3,
           statistic = theta,
           R = 2000) %>%
    tidy(conf.level = .95,
         conf.method = "bca",
         conf.int = TRUE)

datatable(head(ci3), options = list(pageLength = 10, dom = 'tip'), rownames = FALSE)

comparacao4 = dados %>% 
    filter(scenario %in% c("baseline", "combined"))

theta <- function(d, i) {
    agrupado = d %>% 
        slice(i) %>% 
        group_by(scenario) %>% 
        summarise(media = mean(satisfaction))
    b = agrupado %>% filter(scenario == "baseline") %>% pull(media)
    l = agrupado %>% filter(scenario == "combined") %>% pull(media)
    l - b
}

theta(comparacao4, i = 1:NROW(comparacao4))
## [1] 1.913043
ci4 = boot(data = comparacao4,
           statistic = theta,
           R = 2000) %>%
    tidy(conf.level = .95,
         conf.method = "bca",
         conf.int = TRUE)

datatable(head(ci4), options = list(pageLength = 10, dom = 'tip'), rownames = FALSE)

Conclusão

Segundo o artigo, o método baseline possui uma diferença negativa, quando comparado com os outros três métodos. Logo, assumindo que quanto mais a média do theta chapéu for distante positivamente do baseline, o método que está sendo comparado será mais eficiente, ou seja, deixará mais pessoas satisfeitas. Partindo disso, temos que o maior diferença das médias dos thetas (statistics) está no método “up/downvoting”. Portanto, é plausível dizer que, com 95% de confiança, os usuários avaliados saíram mais satisfeitos do experimento utilizando este método.

Graficamente:

Plottando os dados em um gráfico, é possível perceber que, de fato, dentro desta população, o nível de satisfação foi maior na métrica up/downvoting.

dados %>% 
    ggplot(mapping = aes(scenario, satisfaction, color = scenario)) +
    geom_quasirandom()