我正在使用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"
这对我来说似乎相当现实,直到我尝试使用其他几个在线工具验证我的结果,包括 VWO 、Unbounce 和 AB Tasty ,所有这些都表明我离我应该在运行测试所需的天数方面有 ~0.5 倍的距离。 我很欣赏上述计算器之间的一些差异是由于每个公式如何处理四舍五入,但我更关心我在计算中出错的原因和位置,例如将测试持续时间低估了一半。
我可以简单地将结果数字乘以 2 然后上床睡觉,但我渴望了解我的错误,甚至学习一种在统计和语法上更优雅的编码方式。
提前谢谢。
就个人而言,我建议尝试模拟数据,而不是依赖预先打包的功率计算。您似乎很好地掌握了在 R 中编写函数,因此使用迭代(例如,使用for
循环,或者,我个人建议更多,使用purrr
进行矢量化迭代(来模拟数据不会有太大的提升。
模拟数据的优点是,它迫使您提前考虑模型,这在以后对真实数据建模时可能非常宝贵。
这是一个很棒的教程,如果有点过时:http://disjointedthinking.jeffhughes.ca/2017/09/power-simulations-r/