DataRockie

ทดสอบสมมติฐานทางสถิติด้วย Confidence Interval ไม่ง้อ p-value

เบื่อไหมกับการใช้ p-value ทดสอบสมมติฐาน? ถ้าเบื่อแล้ว บทความนี้มีคำตอบให้กับทุกคน ก่อนจะอ่านต่อ เรา assume ว่าทุกคนรู้แล้วว่า Central Limit Theorem คืออะไร ถ้ายังไม่ชัวร์ ลองอ่านบทความของเราได้ที่นี่ – Mind Blown!

Meet Confidence Interval

Confidence interval (CI) หรือที่เรียกกันในภาษาไทยว่า “ช่วงความเชื่อมั่น” เป็นอีกหนึ่ง concept สำคัญของนักสถิติสาย frequentist โดย CI ถูกสร้างขึ้นจากทฤษฎี central limit theorem i.e. การทำ repeated samples

หัวใจสำคัญของสถิติคือการสุ่มตัวอย่าง (ต้องเป็นไปอย่าง random) และทุกครั้งที่เราสุ่มตัวอย่างใหม่ ค่าสถิติทั้งหมดก็จะเปลี่ยนไปเรื่อยๆ ไม่ว่าจะเป็นค่า sample mean, sd, variance หรือแม้แต่ p-value อ้าว!

แปลว่าถ้าเราสุ่มตัวอย่างหนึ่งครั้งมาทำการทดลองอะไรซักอย่าง แล้วได้ p-value = 0.045 ลองสุ่มตัวอย่างมาทำงานนี้ซ้ำอีกครั้งหนึ่ง (i.e. repeated samples) ค่า p-value รอบที่สองอาจจะสูงขึ้นเป็น 0.058 who knows? ค่าสถิติทั้งหมดที่เกิดจากการสุ่มตัวอย่างคือค่า random

และ confidence interval นี่เองที่ถูกสร้างขึ้นมาเพื่อรับมือกับปัญหานี้

Build One

ก่อนจะอธิบายว่า CI คืออะไร มาลองดูตัวอย่างการใช้งานจริงกันก่อน ลุยเลยพี่!

คะแนนเฉลี่ย pop mean ของ Spider-Verse เท่ากับ 8.5 (pop n = 230,110)

แอดจะสร้าง confidence interval สำหรับคะแนน rating หนังเรื่อง Spider-Verse ที่ไปดูมาปีก่อน เข้าไปที่เว็บไซต์ IMDb จะเห็นคะแนน rating เฉลี่ยอยู่ที่ 8.5 เราจะ assume ว่าค่าเฉลี่ยนี้เกิดจากประชากรทั้งหมด 230,110 คนที่ได้ดูหนังเรื่องนี้แล้ว (ข้อมูล ณ วันที่ 17 ก.ค. 2562)

ถ้าเราสุ่มตัวอย่างแบบแรนดอม n=100 ออกมาจากประชากรนี้ แล้วทำ survey ความเห็นเกี่ยวกับหนังเรื่อง Spider-Verse ว่าชอบหนังเรื่องนี้มั้ย (scale 1-10 โดย 1 คือชอบน้อยที่สุด และ 10 คือชอบมากมากที่สุด)

ผลจาก survey ได้ออกมาแบบนี้ mean = 8.2, sd = 1.9 แค่เรารู้ n, mean, sd ของกลุ่มตัวอย่าง เราก็สามารถสร้างช่วงความเชื่อมั่นของค่า rating เพื่อทำ inference กลับไปที่ประชากรได้เลยง่ายๆ

ขั้นตอนในการสร้างช่วงความเชื่อมั่น มี 4 ขั้นตอน

  1. คำนวณค่า standard error จากสูตร se = sd/ sqrt(n)
  2. z = 1.96 สำหรับระดับความมั่นใจ 95%
  3. คำนวณ margin error จากสูตร me = se*z
  4. สร้างช่วงความเชื่อมั่น [mean – me, mean + me]

