Использование вычислительных возможностей R для проверки стат. гипотез
---
title: "A/B тестирование средствами bootstrap"
output:
html_notebook:
self_contained: TRUE
editor_options:
chunk_output_type: inline
---
library(tidyverse)
library(magrittr)
library(tictoc)
library(glue)
library(dabestr)
Создадим логнормальное распределение длительности операций.
my_rlnorm <- function(n, mean, sd){
# пересчитываем мат. моменты: https://en.wikipedia.org/wiki/Log-normal_distribution#Arithmetic_moments
location <- log(mean^2 / sqrt(sd^2 + mean^2))
shape <- sqrt(log(1 + (sd^2 / mean^2)))
print(paste("location:", location))
print(paste("shape:", shape))
rlnorm(n, location, shape)
}
# N пользователей категории (A = Control)
A_control <- my_rlnorm(n = 10^3, mean = 500, sd = 150) %T>%
{print(glue("mean = {mean(.)}; sd = {sd(.)}"))}
# N пользователей категории (B = Test)
B_test <- my_rlnorm(n = 10^3, mean = 525, sd = 150) %T>%
{print(glue("mean = {mean(.)}; sd = {sd(.)}"))}
Собираем данные в виде, необходимом для анализа средствами dabestr
, и проводим анализ.
df <- tibble(Control = A_control, Test = B_test) %>%
gather(key = "group", value = "value")
tic("bootstrapping")
two_group_unpaired <- df %>%
dabest(group, value,
# The idx below passes "Control" as the control group,
# and "Test" as the test group. The mean difference
# will be computed as mean(Test) - mean(Control).
idx = c("Control", "Test"),
paired = FALSE,
reps = 5000
)
toc()
Поглядим на результаты
two_group_unpaired
plot(two_group_unpaired)
======================================================