สูตรสำหรับการทดสอบ A / B แบบเบย์ไม่มีเหตุผลใด ๆ


10

ฉันใช้สูตรจากการทดสอบ AB แบบเบย์เพื่อคำนวณผลลัพธ์ของการทดสอบ AB โดยใช้วิธีการแบบเบย์

Pr(pB>pA)=i=0αB1B(αA+i,βB+βA)(βB+i)B(1+i,βB)B(αA,βA)

ที่ไหน

  • αAในหนึ่งบวกกับจำนวนความสำเร็จสำหรับ A
  • βAในหนึ่งบวกกับจำนวนความล้มเหลวสำหรับ A
  • αBในหนึ่งบวกกับจำนวนความสำเร็จสำหรับ B
  • βBในหนึ่งบวกกับจำนวนความล้มเหลวสำหรับ B
  • Bคือฟังก์ชั่นเบต้า

ข้อมูลตัวอย่าง:

control: 1000 trials with 78 successes
test: 1000 trials with 100 successes

การทดสอบแบบ prop ที่ไม่ใช่แบบเบย์มาตรฐานให้ผลลัพธ์ที่สำคัญกับฉัน (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 

ในขณะที่การใช้งานสูตรเบย์ของฉัน (โดยใช้คำอธิบายในลิงก์) ทำให้ฉันได้ผลลัพธ์ที่แปลกมาก:

# 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(TEST>CONTROL)เป็น0ซึ่งไม่สมเหตุสมผลกับข้อมูลนี้

มีคนอธิบายไหม


Questiob การวิเคราะห์แบบเบย์พร้อมp-valueแท็ก? ฉันคิดว่า Bayesians ปฏิเสธที่จะทำอะไรกับค่า p
Dilip Sarwate

คุณถูก! แค่คิดว่ามันจะดึงดูดความสนใจมากขึ้น!
Yehoshaphat Schellekens

@YehoshaphatSchellekens หากนั่นเป็นเหตุผลที่แท้จริงที่ฉันลบp-valueแท็กเนื่องจากไม่เกี่ยวข้อง
ทิม

แน่นอนไม่มีปัญหา.
Yehoshaphat Schellekens

คำตอบ:


17

ในเว็บไซต์ที่คุณอ้างมีการแจ้งให้ทราบล่วงหน้า

ฟังก์ชั่นเบต้าสร้างตัวเลขจำนวนมากดังนั้นหากคุณได้รับค่าอนันต์ในโปรแกรมของคุณอย่าลืมใช้ลอการิทึมเช่นเดียวกับในรหัสด้านบน ฟังก์ชันบันทึกการทำงานเบต้าของไลบรารีมาตรฐานของคุณจะมีประโยชน์ที่นี่

ดังนั้นการใช้งานของคุณผิด ด้านล่างนี้ฉันให้รหัสที่ถูกต้อง:

a_A <- 78+1
b_A <- 1000-78+1
a_B <- 100+1
b_B <- 1000-100+1

total <- 0

for (i in 0:(a_B-1) ) {
  total <- total + exp(lbeta(a_A+i, b_B+b_A)
                       - log(b_B+i)
                       - lbeta(1+i, b_B)
                       - lbeta(a_A, b_A))

}

ผลลัพธ์ทั้งหมด = 0.9576921 นั่นคือ "โอกาสที่ B จะชนะ A ในระยะยาว" (อ้างถึงลิงก์ของคุณ) สิ่งที่ฟังดูใช้ได้ตั้งแต่ B ในตัวอย่างของคุณมีสัดส่วนที่มากกว่า ดังนั้นจึงเป็นไม่พี -value แต่ความน่าจะเป็นที่ B เป็นมากขึ้นแล้ว (คุณไม่ได้คาดหวังว่ามันจะเป็น <0.05)

คุณสามารถเรียกใช้การจำลองง่าย ๆ เพื่อตรวจสอบผลลัพธ์:

set.seed(123)

# does Binomial distributions with proportions
# from your data give similar estimates?

mean(rbinom(n, 1000, a_B/1000)>rbinom(n, 1000, a_A/1000))

# and does values simulated in a similar fashion to
# the model yield similar results?

fun2 <- function(n=1000) {
  pA <- rbeta(1, a_A, b_A)
  pB <- rbeta(1, a_B, b_B)
  mean(rbinom(n, 1000, pB) > rbinom(n, 1000, pA))
}

summary(replicate(1000, fun2(1000)))

ในทั้งสองกรณีคำตอบคือใช่


สำหรับโค้ดให้สังเกตว่าสำหรับลูปนั้นไม่จำเป็นและโดยทั่วไปแล้วมันจะทำให้ช้าลงใน R ดังนั้นคุณสามารถใช้vapplyเพื่อทำความสะอาดและโค้ดที่เร็วขึ้น:

fun <- function(i) exp(lbeta(a_A+i, b_B+b_A)
             - log(b_B+i)
             - lbeta(1+i, b_B)
             - lbeta(a_A, b_A))

sum(vapply(0:(a_B-1), fun, numeric(1)))

อืม ... ฉันสงสัยว่าถ้าคุณทดสอบความเร็วจริง ๆ แล้วเพราะvapplyไม่มีเวคเตอร์มากกว่าforวงในทางกลับกันพวกมันเหมือนกันหมด คำตอบที่ดีแม้ว่า
David Arenburg

1
C / C ++ / Fortan forลูป == vectorized; R forloop! = vectorized นี่คือนิยามของเวกเตอร์
David Arenburg

1
@YehoshaphatSchelle ช่วยให้จุดที่มีบันทึกไม่ได้เกี่ยวกับซอฟต์แวร์บางอย่าง แต่การคำนวณทางสถิติทั่วไป ในตัวอย่างบนเว็บไซต์ที่คุณอ้างรหัส julia ให้ - julia เป็นภาษาที่ดีมากสำหรับการเขียนโปรแกรมทางสถิติและยังคงใช้บันทึก
ทิม

2
ที่จริงแล้วฉันเพิ่งถามคำถามเกี่ยวกับการสนทนาที่แน่นอนนี้เรามีดังนั้นฉันอาจต้องคิดใหม่แนวทางของฉันไปvapplyในอนาคต ฉันหวังว่าฉันจะได้รับคำตอบที่ดีสักครั้ง
David Arenburg

2
ตกลงหลังจากคิดมานานและสรุปความคิดเห็นและคำตอบที่ฉันได้รับจากคำถามของฉันฉันคิดว่าฉันเกิดความเข้าใจทั่วไปเกี่ยวกับสิ่งที่vapplyเป็นจริง ดูคำตอบของฉันที่นี่
David Arenburg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.