首页 > 解决方案 > 在 R 中使用 pwr() 包的 A/B 测试持续时间和样本量计算器

问题描述

我正在使用 R 中的 googleAnalyticsR 包来提取一些网站访问统计数据并计算转化率。到目前为止没有问题。

但是,当我尝试使用一个名为 pwr 的包计算所需的人口规模和测试持续时间时,我遇到了困难,我根据我从另一个在线用户那里找到的一些建议对其进行了修改。代码如下。

average_daily_traffic <-  10.63 #cvr$all_users/30
control <- 0.30721 #cvr$cvr_perc
uplift <- 0.01

sample_size_calculator <- function(control, uplift){
  variant <- (uplift + 1) * control
  baseline <- ES.h(control, variant)
  sample_size_output <- pwr.p.test(h = baseline,
                                   n = ,
                                   sig.level = 0.05,
                                   power = 0.8)
  if(variant >= 0)
  {return(sample_size_output)}
  else
  {paste("N/A")}
}


duration_calculator <- function(sample_size_output, average_daily_traffic){
  days_required <- c((sample_size_output)*2)/(average_daily_traffic)
  if(days_required >= 0)
  {paste0("It will take approximately ", round(days_required, digits = 0), " days or ", round(round(days_required, digits = 0)/365, digits = 0) ," years for this test to reach significance, based on average traffic in the last 30 days")}
  else
  {paste("N/A")}
}


sample_size_calculator <- sample_size_calculator(control, uplift)
sample_size_output <-   sample_size_calculator$n
sample_size_output

duration_calculator(sample_size_output, average_daily_traffic)

我在网上看到的建议是创建 2 个函数。一个叫做“sample_size_calculator”,另一个叫做“days_calculator”,两者都是不言自明的。至少我很清楚两者的预期功能是什么。

因此,我的输出是:

[1] "It will take approximately 33394 days or 91 years for this test to reach significance, based on average traffic in the last 30 days"

这对我来说似乎相当现实,直到我尝试使用其他几个在线工具(包括VWOUnbounceAB Tasty )来验证我的结果,所有这些都表明我距离我应该达到的数字大约 0.5 倍运行测试所需的天数。我很欣赏上述计算器之间的一些差异是由于每个公式如何处理舍入,但我更关心我的计算出现错误的原因和位置,例如将测试持续时间低估了一半。

我可以简单地将得到的数字乘以 2,然后上床睡觉,但我很想了解我的错误,甚至学习一种在统计上和语法上更优雅的编码方式。

提前致谢。

标签: rstatisticsab-testingmultivariate-testingsample-size

解决方案


就个人而言,我建议尝试模拟数据,而不是依赖预先打包的功率计算。您似乎很好地掌握了在 R 中编写函数,因此使用迭代来模拟数据对您来说并不是一个进步(例如,使用for循环,或者,我个人更推荐使用的矢量化迭代)purrr)。

模拟数据的优势在于它迫使您提前考虑您的模型,这在您以后对真实数据进行建模时可能非常宝贵。

这是一个很棒的教程,如果有点过时的话:http: //disjointedthinking.jeffhughes.ca/2017/09/power-simulations-r/


推荐阅读