J'utilise la formule de test ab bayésien afin de calculer les résultats du test AB en utilisant la méthodologie bayésienne.
où
- en un plus le nombre de succès pour A
- en un plus le nombre d'échecs pour A
- en un plus le nombre de succès pour B
- en un plus le nombre d'échecs pour B
- est la fonction bêta
Exemples de données:
control: 1000 trials with 78 successes
test: 1000 trials with 100 successes
Un test d'hélice non bayésien standard me donne des résultats significatifs (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
alors que ma mise en œuvre de la formule de Bayes (en utilisant les explications du lien) m'a donné des résultats très étranges:
# 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
cela signifie que est , ce qui n'a aucun sens compte tenu de ces données.
Quelqu'un pourrait-il clarifier?
p-value
tag? Je pensais que les Bayésiens refusaient d'avoir quoi que ce soit à voir avec les valeurs p.p-value
balise car elle n'est pas liée.Réponses:
Sur le site que vous citez il y a un avis
donc votre implémentation est fausse. Ci-dessous, je fournis le code corrigé:
Il génère un total = 0,9576921, c'est-à-dire "les chances que B batte A à long terme" (en citant votre lien) ce qui semble valide puisque B dans votre exemple a une plus grande proportion. Donc, ce n'est pas une valeur p mais plutôt une probabilité que B soit supérieur à A (vous ne vous attendez pas à ce qu'il soit <0,05).
Vous pouvez exécuter des simulations simples pour vérifier les résultats:
Dans les deux cas, la réponse est oui.
En ce qui concerne le code, notez que pour la boucle n'est pas nécessaire et généralement ils ralentissent les choses dans R, vous pouvez donc utiliser alternativement
vapply
pour un code plus propre et un peu plus rapide:la source
vapply
n'est pas plus vectorisée que lafor
boucle, au contraire, elles sont fondamentalement les mêmes. Belle réponse cependant.for
Boucles C / C ++ / Fortan == vectorisées;for
Boucle R ! = Vectorisée. Il s'agit essentiellement de la définition de vectorisé.vapply
à l'avenir. J'espère que j'obtiendrai une bonne réponse une fois pour toutes.vapply
qui est vraiment. Voir ma réponse ici