EP2 – ทฤษฎี Bayes กับการตรวจโรคมะเร็ง

หลังจาก EP1 Inverse Probability เราได้อธิบายความน่าจะเป็นเบื้องต้นและ Bayes Theorem ไปแล้ว บทความนี้มาลองดูตัวอย่างการใช้งาน Bayes ในสถานการณ์จริงกันบ้าง

Cancer Detection

Unsplash – https://unsplash.com/photos/DK8jXx1B-1c

สมมติเราไปตรวจโรคมะเร็งที่ ร.พ. แห่งหนึ่ง คุณหมอตัดชิ้นเนื้อไปทดสอบและกลับมาบอกเราว่าพบผล positive (+) ในทางการแพทย์ การตรวจเจอผลแบบ positive (+) แปลว่ามีโอกาสที่ผู้ป่วยจะเป็นโรคนั้นๆแต่ยังฟันธงไม่ได้ 100%

ปกติ medical test ต่างๆใน ร.พ. จะมีค่าสถิติที่เราควรรู้ดังนี้

  • p(+|cancer) หรือ true positive rate ถ้าผู้ป่วยโรคมะเร็งมาตรวจ จะมีโอกาสได้ผล positive กี่ %? ชื่ออื่นๆของ TPR คือ sensitivity หรือ recall
  • p(+|~cancer) หรือ false positive rate ถ้าคนปกติมาตรวจ จะมีโอกาสได้ผล positive กี่ %?

สมมติว่าการตรวจโรคมะเร็งได้รับการพัฒนาจนมีค่า true positive rate 99% และมีค่า false positive rate ที่ 5%

สิ่งที่เราอยากรู้คือความน่าจะเป็นที่เราเป็นโรคมะเร็งถ้าเกิดตรวจเจอผล + หรือเขียนเป็น conditional probability ได้แบบนี้ p(cancer|+) ซึ่งก็คือ inverse probability ของ p(+|cancer)

Recall Bayes Theorem

มาทบทวน Bayes Theorem อีกครั้งหนึ่ง

P(B|A) = P(A|B) * P(B) / P(A)

จาก case study ด้านบน เราสามารถเขียนสมการ Bayes ได้แบบนี้

P(cancer|+) = P(+|cancer) * P(cancer) / P(+)

แทนค่า P(+) ด้วย P(+|cancer) * P(cancer) + P(+|~cancer) * P(~cancer) จะได้

P(cancer|+) = P(+|cancer) * P(cancer) / ( P(+|cancer) * P(cancer) + P(+|~cancer) * P(~cancer) )

Prior Probability

ก่อนที่เราจะไป ร.พ. เราได้เปิด google เพื่อหาข้อมูลเกี่ยวกับโรคมะเร็ง พบว่าคนไทยทุกๆ 10,000 คน มีโอกาสเป็นโรคนี้ 100 คน (1%) Bayesian เรียกความน่าจะเป็นนี้ว่า prior probability

ตอนนี้เรารู้ probability ทางด้านขวามือของสมการ Bayes ทั้งหมดแล้ว

  • p(cancer) = 0.01
  • p(~cancer) = 1 – 0.01 = 0.99
  • p(+|cancer) = 0.99
  • p(+|~cancer) = 0.05

แทนค่าที่เรารู้เข้าไปในสมการ Bayes

P(cancer|+) = (0.99 * 0.01) / (0.99 * 0.01 + 0.05 * 0.99)

แก้สมการออกมาจะได้ p(cancer|+) = 0.1667 หรือเท่ากับ 16.67% โดย Bayesian เรียกความน่าจะเป็นนี้ว่า posterior probability

สรุปการตรวจเจอผล + ครั้งแรก รวมกับความรู้ทั้งหมดที่เรามีตอนนี้ (prior) ความน่าจะเป็นที่เราจะเป็นโรคมะเร็งมีแค่ 16.67% (posterior)

Confusion Matrix

จากประสบการณ์ส่วนตัว แอดคิดว่าการนำ prior knowledge มาเขียนเป็นตาราง confusion matrix จะช่วยให้เราเห็นภาพการใช้งาน Bayes ได้ดียิ่งขึ้น

ถ้ามีคนไทย n=10,000 คนไปตรวจโรคมะเร็ง และเรารู้เกี่ยวกับ incidence ของโรคนี้ ค่า true positive rate และ false positive rate ของ medical test เราสามารถสร้างตาราง confusion matrix ได้ง่ายๆ โดยที่แกนตั้งคือผลตรวจ result = {positive, negative} และแกนนอนคือความจริง truth = {cancer, no cancer}

