การทดสอบสัดส่วนแบบหนึ่งกลุ่มตัวอย่าง

การทดสอบสมมติฐานด้วย Python

James Chapman

Curriculum Manager, DataCamp

ทบทวนบทที่ 1

  • ข้ออ้างเกี่ยวกับสัดส่วนประชากรที่ไม่รู้จักนั้นสมเหตุสมผลหรือไม่?

 

  1. ค่าความคลาดเคลื่อนมาตรฐานของสถิติตัวอย่างจาก bootstrap distribution
  2. คำนวณสถิติทดสอบมาตรฐาน
  3. คำนวณค่า p-value
  4. ตัดสินว่าสมมติฐานใดสมเหตุสมผลที่สุด

 

  • ตอนนี้ คำนวณสถิติทดสอบโดยไม่ใช้ bootstrap distribution
การทดสอบสมมติฐานด้วย Python

สถิติทดสอบมาตรฐานสำหรับสัดส่วน

$p$: สัดส่วนประชากร (พารามิเตอร์ที่ไม่รู้จัก)

$\hat{p}$: สัดส่วนตัวอย่าง (สถิติตัวอย่าง)

$p_{0}$: สัดส่วนประชากรที่ตั้งสมมติฐาน

$$ z = \frac{\hat{p} - \text{mean}(\hat{p})}{\text{SE}(\hat{p})} = \frac{\hat{p} - p}{\text{SE}(\hat{p})} $$

กำหนดให้ $H_{0}$ เป็นจริง นั่นคือ $p = p_{0}$ ดังนั้น

$$ z = \dfrac{\hat{p} - p_{0}}{\text{SE}(\hat{p})} $$

การทดสอบสมมติฐานด้วย Python

การทำให้การคำนวณค่าความคลาดเคลื่อนมาตรฐานง่ายขึ้น

$SE_{\hat{p}} = \sqrt{\dfrac{p_{0}*(1-p_{0})}{n}}$ $\rightarrow$ ภายใต้ $H_0$, $SE_{\hat{p}}$ ขึ้นอยู่กับ $p_0$ ที่ตั้งสมมติฐานและขนาดตัวอย่าง $n$

กำหนดให้ $H_{0}$ เป็นจริง

$z = \dfrac{\hat{p} - p_{0}}{\sqrt{\dfrac{p_{0}*(1-p_{0})}{n}}}$

  • ใช้เพียงข้อมูลตัวอย่าง ($\hat{p}$ และ $n$) และพารามิเตอร์ที่ตั้งสมมติฐาน ($p_{0}$)
การทดสอบสมมติฐานด้วย Python

ทำไมต้องใช้ z แทน t?

$t = \dfrac{(\bar{x}_{\text{child}} - \bar{x}_{\text{adult}})}{\sqrt{\dfrac{s_{\text{child}}^2}{n_{\text{child}}} + \dfrac{s_{\text{adult}}^2}{n_{\text{adult}}}}}$

  • $s$ คำนวณจาก $\bar{x}$
    • $\bar{x}$ ประมาณค่าเฉลี่ยประชากร
    • $s$ ประมาณค่าเบี่ยงเบนมาตรฐานประชากร
    • $\uparrow$ ความไม่แน่นอนในการประมาณพารามิเตอร์
  • t-distribution มีหางอ้วนกว่า normal distribution
  • $\hat{p}$ ปรากฏในตัวเศษเท่านั้น จึงใช้ z-score ได้
การทดสอบสมมติฐานด้วย Python

หมวดอายุของ Stack Overflow

$H_{0}$: สัดส่วนผู้ใช้ Stack Overflow ที่อายุต่ำกว่าสามสิบปี $=0.5$

$H_{A}$: สัดส่วนผู้ใช้ Stack Overflow ที่อายุต่ำกว่าสามสิบปี $\neq0.5$

alpha = 0.01
stack_overflow['age_cat'].value_counts(normalize=True)
Under 30       0.535604
At least 30    0.464396
Name: age_cat, dtype: float64
การทดสอบสมมติฐานด้วย Python

ตัวแปรสำหรับ z

p_hat = (stack_overflow['age_cat'] == 'Under 30').mean()
0.5356037151702786
p_0 = 0.50
n = len(stack_overflow)
2261
การทดสอบสมมติฐานด้วย Python

การคำนวณ z-score

$z = \dfrac{\hat{p} - p_{0}}{\sqrt{\dfrac{p_{0}*(1-p_{0})}{n}}}$

import numpy as np
numerator = p_hat - p_0
denominator = np.sqrt(p_0 * (1 - p_0) / n)
z_score = numerator / denominator
3.385911440783663
การทดสอบสมมติฐานด้วย Python

การคำนวณ p-value

CDF ของ normal distribution โดยส่วนของเส้นที่น้อยกว่า -2 แสดงด้วยสีแดง และส่วนที่มากกว่า 2 แสดงด้วยสีเขียว หางซ้าย ("น้อยกว่า"):

from scipy.stats import norm
p_value = norm.cdf(z_score)

หางขวา ("มากกว่า"):

p_value = 1 - norm.cdf(z_score)

สองหาง ("ไม่เท่ากับ"):

p_value = norm.cdf(-z_score) + 
  1 - norm.cdf(z_score)
p_value = 2 * (1 - norm.cdf(z_score))
0.0007094227368100725
p_value <= alpha
True
การทดสอบสมมติฐานด้วย Python

มาฝึกกันเถอะ!

การทดสอบสมมติฐานด้วย Python

Preparing Video For Download...