Estou usando a fórmula do teste ab Bayesiano para calcular os resultados do teste AB usando a metodologia Bayesiana.
Onde
- em um mais o número de sucessos de A
- em um mais o número de falhas para A
- em um mais o número de sucessos de B
- em um mais o número de falhas para B
- é a função Beta
Dados de exemplo:
control: 1000 trials with 78 successes
test: 1000 trials with 100 successes
Um teste de suporte não Bayesiano padrão me fornece 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
enquanto minha implementação da fórmula de Bayes (usando as explicações no link) me deu resultados muito estranhos:
# 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
isso significa que é , o que não faz sentido, considerando esses dados.
Alguém poderia esclarecer?
p-value
etiqueta? Eu pensei que os bayesianos se recusavam a ter algo a ver com valores-p.p-value
tag, pois ela não está relacionada.Respostas:
No site que você cita, há um aviso
então sua implementação está errada. Abaixo, forneço o código corrigido:
Emite total = 0,9576921, ou seja, "probabilidades de que B vencerá A no longo prazo" (citando seu link), o que parece válido, já que B no seu exemplo tem uma proporção maior. Assim, é não uma p -valor mas sim uma probabilidade de que B é maior, em seguida, A (você não esperava que fosse <0,05).
Você pode executar as simulações simples para verificar os resultados:
Nos dois casos, a resposta é sim.
Quanto ao código, observe que o loop for é desnecessário e geralmente eles tornam as coisas mais lentas no R; portanto, você pode usar alternativamente
vapply
para um código mais limpo e um pouco mais rápido:fonte
vapply
não é mais vetorizado do que ofor
loop, pelo contrário, eles são basicamente os mesmos. Boa resposta embora.for
Loops C / C ++ / Fortan == vetorizados;for
Laço R ! = Vetorizado. Esta é basicamente a definição de vetorizado.vapply
no futuro. Espero obter uma resposta agradável de uma vez por todas.vapply
realmente é. Veja minha resposta aqui