Я использую формулу из байесовского ab-тестирования , чтобы вычислить результаты теста AB, используя байесовскую методологию.
где
- в один плюс количество успехов для A
- в один плюс количество сбоев для A
- в один плюс количество успехов для B
- в один плюс количество сбоев для B
- - бета-функция
Пример данных:
control: 1000 trials with 78 successes
test: 1000 trials with 100 successes
Стандартный не байесовский тест дает мне существенные результаты (р <10%):
prop.test(n=c(1000,1000), x=c(100,78), correct=F)
# 2-sample test for equality of proportions without continuity correction
#
# data: c(100, 78) out of c(1000, 1000)
# X-squared = 2.9847, df = 1, p-value = 0.08405
# alternative hypothesis: two.sided
# 95 percent confidence interval:
# -0.0029398 0.0469398
# sample estimates:
# prop 1 prop 2
# 0.100 0.078
в то время как моя реализация формулы Байеса (используя объяснения в ссылке) дала мне очень странные результаты:
# success control+1
a_control <- 78+1
# failures control+1
b_control <- 1000-78+1
# success control+1
a_test <- 100+1
# failures control+1
b_test <- 1000-100+1
is_control_better <- 0
for (i in 0:(a_test-1) ) {
is_control_better <- is_control_better+beta(a_control+i,b_control+b_test) /
(b_test+i)*beta(1+i,b_test)*beta(a_control,b_control)
}
round(is_control_better, 4)
# [1] 0
это означает, что равно , что не имеет никакого смысла, учитывая эти данные.
Может кто-нибудь уточнить?
p-value
тегом? Я думал, что байесовцы отказались иметь какое-либо отношение к р-значениям.p-value
тег, поскольку он не связан.Ответы:
На сайте вы цитируете есть уведомление
поэтому ваша реализация неверна. Ниже приведен исправленный код:
Он выводит итоговое значение = 0,9576921, то есть «вероятность того, что B превзойдет A в долгосрочной перспективе» (цитируя вашу ссылку), что звучит правильно, так как B в вашем примере имеет большую пропорцию. Таким образом, это не р -значение, а вероятность того, что B больше , то A (вы не ожидаете , что это будет <0,05).
Вы можете запустить простое моделирование, чтобы проверить результаты:
В обоих случаях ответ - да.
Что касается кода, обратите внимание, что цикл for не нужен, и, как правило, он замедляет работу в R, так что вы можете альтернативно использовать его
vapply
для более чистого и немного более быстрого кода:источник
vapply
не более вектозированы, чемfor
петли, напротив, они в основном одинаковы. Хороший ответ, хотя.for
Циклы C / C ++ / Fortan == векторизация; Rfor
петля! = Векторизация. Это в основном определение векторизации.vapply
в будущем. Я надеюсь, что я получу хороший ответ раз и навсегда.vapply
самом деле. Смотрите мой ответ здесь