Statistics Mondee ตอนที่สาม เราจะอธิบายการทำ significance test และรีวิวค่าสถิติต่างๆที่สำคัญ เช่น p-value, alpha, beta, power และการทำ inverse p-value ด้วย Bayes Theorem พร้อมโค้ดตัวอย่างใน R
What is significance?
ปกตินักสถิติเวลาทำ inferential statistics เบื้องต้น จะมีสองสมมติฐานที่แข่งกันอยู่เรียกว่า null hypothesis (Ho) และ alternative hypothesis (Ha)
สมมติเราอยากจะรู้ว่าการอ่านหนังสือทำให้คะแนนสอบเปลี่ยนแปลงหรือเปล่า? เราสามารถเขียนสมมติฐานเป็นภาษาพูดได้แบบนี้
- Ho: อ่านหนังสือไม่ทำให้คะแนนสอบเปลี่ยนแปลง (change = 0)
- Ha: อ่านหนังสือทำให้คะแนนสอบดีขึ้น (change > 0)
นักสถิติสาย frequentist ใช้ p-value ในการสรุปผลนัยสำคัญทางสถิติ (significance) โดยมีเกณฑ์การตัดสินใจดังนี้
- p-value <= alpha จะปฏิเสธ Ho และสรุปผล significance
- p-value > alpha จะไม่ปฏิเสธ Ho และสรุปผล not significance
A limitation of p-value
การเปรียบเทียบ p-value กับค่า alpha ทำให้ผลลัพธ์ของงานวิจัยเราออกมาได้แค่สองค่าคือ {not sig., sig.} เหมือนเรากำหนดความน่าจะเป็นของผลลัพธ์เป็นแค่ {0, 1} ทั้งๆที่จริงๆแล้วความน่าจะเป็นควรจะเป็นตัวเลข continuous ที่อยู่ในช่วง [0, 1] เช่น 0.687 หรือ 0.988 เป็นต้น
จะดีกว่ามั้ยถ้าว่าวันนี้เราสามารถเปลี่ยนผล significance ของเรากลับเป็นความน่าจะเป็นที่อธิบายเกี่ยวกับผล sig. นั้นได้? เช่น มั่นใจได้เลย 80% กับผล sig. ที่เราเห็นตรงหน้า
แน่นอนว่าดี! และทำได้จริง ด้วยการใช้ Bayes Theorem
Recall Bayes
ให้เรากำหนด event ดังนี้ – H
คือ hypothesis is truly significant และ D
คือ observed significance result และเขียนสิ่งที่เราอยากรู้ P(H|D) อ่านว่า “ความน่าจะเป็นที่ hypothesis is truly significant เมื่อเราเห็นผล significance result”
P(H|D) = P(D|H) * P(H) / P(D)
แต่ละ term ที่เราเห็นอยู่ในสมการ Bayes มีชื่อเรียกทางการแบบนี้
Posterior = Likelihood * Prior / Marginal
แทนค่า P(D) ได้ด้วย P(D|H) * P(H) + P(D|~H) * P(~H) จะได้
P(H|D) = P(D|H) * P(H) / (P(D|H) * P(H) + P(D|~H) * P(~H))
Alpha and Beta
เก็บสมการ Bayes ไว้ในใจแป๊ปนึง มาลองอ่าน concept ของค่า alpha และ beta กันก่อน
เวลาเราทำ statistical test อย่างการทดสอบสมมติฐาน เราต้องกำหนดค่าสถิติ alpha และ beta ก่อนเริ่มเก็บข้อมูล โดยที่นิยามของทั้งสองค่าเป็นดังนี้
alpha คือความน่าจะเป็นที่เราจะ incorrectly reject Ho ส่วน beta คือความน่าจะเป็นที่เราจะ incorrectly fail to reject Ho อธิบายภาษาบ้านๆทั้ง {alpha, beta} ควรจะมีค่ายิ่งต่ำ ยิ่งดีต่องานวิจัยของเรา อีกชื่อหนึ่งของ {alpha, beta} คือ {false positive rate, false negative rate} ตามลำดับ
อีกหนึ่งสิ่งที่เราต้องรู้คือความสัมพันธ์ของ beta และ power (ชื่อเต็มคือ statistical power) โดยที่ 1 – beta = power คือความน่าจะเป็นที่เราจะ correctly reject Ho ตัวอย่างเช่น beta = 0.20 power จะมีค่าเท่ากับ 1 – 0.20 = 0.80
Tip – ค่า power จะขึ้นอยู่กับจำนวน sample size (n) ของงานวิจัยเราโดยตรงเลย โดยทั่วไปถ้าเก็บ n เยอะขึ้น power จะสูงขึ้นเช่นกัน งานวิจัยที่มี power สูง ผลสรุปก็จะดูน่าเชื่อถือ
Inverse p-value
เขียนสิ่งที่เรารู้เกี่ยวกับ statistical test ก่อนแบบนี้
- P(H) = 0.10 คือความน่าจะเป็นที่ hypothesis is truely significant หรือตามทฤษฏี Bayes คือ prior จากประสบการณ์ของเรา สมมติว่าเราเคยทำ significance tests มาแล้วทั้งหมด 100 ครั้งและมี 10 ครั้งที่เราสรุปผล sig ได้อย่างถูกต้อง ดังนั้น P(H) = 10/100 = 0.10
- P(~H) = 1 – 0.10 = 0.90
- P(D|H) = power = 0.80
- P(D|~H) = alpha = 0.05
P(H|D) = power * P(H) / ( power * P(H) + alpha * P(~H) )
P(H|D) ในสมการด้านบนคำนวณจากจำนวน true significance หารด้วยจำนวน significance ทั้งหมดที่เป็นไปได้ (= จำนวน sig. จาก power + จำนวน sig. จาก false positive)
P(H|D) = 0.80 * 0.10 / (0.80 * 0.10 + 0.05 * 0.90)
แทนค่าที่เรารู้ลงไปทางฝั่งขวาของสมการ Bayes คำนวณเสร็จจะได้ P(H|D) = 0.64 อ่านว่าความน่าจะเป็นที่เราสรุปผล sig. ได้อย่างถูกต้องอยู่ที่ 64%
Confusion Matrix
EP2 เราอธิบายการสร้าง confusion matrix เพื่อแก้โจทย์ Bayes มาลองทำอีกครั้งหนึ่งกับโจทย์ p-value และการทดสอบสมมติฐาน n=1000 | alpha 0.05 | power 0.80
Sig. | Not Sig. | Total | |
H | 80 | 20 | 100 |
~H | 45 | 855 | 900 |
Total | 125 | 875 | 1000 |
โดย P(H) ที่เรากำหนดเท่ากับ 0.10 ส่วน P(~H) เท่ากับ 1 – 0.10 = 0.90
P(H|D) สามารถคำนวณจาก 80 / (80 + 45) = 80 / 125 = 0.64 เท่ากับการใช้ Bayes formula
R Code
Code ใน R ก็เขียนง่ายๆเหมือนเดิม เริ่มจากการสร้าง prior vector 0:10 * 0.1
กำหนดค่า alpha, beta และ power ของ statistical test แล้วคำนวณ posterior ด้วย Bayes Formula
# create a prior probability vector | |
prior <- 0:10 * 0.1 | |
# writing what we know | |
beta <- 0.20 | |
alpha <- 0.05 | |
power <- 1 - beta | |
# bayes theorem | |
posterior <- power * prior / (power * prior + alpha * (1-prior)) | |
round(posterior, 2) | |
# plot posterior | |
plot(prior, posterior, pch = 16, type = "b") |
ใช้ฟังชั่น plot()
เพื่อสร้างกราฟ prior (แกน x) และ posterior (แกน y) ทบทวนอีกครั้ง prior คือความเชื่อก่อนที่เราจะเห็นข้อมูล ส่วน posterior คือความเชื่อหลังจากที่เราเห็นข้อมูลแล้ว ภาษาอังกฤษเรียกว่า updated belief จากกราฟจะเห็นว่าที่ prior = 0.10 posterior จะเท่ากับ 0.64

