วิธีดำเนินการวิเคราะห์ความแปรปรวนแบบสองทางใน 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

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *