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:
library(tidyverse)
library(here)
library(lubridate)
library(knitr)
library(ggplot2)
library(boot)
library(resample)
theme_set(theme_bw())
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))
Vamos inicialmente verificar comportamentos indesejados:
{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>
{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))
{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
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.
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.
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.