ด้านล่างเป็นโค้ดตัวอย่างใน R เพื่อนๆสามารถลองทำใน Excel ก็ได้

## survey result for Spider-Verse
n <- 100  ## sample size
m <- 8.2  ## mean 
s <- 1.9  ## standard deviation

## 1. compute standard error (SE)
se <- s / sqrt(n)

## 2. look up for z-score
z <- 1.96 ## z-score from normal distribution for 95% CI

## 3. compute margin error
me <- se * z

## 4. compute confidence interval
ci <- c(m - me, m + me)
print(ci)

## 95% Confidence Interval: 7.8276 8.5724

95% confidence interval ที่ได้จากการวิเคราะห์ของเรามี lower bound = 7.8276 และ upper bound = 8.5724 หรือจะเขียนแบบนี้เลยก็ได้ [7.8276, 8.5724]

จะเห็นว่า confidence interval ที่เราสร้างขึ้นมา สามารถเก็บค่าเฉลี่ยของประชากรทั้งหมด 230,110 คนได้ด้วย i.e. ค่า population mean (mu) 8.5 ตกอยู่ในช่วงความเชื่อมั่น [7.8267, 8.5724] ที่เราสร้างขึ้นมาพอดี!

Note – ซึ่งก็ make sense เพราะว่าเราสุ่มตัวอย่างด้วย random sampling ทำให้ค่า sample mean ของเรามีความใกล้เคียงกับ population mean ถึงแม้จะไม่เป๊ะ 100% ก็ตาม

CI Explained

ชีวิตจริงเราไม่มีทางรู้ population mean เหมือนตัวอย่างของ IMDb ได้เลย (จริงๆคะแนน 8.5 บนเว็บไซต์ IMDb ก็เป็นแค่ sample เท่านั้น เพราะเราไม่มีทางเข้าถึงคนที่เคยดู Spider-Verse ทั้งหมดในโลกนี้ได้)

นักสถิติเลยเรียก population mean ว่า mu (อ่านว่า มิว) เป็นค่า unknown parameter ที่เราไม่มีทางรู้ได้ และความหมายที่แท้จริงของ confidence interval อยู่ในภาพด้านล่าง

ถ้าเราสุ่มตัวอย่างซ้ำ 20 ครั้ง จะมี 1 ครั้งที่ CI ไม่สามารถเก็บค่า mu ไว้ได้ (เส้นสีแดง)

ทุกครั้งที่เราสุ่มตัวอย่างใหม่ (repeated samples) ค่าสถิติทั้งหมดไม่ว่าจะเป็นค่า mean, sd, variance, p-value รวมถึง confidence interval ก็จะเปลี่ยนไปเรื่อยๆ แต่ถ้าเราสุ่มซ้ำหลายๆครั้ง เช่น ทำซ้ำ 20 ครั้งและทำทุกอย่างเหมือนเดิม (keep the same process)

19 ใน 20 ครั้ง ช่วงความเชื่อมั่นที่เราสร้างขึ้นมาจะสามารถเก็บค่า mu ไว้ได้ หรือคิดเป็นความน่าจะเป็นเท่ากับ 95% (19/20) และมีเพียงหนึ่งครั้งเท่านั้นหรือ 5% ที่ CI ไม่สามารถเก็บ mu ไว้ได้ (เส้นสีแดงในรูปด้านบน)

Alright! นักสถิติเรียก 95% จากการคำนวณด้านบนว่า confidence level ส่วน 5% you guess it เรียกว่าค่า error หรือ alpha ที่เราใช้ทำ null hypothesis significance testing (NHST)

ถัดไปเราจะอธิบายวิธีการใช้ confidence interval ทดสอบสมมติฐานแบบไม่ต้องง้อ p-value เลยมึงเอ้ย!

Significance Test

รูปภาพจาก Spider-Verse (2018)

มาลองดูตัวอย่าง significance test ง่ายๆ แอดลองสร้างข้อมูลส่วนสูงของผู้ชายและผู้หญิง มีรายละเอียดดังนี้

  • ผู้ชาย n = 30, mean = 175, sd = 5
  • ผู้หญิง n = 30, mean = 168, sd = 4

