ช่วงความเชื่อมั่นและการทดสอบสมมติฐาน
UAT 106 สถิติและการวิเคราะห์ข้อมูลสำหรับงานเทคโนโลยี
บทเรียน
เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ
- คำนวณ standard error และช่วงความเชื่อมั่นของค่าเฉลี่ยด้วยการแจกแจง t
- ตั้งสมมติฐานและทิศทางของการทดสอบจากข้อกำหนดก่อนเห็นข้อมูล
- ทดสอบค่าเฉลี่ยหนึ่งกลุ่มและเปรียบเทียบสองกลุ่มด้วย Welch t-test และตีความค่า p อย่างถูกต้อง
- อธิบายความผิดพลาดชนิดที่ 1 และ 2 และแยกช่วงความเชื่อมั่นของค่าเฉลี่ยออกจากการกระจายของแต่ละเที่ยวบิน
ทำไมต้องรู้
ผู้ผลิตระบุว่าโดรนบินได้ “ไม่ต่ำกว่า 20 นาที” หน่วยงานทดสอบสี่เที่ยว ได้ค่าเฉลี่ย 22.6 นาที ข้อมูลนี้พอจะยืนยันข้อกำหนดหรือไม่ ถ้าทดสอบใหม่อีกสี่เที่ยวค่าเฉลี่ยอาจเปลี่ยนไป สถิติอนุมาน (inferential statistics) บอกว่าตัวเลขจากตัวอย่างไม่แน่นอนเท่าใด และข้อมูลสนับสนุนข้อสรุปได้แค่ไหน หน่วยความรู้ “การทดสอบ UAV และการวิเคราะห์หลักฐาน” และแนวทางทดลอง L14 ของคลังความรู้โดรนใช้แนวคิดในโมดูลนี้ตรง ๆ
Standard error และช่วงความเชื่อมั่น
ค่าเฉลี่ยจากตัวอย่างไม่เท่ากับค่าเฉลี่ยจริงของประชากร standard error (SE) วัดว่าค่าเฉลี่ยของตัวอย่างคลาดเคลื่อนได้เท่าใด ช่วงความเชื่อมั่น (confidence interval, CI) ของค่าเฉลี่ยตามคู่มือสถิติของ NIST คือ ใช้ การแจกแจง t แทนการแจกแจงปกติเพราะเราประมาณ จากตัวอย่าง เมื่อ น้อย ค่า จะใหญ่กว่า 1.96 มาก
ตัวอย่างที่ 1 เวลาบินสามเที่ยว 20, 22, 24 นาที
ตัวอย่างนี้มาจากหน่วยความรู้การทดสอบ UAV ของคลังความรู้โดรน
import math
from scipy import stats
x = [20, 22, 24]
n = len(x)
mean = sum(x) / n
s = math.sqrt(sum((v - mean) ** 2 for v in x) / (n - 1))
se = s / math.sqrt(n)
t_crit = stats.t.ppf(0.975, df=n - 1)
print(f"mean {mean} s {s} SE {se:.6f} t {t_crit:.8f}")
print(f"95% CI [{mean - t_crit * se:.2f}, {mean + t_crit * se:.2f}] min")
ci = stats.ttest_1samp(x, popmean=0).confidence_interval(confidence_level=0.95)
print(f"scipy check [{ci.low:.2f}, {ci.high:.2f}]")
mean 22.0 s 2.0 SE 1.154701 t 4.30265273
95% CI [17.03, 26.97] min
scipy check [17.03, 26.97]
ช่วงกว้างถึง 17.03 ถึง 26.97 นาที เพราะมีเพียงสามเที่ยวและ ถ้าใช้ 1.96 แทนจะได้ช่วงแคบลงเหลือไม่ถึงครึ่งของที่ควรเป็น ()
ความหมายของ “95%” คือ ถ้าทำการทดลองแบบเดียวกันซ้ำหลายครั้ง ช่วงที่สร้างด้วยวิธีนี้ 95% ของครั้งจะครอบค่าเฉลี่ยจริงไว้ ไม่ใช่ โอกาส 95% ที่เที่ยวบินถัดไปจะอยู่ในช่วง
ทดสอบสมมติฐานจากข้อกำหนด
การทดสอบสมมติฐาน (hypothesis test) เริ่มจากตั้ง สมมติฐานว่าง ที่เราพยายามหาหลักฐานมาหักล้าง และ สมมติฐานทางเลือก สิ่งที่ต้องทำก่อนเห็นข้อมูลคือเลือก ทิศทาง ให้ตรงข้อกำหนด และเลือก ระดับนัยสำคัญ เช่น 0.05
ข้อกำหนด “เวลาบินเฉลี่ยไม่ต่ำกว่า 20 นาทีเมื่อบรรทุก 1.0 kg” ต้องการหลักฐานว่าค่าเฉลี่ย มากกว่า 20 จึงตั้ง และ เป็นการทดสอบ ด้านเดียว (one-sided)
import pandas as pd
flights = pd.read_csv("endurance.csv")
a_1kg = flights.query("battery == 'A' and payload_kg == 1.0")["endurance_min"]
print("flights:", a_1kg.tolist())
res = stats.ttest_1samp(a_1kg, popmean=20, alternative="greater")
print(f"mean {a_1kg.mean():.3f} t {res.statistic:.3f} p {res.pvalue:.4f} df {res.df}")
se = a_1kg.std() / math.sqrt(len(a_1kg))
print(f"one-sided 95% lower bound {a_1kg.mean() - stats.t.ppf(0.95, len(a_1kg) - 1) * se:.2f} min")
ci = stats.ttest_1samp(a_1kg, popmean=20).confidence_interval(0.95)
print(f"two-sided 95% CI [{ci.low:.2f}, {ci.high:.2f}] min")
flights: [23.92, 22.04, 22.47, 21.83]
mean 22.565 t 5.447 p 0.0061 df 3
one-sided 95% lower bound 21.46 min
two-sided 95% CI [21.07, 24.06] min
ค่า p คือความน่าจะเป็นที่จะได้ผลสุดโต่งเท่านี้หรือมากกว่า ถ้า เป็นจริง ค่า p = 0.006 น้อยกว่า 0.05 จึงปฏิเสธ ข้อมูลสนับสนุนว่าค่าเฉลี่ยเกิน 20 นาที และขอบล่างด้านเดียว 95% อยู่ที่ประมาณ 21.46 นาที
ค่าเฉลี่ยผ่าน ไม่ได้แปลว่าทุกเที่ยวผ่าน
ช่วงความเชื่อมั่นบอกความไม่แน่นอนของ ค่าเฉลี่ย ส่วนคำถาม “เที่ยวบิน 99% จะบินได้เกิน 20 นาทีหรือไม่” ต้องใช้ tolerance interval ซึ่งเป็นอีกวิธีหนึ่งในคู่มือ NIST และต้องการข้อมูลมากกว่านี้มาก ข้อสรุปจากสี่เที่ยวยังจำกัดอยู่ที่แบตเตอรี่ น้ำหนักบรรทุก และสภาพอากาศแบบที่ทดสอบ
เปรียบเทียบสองกลุ่มด้วย Welch t-test
คำถามต่อไปคือ “แบตเตอรี่ยี่ห้อ B บินได้นานกว่า A หรือไม่” เมื่อบรรทุก 0.5 kg ใช้ Welch t-test ซึ่งไม่ต้องสมมติว่าสองกลุ่มกระจายเท่ากัน ใน SciPy ต้องระบุ equal_var=False เพราะค่าเริ่มต้นคือแบบกระจายเท่ากัน
half = flights.query("payload_kg == 0.5")
a = half.query("battery == 'A'")["endurance_min"]
b = half.query("battery == 'B'")["endurance_min"]
res = stats.ttest_ind(b, a, equal_var=False)
ci = res.confidence_interval(0.95)
print(f"mean B - A = {b.mean() - a.mean():.2f} min t {res.statistic:.3f} p {res.pvalue:.3f} df {res.df:.2f}")
print(f"95% CI of the difference [{ci.low:.2f}, {ci.high:.2f}] min")
mean B - A = 0.70 min t 1.015 p 0.353 df 5.36
95% CI of the difference [-1.04, 2.44] min
ค่า p = 0.35 มากกว่า 0.05 จึง ไม่ปฏิเสธ แต่ห้ามสรุปว่า “สองยี่ห้อเท่ากัน” ช่วงความเชื่อมั่นของผลต่างตั้งแต่ −1.04 ถึง +2.44 นาทีบอกว่าข้อมูลสี่เที่ยวต่อกลุ่มยังเข้ากันได้ทั้งกับกรณีที่ B แย่กว่าประมาณหนึ่งนาทีและดีกว่าเกือบสองนาทีครึ่ง คำตอบที่ซื่อตรงคือ “ข้อมูลยังไม่พอจะบอก”
ความผิดพลาดสองชนิดและหลักการใช้ค่า p
| จริง | ไม่จริง | |
|---|---|---|
| ปฏิเสธ | ความผิดพลาดชนิดที่ 1 (โอกาส ) | ถูกต้อง (กำลังการทดสอบ) |
| ไม่ปฏิเสธ | ถูกต้อง | ความผิดพลาดชนิดที่ 2 |
import numpy as np
rng = np.random.default_rng(116)
null_true = rng.normal(20, 0.9, size=(10_000, 4))
p = stats.ttest_1samp(null_true, 20, axis=1, alternative="greater").pvalue
print(f"H0 true: rejected in {np.mean(p < 0.05):.1%} of 10 000 experiments")
for n in (4, 8, 16):
real = rng.normal(21, 0.9, size=(10_000, n))
p = stats.ttest_1samp(real, 20, axis=1, alternative="greater").pvalue
print(f"true mean 21 min, n = {n:>2}: power {np.mean(p < 0.05):.1%}")
H0 true: rejected in 5.0% of 10 000 experiments
true mean 21 min, n = 4: power 52.1%
true mean 21 min, n = 8: power 87.7%
true mean 21 min, n = 16: power 99.5%
เมื่อ จริง การทดสอบที่ ปฏิเสธผิดประมาณ 5% ตามที่ออกแบบ และเมื่อค่าเฉลี่ยจริงคือ 21 นาที สี่เที่ยวตรวจพบได้เพียงประมาณครึ่งหนึ่งของการทดลอง (52%) การเพิ่มจำนวนเที่ยวบินเพิ่มกำลังการทดสอบ จึงควรวางแผนจำนวนเที่ยวบินก่อนทดสอบ
สมาคมสถิติอเมริกัน (ASA) ออกแถลงการณ์เรื่องค่า p ในปี 2016 มีหลักสำคัญ เช่น ค่า p ไม่ได้ วัดความน่าจะเป็นที่สมมติฐานเป็นจริง ข้อสรุปไม่ควรขึ้นกับว่าค่า p ผ่านเส้น 0.05 หรือไม่เพียงอย่างเดียว ต้องรายงานครบและโปร่งใส และค่า p ไม่ได้บอกขนาดของผล จึงต้องรายงานช่วงความเชื่อมั่นของผลต่างคู่กันเสมอ
ปฏิบัติการประจำโมดูล
ปฏิบัติการ: ตีความผลทดสอบเวลาบิน
- ทำตามแนวทางทดลอง L14 ของคลังความรู้โดรน เขียนข้อกำหนด สมมติฐาน ทิศทาง และ ลงใบงาน ก่อน เปิดไฟล์
endurance.csv - ทดสอบข้อกำหนด “ไม่ต่ำกว่า 20 นาที” ของทุกคู่ยี่ห้อกับน้ำหนักบรรทุก รายงานค่าเฉลี่ย SD n ค่า p และขอบล่างด้านเดียว
- เปรียบเทียบยี่ห้อ A กับ B ที่น้ำหนักบรรทุกทั้งสามระดับด้วย Welch t-test แล้วเขียนข้อสรุปที่ไม่เกินกว่าข้อมูล
- ใช้การจำลองหาจำนวนเที่ยวบินน้อยที่สุดที่ทำให้กำลังการทดสอบถึง 80% เมื่อค่าเฉลี่ยจริง 21 นาที SD 0.9 นาที
ข้อผิดพลาดที่พบบ่อย
ระวัง
- เลือกทดสอบด้านเดียวหรือสองด้านหลังเห็นผล เพื่อให้ค่า p ผ่าน
- ใช้ 1.96 กับตัวอย่างเล็ก ต้องใช้ค่า t ที่ องศาอิสระ
- สรุปว่าเท่ากันเพราะไม่ปฏิเสธ การไม่พบความต่างไม่ใช่หลักฐานว่าไม่มีความต่าง
- คิดว่าค่า p คือโอกาสที่ จริง ค่า p คำนวณโดยสมมติว่า จริงอยู่แล้ว
- ใช้ CI ของค่าเฉลี่ยรับรองทุกเที่ยวบิน ต้องใช้ tolerance interval
สรุป
- SE และช่วงความเชื่อมั่นของค่าเฉลี่ยใช้ค่า ที่ องศาอิสระ ตัวอย่างเล็กได้ช่วงกว้าง
- ตั้ง ทิศทาง และ จากข้อกำหนดก่อนเห็นข้อมูล
- ใช้ Welch t-test เปรียบเทียบสองกลุ่ม และรายงานช่วงความเชื่อมั่นของผลต่างคู่กับค่า p
- คือโอกาสความผิดพลาดชนิดที่ 1 กำลังการทดสอบเพิ่มเมื่อเก็บข้อมูลมากขึ้น และค่า p ไม่ได้บอกขนาดหรือความสำคัญของผล
แบบฝึกตรวจความเข้าใจ
- ตัวอย่าง 9 เที่ยว นาที มี SE เท่าใด
- ข้อกำหนด “เสียงไม่เกิน 70 dBA” ควรตั้ง อย่างไร
- ค่า p = 0.03 ที่ สรุปอย่างไร
- ทดสอบได้ค่า p = 0.40 ผู้เขียนรายงานว่า “พิสูจน์แล้วว่าไม่ต่างกัน” ผิดตรงไหน
- ทำไม SciPy
ttest_indจึงต้องใส่equal_var=Falseเมื่อต้องการ Welch t-test
เฉลย
- นาที
- dBA เพราะต้องการหลักฐานว่าเสียงต่ำกว่าเกณฑ์ ()
- ปฏิเสธ ข้อมูลสนับสนุน ที่ระดับนัยสำคัญ 0.05 และควรรายงานช่วงความเชื่อมั่นคู่กัน
- การไม่ปฏิเสธ ไม่ใช่หลักฐานว่าเท่ากัน อาจเป็นเพราะข้อมูลน้อยเกินไป ควรรายงานช่วงความเชื่อมั่นของผลต่าง
- เพราะค่าเริ่มต้นของ
ttest_indคือequal_var=Trueซึ่งสมมติว่าสองกลุ่มมีความแปรปรวนเท่ากัน
สรุปสูตรสำคัญ
| standard error ของค่าเฉลี่ย | |
| ช่วงความเชื่อมั่นสองด้านของค่าเฉลี่ย | |
| สถิติทดสอบ t หนึ่งกลุ่ม | |
| สถิติทดสอบ Welch |
แหล่งอ้างอิงหลัก
- Montgomery, D. C., & Runger, G. C. (2018). Applied statistics and probability for engineers (7th ed.). Wiley. link
- NIST/SEMATECH. Confidence limits for the mean (section 1.3.5.2). e-Handbook of statistical methods. link
- NIST/SEMATECH. Two-sample t-test for equal means (section 1.3.5.3). e-Handbook of statistical methods. link
- NIST/SEMATECH. Tolerance intervals for a normal distribution (section 7.2.6.3). e-Handbook of statistical methods. link
- The SciPy community. Statistical functions (scipy.stats), SciPy 1.18 documentation. link
- Wasserstein, R. L., & Lazar, N. A. (2016). The ASA statement on p-values: Context, process, and purpose. The American Statistician, 70(2), 129–133. link
- Diez, D. M., Çetinkaya-Rundel, M., & Barr, C. D. (2019). OpenIntro statistics (4th ed.). OpenIntro. link
อ่านเพิ่มเติม
ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล
ในชั้นเรียน / ภาคสนาม
ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย
หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz