การทดสอบ ANOVA

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

James Chapman

Curriculum Manager, DataCamp

ความพึงพอใจในงาน: 5 หมวดหมู่

stack_overflow['job_sat'].value_counts()
Very satisfied           879
Slightly satisfied       680
Slightly dissatisfied    342
Neither                  201
Very dissatisfied        159
Name: job_sat, dtype: int64
การทดสอบสมมติฐานด้วย Python

การแสดงภาพการกระจายหลายกลุ่ม

ค่าตอบแทนรายปีเฉลี่ยแตกต่างกันตามระดับความพึงพอใจในงานหรือไม่?

import seaborn as sns
import matplotlib.pyplot as plt
sns.boxplot(x="converted_comp", 
            y="job_sat", 
            data=stack_overflow)
plt.show()

กราฟ Box plot แสดงการกระจายของค่าตอบแทนใน 5 หมวดหมู่ "Very satisfied" ดูสูงกว่าหมวดอื่นเล็กน้อย แต่ยังบอกได้ยาก

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

การวิเคราะห์ความแปรปรวน (ANOVA)

  • การทดสอบความแตกต่าง ระหว่าง กลุ่ม
alpha = 0.2


pingouin.anova(data=stack_overflow, dv="converted_comp", between="job_sat")
    Source  ddof1  ddof2         F     p-unc       np2
0  job_sat      4   2256  4.480485  0.001315  0.007882
  • 0.001315 $< \alpha$
  • อย่างน้อยสองหมวดหมู่มีค่าตอบแทน แตกต่างกันอย่างมีนัยสำคัญ
การทดสอบสมมติฐานด้วย Python

การทดสอบแบบคู่

  • $\mu_{\text{very dissatisfied}} \neq \mu_{\text{slightly dissatisfied}}$
  • $\mu_{\text{very dissatisfied}} \neq \mu_{\text{neither}}$
  • $\mu_{\text{very dissatisfied}} \neq \mu_{\text{slightly satisfied}}$
  • $\mu_{\text{very dissatisfied}} \neq \mu_{\text{very satisfied}}$
  • $\mu_{\text{slightly dissatisfied}} \neq \mu_{\text{neither}}$
  • $\mu_{\text{slightly dissatisfied}} \neq \mu_{\text{slightly satisfied}}$
  • $\mu_{\text{slightly dissatisfied}} \neq \mu_{\text{very satisfied}}$
  • $\mu_{\text{neither}} \neq \mu_{\text{slightly satisfied}}$
  • $\mu_{\text{neither}} \neq \mu_{\text{very satisfied}}$
  • $\mu_{\text{slightly satisfied}} \neq \mu_{\text{very satisfied}}$

 

กำหนดระดับนัยสำคัญที่ $\alpha = 0.2$

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

pairwise_tests()

pingouin.pairwise_tests(data=stack_overflow, 
                        dv="converted_comp", 
                        between="job_sat", 
                        padjust="none")
  Contrast                   A                      B  Paired  Parametric  ...          dof  alternative     p-unc     BF10    hedges
0  job_sat  Slightly satisfied         Very satisfied   False        True  ...  1478.622799    two-sided  0.000064  158.564 -0.192931
1  job_sat  Slightly satisfied                Neither   False        True  ...   258.204546    two-sided  0.484088    0.114 -0.068513
2  job_sat  Slightly satisfied      Very dissatisfied   False        True  ...   187.153329    two-sided  0.215179    0.208 -0.145624
3  job_sat  Slightly satisfied  Slightly dissatisfied   False        True  ...   569.926329    two-sided  0.969491    0.074 -0.002719
4  job_sat      Very satisfied                Neither   False        True  ...   328.326639    two-sided  0.097286    0.337  0.120115
5  job_sat      Very satisfied      Very dissatisfied   False        True  ...   221.666205    two-sided  0.455627    0.126  0.063479
6  job_sat      Very satisfied  Slightly dissatisfied   False        True  ...   821.303063    two-sided  0.002166     7.43  0.173247
7  job_sat             Neither      Very dissatisfied   False        True  ...   321.165726    two-sided  0.585481    0.135 -0.058537
8  job_sat             Neither  Slightly dissatisfied   False        True  ...   367.730081    two-sided  0.547406    0.118  0.055707
9  job_sat   Very dissatisfied  Slightly dissatisfied   False        True  ...   247.570187    two-sided  0.259590    0.197  0.119131

[10 rows x 11 columns]
การทดสอบสมมติฐานด้วย Python

เมื่อจำนวนกลุ่มเพิ่มขึ้น...

กราฟ Scatter plot แสดงจำนวนคู่เทียบกับจำนวนกลุ่ม เมื่อจำนวนกลุ่มเพิ่มขึ้น จำนวนคู่จะเพิ่มขึ้นแบบกำลังสอง

กราฟ Scatter plot แสดงความน่าจะเป็นของการได้ผลลัพธ์ที่มีนัยสำคัญอย่างน้อย 1 รายการ เทียบกับจำนวนกลุ่ม เมื่อจำนวนกลุ่มเพิ่มขึ้น ความน่าจะเป็นดังกล่าวก็เพิ่มขึ้นด้วย

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

การแก้ไขแบบ Bonferroni

pingouin.pairwise_tests(data=stack_overflow, 
                        dv="converted_comp", 
                        between="job_sat", 
                        padjust="bonf")
  Contrast                   A                      B   ...     p-unc    p-corr p-adjust     BF10    hedges
0  job_sat  Slightly satisfied         Very satisfied   ...  0.000064  0.000638     bonf  158.564 -0.192931
1  job_sat  Slightly satisfied                Neither   ...  0.484088  1.000000     bonf    0.114 -0.068513
2  job_sat  Slightly satisfied      Very dissatisfied   ...  0.215179  1.000000     bonf    0.208 -0.145624
3  job_sat  Slightly satisfied  Slightly dissatisfied   ...  0.969491  1.000000     bonf    0.074 -0.002719
4  job_sat      Very satisfied                Neither   ...  0.097286  0.972864     bonf    0.337  0.120115
5  job_sat      Very satisfied      Very dissatisfied   ...  0.455627  1.000000     bonf    0.126  0.063479
6  job_sat      Very satisfied  Slightly dissatisfied   ...  0.002166  0.021659     bonf     7.43  0.173247
7  job_sat             Neither      Very dissatisfied   ...  0.585481  1.000000     bonf    0.135 -0.058537
8  job_sat             Neither  Slightly dissatisfied   ...  0.547406  1.000000     bonf    0.118  0.055707
9  job_sat   Very dissatisfied  Slightly dissatisfied   ...  0.259590  1.000000     bonf    0.197  0.119131

[10 rows x 11 columns]
การทดสอบสมมติฐานด้วย Python

วิธีเพิ่มเติม

padjust : string

วิธีที่ใช้ในการทดสอบและปรับค่า p-value

  • 'none': ไม่มีการแก้ไข [ค่าเริ่มต้น]
  • 'bonf': การแก้ไขแบบ Bonferroni แบบขั้นตอนเดียว
  • 'sidak': การแก้ไขแบบ Sidak แบบขั้นตอนเดียว
  • 'holm': วิธีแบบ step-down โดยใช้การปรับแบบ Bonferroni
  • 'fdr_bh': การแก้ไข FDR แบบ Benjamini/Hochberg
  • 'fdr_by': การแก้ไข FDR แบบ Benjamini/Yekutieli
การทดสอบสมมติฐานด้วย Python

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

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

Preparing Video For Download...