Estoy usando la fórmula de la prueba ab bayesiana para calcular los resultados de la prueba AB utilizando la metodología bayesiana.
dónde
- en uno más el número de éxitos para A
- en uno más el número de fallas para A
- en uno más el número de éxitos para B
- en uno más el número de fallas para B
- es la función Beta
Datos de ejemplo:
control: 1000 trials with 78 successes
test: 1000 trials with 100 successes
Una prueba estándar de apoyo no bayesiano me da resultados significativos (p <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
mientras que mi implementación de la fórmula de Bayes (usando las explicaciones en el enlace) me dio resultados muy extraños:
# 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
eso significa que es , lo que no tiene ningún sentido dados estos datos.
¿Alguien podría aclarar?
p-value
etiqueta? Pensé que los bayesianos se negaron a tener algo que ver con los valores p.p-value
etiqueta, ya que no está relacionada.Respuestas:
En el sitio que cita hay un aviso
entonces su implementación es incorrecta. A continuación proporciono el código corregido:
Produce un total = 0.9576921, es decir "probabilidades de que B venza a A a largo plazo" (citando su enlace), lo que parece válido ya que B en su ejemplo tiene una mayor proporción. Por lo tanto, es no un p -valor, sino más bien una probabilidad de que B es mayor que A (usted no esperar que sea <0,05).
Puede ejecutar las simulaciones simples para verificar los resultados:
En ambos casos la respuesta es sí.
En cuanto al código, tenga en cuenta que for loop es innecesario y generalmente hacen que las cosas sean más lentas en R, por lo que puede usar alternativamente
vapply
un código más limpio y un poco más rápido:fuente
vapply
probaste la velocidad, porque no está más vectorizada que elfor
bucle, por el contrario, son básicamente lo mismo. Buena respuesta sin embargo.for
loops == vectorizado; Rfor
loop! = Vectorizado. Esta es básicamente la definición de vectorizado.vapply
en el futuro. Espero obtener una buena respuesta de una vez por todas.vapply
realmente es. Vea mi respuesta aquí