PositiveNegativeTotal
Cancer991100
No Cancer49594059900
Total594940610000

p(cancer|+) คิดจาก 99 / 594 = 16.67% เท่ากับที่เราคิดได้จาก Bayes formula เป๊ะ!

อธิบาย – คนไทยทุกๆ 10,000 คนพบผู้ป่วยโรคมะเร็ง 1% คิดเป็น 100 คน ถ้าผู้ป่วยหนึ่งร้อยคนนี้ไปตรวจจะได้ผล positive 99 คน และ negative 1 คน ส่วนคนปกติ 9,900 คน มีโอกาสตรวจเจอผล positive 5% คิดเป็น 495 คน และเจอผล negative 9,405 คน

R Code

เราใช้ฟังชั่น matrix() เพื่อสร้าง confusion matrix ตามตัวอย่างด้านบน ค่า overall accuracy ของ medical test เท่ากับ 95.04% และ p(cancer|+) เท่ากับ 16.67%

overall accuracy ของการตรวจโรคมะเร็งคิดจาก true positive + true negative i.e. ผลรวมเส้นทแยงมุมของ confusion matrix หารด้วยจำนวน sample size ทั้งหมด

# create confusion matrix
result <- matrix(c(99,1,495,9405), ncol=2, byrow=T)
colnames(result) <- c("Positive", "Negative")
rownames(result) <- c("Cancer", "No Cancer")
# see the table
result
sum(result) # n=10000
# overall accuracy of the medical test
(99 + 9405) / 10000 # 0.9504
# p(cancer|+) = true positive / all positives
99 / (99 + 495) # 0.1667
view raw .R hosted with ❤ by GitHub

หรือจะใช้ Bayes Theorem ในการคำนวณ p(cancer|+) ตรงๆเลยก็ได้

# what we know
p_pos_cancer <- 0.99
p_cancer <- 0.01
p_not_cancer <- 1 0.01
p_pos_not_cancer <- 0.05
# bayes theorem
p_cancer_pos <- (p_pos_cancer*p_cancer) / (p_pos_cancer*p_cancer + p_pos_not_cancer*p_not_cancer)
print(p_cancer_pos) # 0.1667
view raw .R hosted with ❤ by GitHub

If you get another +

Unsplash – https://unsplash.com/photos/iPum7Ket2jo

ความยิ่งใหญ่ของ Bayes คือการที่เราสามารถอัพเดทความน่าจะเป็นหรือความเชื่อของเราเกี่ยวกับเหตุการณ์หนึ่งๆด้วยข้อมูลใหม่

Update our belief in light of new data

Thomas Bayes

สมมติว่าเราขอคุณหมอตรวจครั้งที่สองและได้ผลออกมาเป็น + อีกครั้ง ความน่าจะเป็นที่เราจะเป็นโรคมะเร็งจะเพิ่มสูงขึ้นเป็น 79.84% เพราะว่าหลังจากการ test ครั้งที่หนึ่ง posterior ที่เราได้มาคือ 16.67% และค่านี้ถูกนำไปใช้เป็น prior ของการ test ครั้งที่สอง

 P(cancer|+) = (0.99 * 0.1667) / (0.99 * 0.1667 + 0.05 * 0.8333) = .7984

ถ้าเราได้ + ในการ test ครั้งที่สาม p(cancer|+) จะเพิ่มสูงขึ้นเป็น 98.74%

 P(cancer|+) = (0.99 * 0.7984) / (0.99 * 0.7984 + 0.05 * 0.2016) = .9874

สรุปความน่าจะเป็นที่จะเป็นโรคมะเร็งถ้าผลตรวจออกมาเป็น + จากการ test ทั้งสามครั้งคือ

  • p(cancer|+) = 16.67%
  • p(cancer|+,+) = 79.84%
  • p(cancer|+,+,+) = 98.74%
  • posterior ของการ test ครั้งที่ #1 จะกลายเป็น prior ของการ test ครั้งที่ #2
  • เราใช้ Bayes ในการ update ความเชื่อของเราต่อเหตุการณ์นั้นๆเวลาที่มีข้อมูลใหม่

3 responses to “EP2 – ทฤษฎี Bayes กับการตรวจโรคมะเร็ง”

  1. […] EP2 เราอธิบายการสร้าง confusion matrix เพื่อแก้โจทย์ Bayes มาลองทำอีกครั้งหนึ่งกับโจทย์ p-value และการทดสอบสมมติฐาน n=1000 | alpha 0.05 | power 0.80 […]

  2. ขอบคุณมากครับ

    1. ขอบคุณมากๆเช่นกันครับ

Leave a Reply