วิธีดำเนินการวิเคราะห์ความแปรปรวนแบบสองทางใน python
การวิเคราะห์ความแปรปรวนแบบสองทาง ใช้เพื่อพิจารณาว่ามีความแตกต่างที่มีนัยสำคัญทางสถิติระหว่างค่าเฉลี่ยของกลุ่มอิสระสามกลุ่มขึ้นไปที่ถูกแบ่งออกเป็นสองปัจจัยหรือไม่
วัตถุประสงค์ของการวิเคราะห์ความแปรปรวนแบบสองทางคือเพื่อกำหนดผลกระทบของปัจจัยสองตัวต่อตัวแปรการตอบสนอง และเพื่อพิจารณาว่ามีการโต้ตอบระหว่างปัจจัยทั้งสองกับตัวแปรตอบสนองหรือไม่
บทช่วยสอนนี้จะอธิบายวิธีดำเนินการวิเคราะห์ความแปรปรวนแบบสองทางใน Python
ตัวอย่าง: การวิเคราะห์ความแปรปรวนแบบสองทางใน Python
นักพฤกษศาสตร์ต้องการทราบว่าการเจริญเติบโตของพืชได้รับอิทธิพลจากการสัมผัสกับแสงแดดและความถี่ในการรดน้ำหรือไม่ เธอปลูกเมล็ดพืช 30 เมล็ดและปล่อยให้มันเติบโตเป็นเวลาสองเดือนในสภาพแสงแดดและความถี่ในการรดน้ำที่แตกต่างกัน หลังจากผ่านไปสองเดือน เธอก็บันทึกความสูงของต้นแต่ละต้นเป็นหน่วยนิ้ว
ใช้ขั้นตอนต่อไปนี้เพื่อทำการวิเคราะห์ความแปรปรวนแบบสองทางเพื่อตรวจสอบว่าความถี่ในการรดน้ำและแสงแดดมีผลกระทบอย่างมีนัยสำคัญต่อการเจริญเติบโตของพืชหรือไม่ และเพื่อตรวจสอบว่ามีผลกระทบอันตรกิริยาระหว่างความถี่ของน้ำและแสงแดดหรือไม่ รดน้ำและสัมผัสกับแสงแดด
ขั้นตอนที่ 1: ป้อนข้อมูล
ขั้นแรก เราจะสร้าง DataFrame แพนด้าที่มีตัวแปรสามตัวต่อไปนี้:
- น้ำ: แต่ละต้นรดน้ำบ่อยแค่ไหน: รายวันหรือรายสัปดาห์
- ดวงอาทิตย์: ปริมาณแสงแดดที่แต่ละต้นได้รับ: ต่ำ ปานกลาง หรือสูง
- ความสูง: ความสูงของต้นแต่ละต้น (หน่วยเป็นนิ้ว) หลังจากผ่านไปสองเดือน
import numpy as np import pandas as pd #create data df = pd.DataFrame({'water': np.repeat(['daily', 'weekly'], 15), 'sun': np.tile(np.repeat(['low', 'med', 'high'], 5), 2), 'height': [6, 6, 6, 5, 6, 5, 5, 6, 4, 5, 6, 6, 7, 8, 7, 3, 4, 4, 4, 5, 4, 4, 4, 4, 4, 5, 6, 6, 7, 8]}) #view first ten rows of data df[:10] water sun height 0 daily low 6 1 daily low 6 2 daily low 6 3 daily low 5 4 daily low 6 5 daily med 5 6 daily med 5 7 daily med 6 8 daily med 4 9 daily med 5
ขั้นตอนที่ 2: ดำเนินการวิเคราะห์ความแปรปรวนแบบสองทาง
ต่อไป เราจะดำเนินการวิเคราะห์ความแปรปรวนแบบสองทางโดยใช้ ฟังก์ชัน anova_lm() จากไลบรารี statsmodels:
import statsmodels.api as sm from statsmodels.formula.api import ols #perform two-way ANOVA model = ols('height ~ C(water) + C(sun) + C(water):C(sun)', data=df).fit() sm.stats.anova_lm(model, typ=2) sum_sq df F PR(>F) C(water) 8.533333 1.0 16.0000 0.000527 C(sun) 24.866667 2.0 23.3125 0.000002 C(water):C(sun) 2.466667 2.0 2.3125 0.120667 Residual 12.800000 24.0 NaN NaN
ขั้นตอนที่ 3: ตีความผลลัพธ์
เราสามารถดูค่า p ต่อไปนี้สำหรับแต่ละปัจจัยในตาราง:
- น้ำ: ค่า p = 0.000527
- ดวงอาทิตย์: ค่า p = 0.0000002
- น้ำ*ดวงอาทิตย์: ค่า p = 0.120667
เนื่องจากค่า p ของน้ำและแสงแดดมีค่าน้อยกว่า 0.05 ซึ่งหมายความว่าทั้งสองปัจจัยมีผลกระทบอย่างมีนัยสำคัญต่อความสูงของพืช
และเนื่องจากค่า p สำหรับเอฟเฟกต์ปฏิสัมพันธ์ (0.120667) มีค่าไม่น้อยกว่า 0.05 นี่จึงบอกเราว่าไม่มีผลกระทบอย่างมีนัยสำคัญระหว่างการสัมผัสกับแสงแดดและความถี่ในการรดน้ำ
หมายเหตุ: แม้ว่าผลลัพธ์ของ ANOVA จะบอกเราว่าความถี่ในการรดน้ำและแสงแดดมีผลกระทบอย่างมีนัยสำคัญทางสถิติต่อความสูงของพืช แต่เราจำเป็นต้องทำการ ทดสอบหลังการทดสอบ เพื่อระบุอย่างชัดเจนว่าระดับน้ำและแสงแดดที่แตกต่างกันส่งผลต่อความสูงของพืชอย่างไร
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีทำงานทั่วไปอื่นๆ ใน Python:
วิธีการดำเนินการวิเคราะห์ความแปรปรวนแบบทางเดียวใน Python
วิธีดำเนินการวิเคราะห์ความแปรปรวนสามทางใน Python