สมมติฐานที่เราต้องการทดสอบคือ

  • Ho: ค่าเฉลี่ย(men_height) – ค่าเฉลี่ย(women_height) = 0
  • Ha: ค่าเฉลี่ย(men_height) – ค่าเฉลี่ย(women_height) != 0

การเปรียบเทียบค่าเฉลี่ยของสองกลุ่มที่เป็นอิสระจากกัน นักสถิติใช้ independent t-test เพื่อทดสอบ significance ใน R เราใช้ฟังชั่น t.test() และ assume ว่าการกระจายตัวของข้อมูลผู้ชาย/ ผู้หญิงเท่ากัน var.equal=TRUE

## create example datasets
set.seed(1)
men_height <- rnorm(n = 30, mean = 175, sd = 5)
women_height <- rnorm(n = 30, mean = 168, sd = 4)

## a simple t-test equal variance assumed
result <- t.test(men_height, women_height, var.equal=TRUE)

## our conclusion
cat("p-value:", result$p.value,
    "\n95% CI :", result$conf.int,
    "\nThe result is significant at alpha .05 (95% confidence level)")

Test result แสดงให้เห็นว่าค่า p-value ที่ได้มีค่าต่ำมาก (0.000) เราสามารถสรุปว่าค่าเฉลี่ยส่วนสูงของผู้ชาย vs. ผู้หญิงแตกต่างกันอย่างมีนัยสำคัญทางสถิติที่ระดับ alpha .05 (หรือที่ระดับความมั่นใจ 95%)

ช่วงความเชื่อมั่นของ mean difference เท่ากับ [4.8310, 8.9313] แปลว่า ถ้าเราสุ่มตัวอย่างซ้ำอีก 100 รอบ ค่าเฉลี่ยความแตกต่างของส่วนสูงผู้ชาย vs. ผู้หญิงมีความน่าจะเป็นต่ำมากที่จะเท่ากับศูนย์ แปลว่าส่วนสูงของทั้งสองกลุ่มน่าจะแตกต่างกันจริง i.e. มีนัยสำคัญทางสถิติ

แต่ถ้าเราเปลี่ยนค่าเฉลี่ยของ men_height เป็น 170 และรันโค้ดทั้งหมดอีกครั้ง ค่า p-value ในรอบนี้จะไม่ significance แล้ว (p = .0713 มากกว่า alpha) และ confidence interval ในกรณีนี้จะเก็บเลขศูนย์ไว้ด้วย [-0.1689, 3.931] สังเกตง่ายๆคือ lower bound จะติดลบ และ upper bound จะมีค่าเป็นบวก

## change men_height mean = 170
set.seed(1)
men_height <- rnorm(n = 30, mean = 170, sd = 5)
women_height <- rnorm(n = 30, mean = 168, sd = 4)

สังเกตอีกครั้งหนึ่ง ความสัมพันธ์ระหว่าง p-value และ confidence interval ของตัวอย่างด้านบน ถ้าผลลัพธ์ออกมา significance (p-value <= .05) CI จะไม่คร่อมเลขศูนย์หรือค่า null hypothesis ลองดูรูปด้านล่าง

วิธีการทดสอบสมมติฐานทำได้สองแบบ (frequentist statistics)

The Moment of Truth

alpha + confidence level = 1 เสมอ ถ้าเราใช้ alpha .05 (ซึ่งเป็นค่ามาตรฐานของหลายๆ software) ก็ต้องใช้ 95% confidence interval ในการทดสอบสมมติฐาน ทั้งสองวิธีต้องได้ผลลัพธ์เหมือนกัน

ผลสถิติจะมีนัยสำคัญถ้า p-value <= .05 และ 95% CI ไม่เก็บค่าศูนย์ (หรือค่าที่เราทดสอบใน null hypothesis) เช่น [4.8310, 8.9313]