Tip – เราสามารถกำหนดค่า prior จากการทำ literature review หรือถ้าเป็นวิจัยที่ใหม่มากๆไม่มีข้อมูลเก่าๆเลย เราสามารถกำหนด p(H) = 0.5 และ p(~H) = 0.5 ก็ได้ ที่ prior = 0.50 posterior = 0.9412 หรือความน่าจะเป็น 94.12% ที่ผลซิกนั้นถูกต้อง
สำหรับเพื่อนๆที่อ่าน Statistics Mondee มาครบทั้งสามตอนน่าจะเห็นความสำคัญของ Bayes Theorem ที่เราใช้อัพเดทความน่าจะเป็นเวลาที่เรามีข้อมูลใหม่ ในตัวอย่างวันนี้คือการอัพเดท posterior probability ว่าผล sig. ที่เราเจอนั้นเชื่อได้แค่ไหน
Frequentist vs. Bayesian
Frequentist ใช้ค่า p-value เปรียบเทียบกับ alpha เพื่อทดสอบสมมติฐาน H ว่า sig. หรือ not sig. ส่วน Bayesian เปลี่ยนผล sig. ให้กลายเป็นความน่าจะเป็น P(H|significance) แบบไหนดีกว่ากัน? ก็เถียงกันมาเป็น 100 ปีแล้ว ยังหาคำตอบไม่ได้เลย แต่ส่วนตัวแอดค่อนข้างมาทางสาย Bayes มากกว่า 555+
เอาไว้แอดมาเขียนเรื่อง Frequentist vs. Bayesian ให้อ่านในบทความต่อไป