Использование вычислительных возможностей R для проверки стат. гипотез

qj7tdnvsk6u8ghwdwu4_i37hpac.png
---
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)

======================================================

© Habrahabr.ru