Saya menggunakan rumus dari pengujian ab Bayesian untuk menghitung hasil tes AB menggunakan metodologi Bayesian.
dimana
- dalam satu ditambah jumlah keberhasilan untuk A
- dalam satu ditambah jumlah kegagalan untuk A
- dalam satu ditambah jumlah keberhasilan untuk B
- dalam satu ditambah jumlah kegagalan untuk B
- adalah fungsi Beta
Contoh data:
control: 1000 trials with 78 successes
test: 1000 trials with 100 successes
Tes prop non Bayesian standar memberi saya hasil yang signifikan (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
sementara implementasi formula Bayes saya (menggunakan penjelasan di tautan) memberi saya hasil yang sangat aneh:
# 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
itu berarti bahwa adalah , yang tidak masuk akal mengingat data ini.
Bisakah seseorang mengklarifikasi?
p-value
tag? Saya pikir orang Bayesia menolak untuk melakukan apa pun dengan nilai-p.p-value
tag karena tidak terkait.Jawaban:
Di situs yang Anda kutip ada pemberitahuan
jadi implementasi Anda salah. Di bawah ini saya berikan kode yang diperbaiki:
Ini menghasilkan total = 0,9576921, yaitu "peluang bahwa B akan mengalahkan A dalam jangka panjang" (mengutip tautan Anda) yang terdengar valid karena B dalam contoh Anda memiliki proporsi yang lebih besar. Jadi, ini bukan nilai- p melainkan probabilitas bahwa B lebih besar dari A (Anda tidak berharap itu menjadi <0,05).
Anda dapat menjalankan simulasi sederhana untuk memeriksa hasilnya:
Dalam kedua kasus jawabannya adalah ya.
Seperti tentang kode, perhatikan bahwa untuk loop tidak perlu dan umumnya mereka membuat hal-hal lebih lambat di R, sehingga Anda dapat menggunakannya sebagai alternatif
vapply
untuk kode pembersih dan sedikit lebih cepat:sumber
vapply
tidak lebih vectorozied daripadafor
loop, sebaliknya, mereka pada dasarnya sama. Jawaban yang bagus.for
loop == vektor; Rfor
loop! = Vektor. Ini pada dasarnya definisi vektor.vapply
depan. Saya harap saya akan mendapatkan jawaban yang bagus sekali dan untuk selamanya.vapply
sebenarnya. Lihat jawaban saya di sini