ผลสถิติจะไม่มีนัยสำคัญถ้า p-value > .05 และ 95% CI เก็บค่าศูนย์ เช่น [-0.1689, 3.931]

Bootstrapping

นักสถิติยังมีเทคนิคอย่าง bootstrap confidence interval ที่ใช้คำนวณช่วงความเชื่อมั่นด้วย ไว้แอดมาเขียนอธิบายในบทความต่อๆไปนะครับ

Implication

แค่เปลี่ยนมาใช้ confidence interval ในการสรุปผลนัยสำคัญ เราก็ไม่ต้องใช้ p-value แล้ว แถมเรายังบอกได้อีกด้วยว่าความแตกต่างของส่วนสูงผู้ชาย vs. ผู้หญิง (ถ้าเราสุ่มซ้ำเรื่อยๆทำ repeated samples โดย apply ทฤษฎี central limit theorem) จะอยู่ในช่วงประมาณไหน [lower, upper] ถ้าอยากให้ช่วงความเชื่อมั่นแคบลง greater precision ผลลัพธ์น่าเชื่อถือมากขึ้น แค่เพิ่ม sample size ให้เยอะขึ้นก็จบแล้ว!

ทำไมมันง่ายอย่างงี้ 555+

ขอบคุณที่อ่านจนจบครับ แอดไปล่ะ ฟิ้ววว!

เพลง soundtrack แอดชอบมาก 😛

ปล. ยัง ยังไม่จบ ถ้าอยากรู้เรื่อง significance test มากกว่านี้ บทความต่อไปเราจะอธิบาย power และ effect size ให้อ่านต่อ – the next mind blown stuff!!

14 responses to “ทดสอบสมมติฐานทางสถิติด้วย Confidence Interval ไม่ง้อ p-value”

  1. Waris Kanchitnurak Avatar
    Waris Kanchitnurak

    เฉียบ

    1. ขอบคุณครับ : D

  2. ถามนิดนึงนะครับ
    ## 4. compute confidence interval
    ci <- c(m – me, m + me)

    c คืออะไรหรอครับ

    1. c() ฟังชั่นใน R ครับ concatenate

  3. เคลียร์​🙏

  4. เขียนออกมาได้น่าสนใจ เป็นเรื่องที่น่าเบื่อแต่กลับเขียนออกมาแล้วไม่น่าเบื่อ

  5. สุดยอกมาก ชอบบทความนี้ ถึงจะอ่านไม่เข้าใจ

    1. อ้าวว 555 ขอบคุณมากๆคร้าบบ งงไหนถามได้น๊า

  6. แอดค่ะ ค่า sd 1.9 หาจากไหนหรอคะ พอดีไม่เห็นว่าในเว็บ มีค่า sd ให้นะคะ มีแต่ mean กับ median

    1. เรา assume เอาจ้า เหมือนสุ่มตัวอย่าง n=100 คนได้ค่าเฉลี่ยและ sd ตามตัวอย่างนี้ครับ

      1. Natthatida Janthasila Avatar
        Natthatida Janthasila

        เข้าใจขึ้นมากเลยค่ะ แต่อาจยังงงๆเพราะภาษาอังกฤษคำ ไทยคำ 555555555

  7. Sirawit Sukwattanavit Avatar
    Sirawit Sukwattanavit

    พี่ครับ หลังจากที่เราสุ่มรอบ sample ได้ช่วงทั้งหมดแล้ว (ตรง CI Explain) เราจะหา mu ได้ยังไงอะครับ?
    คือเอามาจาก population เดิมที่มีอยู่แล้ว หรือ คำนวณใหม่จากข้อมูล sample ที่สุ่มมาอะครับ ^-^

  8. Klang Tinarat Avatar
    Klang Tinarat

    ถ้าใน logistic regression ค่า CI นี่มีความหมายอะไรมั้ยครับ

    1. มีครับ confidence interval ของค่า odds ratio ลองดูตัวอย่างได้ที่นี่ครับ https://www.statisticssolutions.com/table-and-symbols-in-a-logistic-regression/

Leave a Reply