Contextualizando

Para este checkpoint, revisite em um novo relatório duas das perguntas que você respondeu utilizando ICs no CP 1, e as responda utilizando um teste de hipótese com permutação. Seu relatório deve:

  1. Descrever seu teste: o que está sendo comparado? Qual a permutação sendo feita?
  2. Relatar seu resultado: a diferença é significativa? Qual o p-valor? Reporte segundo as boas práticas dos materiais aqui do canvas.
  3. Comentar sobre as vantagens e desvantagens que você vê no resultado ao qual chegou agora e utilizando ICs para as mesmas perguntas.

Importando as bibliotecas

library(tidyverse)
library(here)
library(lubridate)
library(knitr)
library(ggplot2)
library(boot) 
library(resample) 

theme_set(theme_bw())

Carregando os dados para análise

dados = read_csv(here::here("data/search_data.csv")) %>%
head(100000)

Para facilitar nossa análise, iremos adicionar uma coluna referente a data realizada na pesquisa (excluindo a informação de horas), para isso iremos utilizar a variável nativa do dataset {r} session_start_date

dados <- mutate(dados, date = date(session_start_date))

Tratando os dados

Vamos inicialmente verificar comportamentos indesejados:

  1. Retirar os registros onde o local do primeiro click ({r} first_click) é maior que a quantidade de resultados da busca ({r} results). Ou seja, um comportamento que não deveria acontecer.
trash = dados %>%
  filter(first_click > results )
trash
## # A tibble: 245 x 9
##    session_id    search_index session_start_tim~ session_start_date  group
##    <chr>                <int>              <dbl> <dttm>              <chr>
##  1 012460df6605~            3    20160307172049. 2016-03-07 17:20:49 a    
##  2 0705f6124671~            6    20160308060538. 2016-03-08 06:05:38 a    
##  3 07d1244fb0ec~            5    20160304203229. 2016-03-04 20:32:29 a    
##  4 0c02236a143c~            2    20160304121050. 2016-03-04 12:10:50 a    
##  5 0d050fd8343f~            2    20160305114803. 2016-03-05 11:48:03 a    
##  6 0d6eb81512d8~            3    20160302133910. 2016-03-02 13:39:10 a    
##  7 10541aaefd0e~            3    20160303195601. 2016-03-03 19:56:01 a    
##  8 114e3fa48cc9~            3    20160302191856. 2016-03-02 19:18:56 a    
##  9 114e3fa48cc9~           11    20160302192040. 2016-03-02 19:20:40 a    
## 10 12060c71917f~            1    20160308062556. 2016-03-08 06:25:56 b    
## # ... with 235 more rows, and 4 more variables: results <int>,
## #   num_clicks <int>, first_click <int>, date <date>
  1. Retirar os registros onde houveram clicks ({r} num_clicks > 0), mas não existe registro do primeiro click ({r} first_click). Ou seja, um comportamento que não deveria acontecer.
trash2 =  dados %>%
  filter(num_clicks > 0 & is.na(first_click) )
trash2
## # A tibble: 2 x 9
##   session_id    search_index session_start_time~ session_start_date  group
##   <chr>                <int>               <dbl> <dttm>              <chr>
## 1 1a9459a33812~            1     20160302011149. 2016-03-02 01:11:49 a    
## 2 5caa35c50d2f~            2     20160301010725. 2016-03-01 01:07:25 a    
## # ... with 4 more variables: results <int>, num_clicks <int>,
## #   first_click <int>, date <date>

Agora vamos limpar nosso dataset retirando esses registros indesejados na análise:

dados = dados %>%
  filter((first_click <= results) | (is.na(first_click) & num_clicks == 0))

Variáveis utilizadas na análise

{r} group : Um marcador (“a” ou “b”);

{r} results : Num. de ocorrências retornadas para o usuário;

{r} num_clicks : Num. de ocorrências clicadas pelo usuário;

{r} first_click : Posição da ocorrência que o usuário clicou primeiro.

{r} session_start_date: Data e hora do início da pesquisa.

{r}session_length : Duração da sessão

01) Qual é a taxa de cliques geral diária? Como isso varia entre os grupos?

Vamos definir nossa hipótese nula: - Não existe variação entre as taxas diárias nos grupos a e b.

Utilizando Testes de Hipóteses, vamos permutar a variável {r} group

set.seed(123)
fun.taxa <- function(dado) {
    cliques <- dado %>%
    arrange(date) %>%
    group_by(date, num_clicks) %>%
    summarise(n = n()) %>% 
    mutate(cliques = n / sum(n) * 100) %>%
    ungroup()

  taxas = cliques %>%
    filter(num_clicks > 0) %>%
    group_by(date) %>%
    summarise(cliques = sum(cliques)) %>%
    pull(cliques)
  return(mean(taxas))
}

dados.subset <- subset(dados, select = c("session_id", "group", "num_clicks", "date", "results")) 
permutationTest2(dados.subset, fun.taxa(dados.subset), treatment = group)
## Call:
## permutationTest2(data = dados.subset, statistic = fun.taxa(dados.subset), 
##     treatment = group)
## Replications: 9999
## Two samples, sample sizes are 67636 32117
## 
## Summary Statistics for the difference between samples 1 and 2:
##                             Observed         Mean Alternative PValue
## fun.taxa(dados.subset): a-b 13.25663 -0.004105716   two.sided  2e-04

COnclusão: O p-value tem um valor pequeno (2e-04), assim podemos rejeitar a hipótese nula. Ou seja, podemos afirmar que há variação entre a média das taxas diárias de cliques dos grupos a e b na população.

Resultado com certo nível de significância.

2) Qual é a taxa de resultados zero no geral? Como isso varia entre os grupos?

Vamos definir nossa hipótese nula: - Taxas de resultados zero dos grupos a e b são iguais.

Utilizando Testes de Hipóteses, vamos permutar a variável {r} group

set.seed(123)
fun.taxa.zero <- function(dado) {
  
    res_zero <- dado %>%
    group_by(results) %>%
    summarise(n = n()) %>% 
    mutate(res_zero = n / sum(n) * 100)  %>%
    ungroup()
  
  res_zero <- res_zero %>% 
    filter(results == 0)
  
  return(res_zero$res_zero)
}


dados.subset <- subset(dados, select = c("session_id", "group", "num_clicks", "date", "results")) 
permutationTest2(dados.subset, fun.taxa.zero(dados.subset), treatment = group)
## Call:
## permutationTest2(data = dados.subset, statistic = fun.taxa.zero(dados.subset), 
##     treatment = group)
## Replications: 9999
## Two samples, sample sizes are 67636 32117
## 
## Summary Statistics for the difference between samples 1 and 2:
##                                   Observed         Mean Alternative PValue
## fun.taxa.zero(dados.subset): a-b -0.337343 -0.001692117   two.sided 0.0836

COnclusão: O p-value não tem um valor pequeno (0.0836), assim não podemos rejeitar a hipótese nula. Ou seja, podemos afirmar que as taxas de resultados zero dos grupos a e b são iguais.

Resultado com certo nível de significância.

Conclusões gerais

Com testes de hipóteses temos uma vantagem por apresentar um único valor para ser análisado (p-value). Porém, não há como medir o nível de confiança do resultado, o que faz que os resultados encontrados no laboratório anterior (com IC) sejam mais completos. O entendimento com os Intervalos de Confiança também é mais claro, podemos inferir que um valor está ou não em uma faixa de valores, por exemplo.