บทช่วยสอน R ANOVA: แบบทางเดียวและแบบสองทาง (พร้อมตัวอย่าง)

ANOVA คืออะไร

การวิเคราะห์ความแปรปรวน (ANOVA) เป็นเทคนิคทางสถิติที่ใช้กันทั่วไปในการศึกษาความแตกต่างระหว่างค่าเฉลี่ยของกลุ่มตั้งแต่สองกลุ่มขึ้นไป การทดสอบ ANOVA มุ่งเน้นไปที่แหล่งที่มาของความแปรปรวนที่แตกต่างกันในตัวแปรทั่วไป ANOVA ใน R จะให้หลักฐานการมีอยู่ของความเท่าเทียมกันของค่าเฉลี่ยระหว่างกลุ่มเป็นหลัก วิธีทางสถิตินี้เป็นส่วนขยายของการทดสอบ t ใช้ในสถานการณ์ที่ตัวแปรปัจจัยมีกลุ่มมากกว่าหนึ่งกลุ่ม

ANOVA ทางเดียว

มีหลายสถานการณ์ที่คุณต้องเปรียบเทียบค่าเฉลี่ยระหว่างหลายกลุ่ม ตัวอย่างเช่น แผนกการตลาดต้องการทราบว่ามี 3 ทีมที่มียอดขายเท่ากันหรือไม่

  • ทีม: ปัจจัย 3 ระดับ: A, B และ C
  • การขาย: การวัดประสิทธิภาพ

การทดสอบ ANOVA สามารถบอกได้ว่าทั้งสามกลุ่มมีประสิทธิภาพที่คล้ายคลึงกันหรือไม่

เพื่อชี้แจงว่าข้อมูลมาจากประชากรกลุ่มเดียวกันหรือไม่ คุณสามารถดำเนินการได้ การวิเคราะห์ความแปรปรวนทางเดียว (ต่อไปนี้จะเรียกว่า One-way ANOVA) การทดสอบนี้เช่นเดียวกับการทดสอบทางสถิติอื่นๆ จะให้หลักฐานว่าสมมติฐาน H0 สามารถยอมรับหรือปฏิเสธได้หรือไม่

สมมติฐานในการทดสอบ ANOVA แบบทางเดียว

  • H0: ค่าเฉลี่ยระหว่างกลุ่มเหมือนกัน
  • H3: อย่างน้อย ค่าเฉลี่ยของกลุ่มหนึ่งก็แตกต่างกัน

กล่าวอีกนัยหนึ่ง สมมติฐาน H0 บอกเป็นนัยว่ามีหลักฐานไม่เพียงพอที่จะพิสูจน์ค่าเฉลี่ยของกลุ่ม (ปัจจัย) แตกต่างจากที่อื่น

การทดสอบนี้คล้ายคลึงกับการทดสอบ t-test แม้ว่าจะแนะนำให้ใช้การทดสอบ ANOVA ในสถานการณ์ที่มีกลุ่มมากกว่า 2 กลุ่มก็ตาม ยกเว้นว่าการทดสอบ t-test และ ANOVA ให้ผลลัพธ์ที่คล้ายกัน

สมมติฐาน

เราถือว่าแต่ละปัจจัยสุ่มตัวอย่าง เป็นอิสระ และมาจากประชากรที่แจกแจงตามปกติโดยมีความแปรปรวนที่ไม่ทราบแน่ชัดแต่เท่ากัน

ตีความการทดสอบ ANOVA

สถิติ F ใช้เพื่อทดสอบว่าข้อมูลมาจากประชากรที่แตกต่างกันอย่างมีนัยสำคัญ เช่น ค่าเฉลี่ยตัวอย่างที่แตกต่างกัน

ในการคำนวณสถิติ F คุณต้องหารค่า ความแปรปรวนระหว่างกลุ่ม มากกว่า ความแปรปรวนภายในกลุ่ม.

รางวัล ระหว่างกลุ่ม ความแปรปรวนสะท้อนถึงความแตกต่างระหว่างกลุ่มภายในประชากรทั้งหมด ดูกราฟทั้งสองด้านล่างเพื่อทำความเข้าใจแนวคิดเรื่องความแปรปรวนระหว่างกลุ่ม

กราฟด้านซ้ายแสดงความแปรปรวนน้อยมากระหว่างทั้งสามกลุ่ม และมีแนวโน้มสูงว่าค่าเฉลี่ยทั้งสามจะมีแนวโน้มไปทาง ทั้งหมด ค่าเฉลี่ย (กล่าวคือ ค่าเฉลี่ยสำหรับทั้งสามกลุ่ม)

กราฟด้านขวาจะพล็อตการแจกแจงสามแบบแยกจากกัน และไม่มีส่วนใดทับซ้อนกัน มีโอกาสสูงที่ความแตกต่างระหว่างค่าเฉลี่ยรวมและค่าเฉลี่ยกลุ่มจะมีมาก

ตีความการทดสอบ ANOVA

รางวัล ภายในกลุ่ม ความแปรปรวนพิจารณาความแตกต่างระหว่างกลุ่ม ความแปรผันนี้มาจากการสังเกตส่วนบุคคล บางจุดอาจจะแตกต่างไปจากค่าเฉลี่ยของกลุ่มอย่างสิ้นเชิง ที่ ภายในกลุ่ม ความแปรปรวนจะรับเอฟเฟกต์นี้และอ้างอิงถึงข้อผิดพลาดในการสุ่มตัวอย่าง

หากต้องการทำความเข้าใจแนวคิดของความแปรปรวนภายในกลุ่มด้วยภาพ โปรดดูกราฟด้านล่าง

ส่วนด้านซ้ายแสดงการกระจายของกลุ่มที่แตกต่างกันสามกลุ่ม คุณเพิ่มการแพร่กระจายของแต่ละตัวอย่าง และเห็นได้ชัดว่าความแปรปรวนแต่ละรายการมีมาก การทดสอบ F จะลดลง ซึ่งหมายความว่าคุณมีแนวโน้มที่จะยอมรับสมมติฐานว่าง

ส่วนด้านขวาแสดงตัวอย่างเดียวกันทุกประการ (ค่าเฉลี่ยเหมือนกัน) แต่มีความแปรปรวนต่ำกว่า มันนำไปสู่การเพิ่มขึ้นของการทดสอบ F และมีแนวโน้มที่จะสนับสนุนสมมติฐานทางเลือก

ตีความการทดสอบ ANOVA

คุณสามารถใช้ทั้งสองมาตรการเพื่อสร้างสถิติ F การเข้าใจสถิติ F เป็นเรื่องง่ายมาก ถ้าตัวเศษเพิ่มขึ้น แสดงว่ามีความแปรปรวนระหว่างกลุ่มอยู่ในระดับสูง และมีแนวโน้มว่ากลุ่มในกลุ่มตัวอย่างจะมาจากการกระจายตัวที่ต่างกันโดยสิ้นเชิง

กล่าวอีกนัยหนึ่ง สถิติ F ที่ต่ำบ่งชี้ถึงความแตกต่างที่มีนัยสำคัญระหว่างค่าเฉลี่ยของกลุ่มเพียงเล็กน้อยหรือไม่มีเลย

ตัวอย่างการทดสอบ ANOVA แบบทางเดียว

คุณจะใช้ชุดข้อมูลพิษเพื่อดำเนินการทดสอบ ANOVA แบบทางเดียว ชุดข้อมูลประกอบด้วย 48 แถวและ 3 ตัวแปร:

  • เวลา: เวลาการอยู่รอดของสัตว์
  • ยาพิษ: ประเภทของยาพิษที่ใช้: ระดับปัจจัย: 1,2 และ 3
  • รักษา: ประเภทของการรักษาที่ใช้: ระดับปัจจัย: 1,2 และ 3

ก่อนที่คุณจะเริ่มคำนวณการทดสอบ ANOVA คุณต้องเตรียมข้อมูลดังต่อไปนี้:

  • ขั้นตอนที่ 1: นำเข้าข้อมูล
  • ขั้นตอนที่ 2: ลบตัวแปรที่ไม่จำเป็นออก
  • ขั้นตอนที่ 3: แปลงพิษแปรผันตามระดับที่สั่ง
library(dplyr)
PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/poisons.csv"
df <- read.csv(PATH) %>%
select(-X) %>% 
mutate(poison = factor(poison, ordered = TRUE))
glimpse(df)

Output:

## Observations: 48
## Variables: 3
## $ time   <dbl> 0.31, 0.45, 0.46, 0.43, 0.36, 0.29, 0.40, 0.23, 0.22, 0...
## $ poison <ord> 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2...
## $ treat  <fctr> A, A, A, A, A, A, A, A, A, A, A, A, B, B, B, B, B, B, ...		

วัตถุประสงค์ของเราคือการทดสอบสมมติฐานต่อไปนี้:

  • H0: ระยะเวลาการรอดชีวิตโดยเฉลี่ยระหว่างกลุ่มไม่มีความแตกต่าง
  • H3: ระยะเวลาการรอดชีวิตโดยเฉลี่ยจะแตกต่างกันสำหรับกลุ่มอย่างน้อยหนึ่งกลุ่ม

กล่าวอีกนัยหนึ่ง คุณต้องการทราบว่ามีความแตกต่างทางสถิติระหว่างค่าเฉลี่ยของเวลารอดชีวิตตามชนิดของพิษที่ให้กับหนูตะเภาหรือไม่

คุณจะดำเนินการดังต่อไปนี้:

  • ขั้นตอนที่ 1: ตรวจสอบรูปแบบของพิษที่แปรผัน
  • ขั้นตอนที่ 2: พิมพ์สถิติสรุป: การนับ ค่าเฉลี่ย และส่วนเบี่ยงเบนมาตรฐาน
  • ขั้นตอนที่ 3: พล็อตกล่อง
  • ขั้นตอนที่ 4: คำนวณการทดสอบ ANOVA แบบทางเดียว
  • ขั้นตอนที่ 5: เรียกใช้การทดสอบ t แบบคู่กัน

ขั้นตอน 1) คุณสามารถตรวจสอบระดับของพิษได้จากรหัสต่อไปนี้ คุณควรจะเห็นค่าอักขระสามตัวเนื่องจากคุณแปลงค่าเหล่านี้เป็นปัจจัยด้วยคำกริยากลายพันธุ์

levels(df$poison)

Output:

## [1] "1" "2" "3"

ขั้นตอน 2) คุณคำนวณค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐาน

df % > %
	group_by(poison) % > %
	summarise(
		count_poison = n(),
		mean_time = mean(time, na.rm = TRUE),
		sd_time = sd(time, na.rm = TRUE)
	)

Output:

## 
# A tibble: 3 x 4
##   poison count_poison mean_time    sd_time
##    <ord>        <int>     <dbl>      <dbl>
## 1      1           16  0.617500 0.20942779
## 2      2           16  0.544375 0.28936641
## 3      3           16  0.276250 0.06227627

ขั้นตอน 3) ในขั้นตอนที่ 3 คุณสามารถตรวจสอบได้อย่างชัดเจนว่ามีความแตกต่างระหว่างการแจกแจงหรือไม่ โปรดทราบว่าคุณรวมจุดกระวนกระวายใจด้วย

ggplot(df, aes(x = poison, y = time, fill = poison)) +
    geom_boxplot() +
    geom_jitter(shape = 15,
        color = "steelblue",
        position = position_jitter(0.21)) +
    theme_classic()

Output:

ตัวอย่างการทดสอบ ANOVA แบบทางเดียว

ขั้นตอน 4) คุณสามารถรันการทดสอบ ANOVA แบบทางเดียวด้วยคำสั่ง aov รูปแบบพื้นฐานสำหรับการทดสอบ ANOVA คือ:

aov(formula, data)
Arguments:			
- formula: The equation you want to estimate
- data: The dataset used	

ไวยากรณ์ของสูตรคือ:

y ~ X1+ X2+...+Xn # X1 +  X2 +... refers to the independent variables
y ~ . # use all the remaining variables as independent variables

คุณสามารถตอบคำถามของเราได้ว่า มีข้อแตกต่างใดๆ ในช่วงเวลาการอยู่รอดระหว่างหนูตะเภาที่รู้ชนิดของยาพิษที่ได้รับหรือไม่

โปรดทราบว่า ขอแนะนำให้จัดเก็บโมเดลและใช้ฟังก์ชัน summary() เพื่อให้สามารถพิมพ์ผลลัพธ์ได้ดีขึ้น

anova_one_way <- aov(time~poison, data = df)
summary(anova_one_way)

คำอธิบายรหัส

  • aov(time ~ poison, data = df): รันการทดสอบ ANOVA ด้วยสูตรต่อไปนี้
  • summary(anova_one_way): พิมพ์สรุปผลการทดสอบ

Output:

##             Df Sum Sq Mean Sq F value   Pr(>F)
## poison       2  1.033  0.5165   11.79 7.66e-05 ***
## Residuals   45  1.972  0.0438                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

ค่า p ต่ำกว่าเกณฑ์ปกติที่ 0.05 คุณมั่นใจที่จะกล่าวว่ามีความแตกต่างทางสถิติระหว่างกลุ่มต่างๆ ที่ระบุด้วยเครื่องหมาย “*”

การเปรียบเทียบแบบคู่

การทดสอบ ANOVA แบบทางเดียวไม่ได้แจ้งว่ากลุ่มใดมีค่าเฉลี่ยต่างกัน คุณสามารถทำการทดสอบ Tukey ด้วยฟังก์ชัน TukeyHSD() แทนได้

TukeyHSD(anova_one_way)

Output:

การเปรียบเทียบแบบคู่

ความแปรปรวนสองทาง

การทดสอบ ANOVA แบบสองทางจะเพิ่มตัวแปรกลุ่มอีกตัวหนึ่งลงในสูตร ซึ่งเหมือนกับการทดสอบ ANOVA แบบทางเดียวทุกประการ ถึงแม้ว่าสูตรจะเปลี่ยนแปลงเล็กน้อยก็ตาม:

y=x1+x2

with คือตัวแปรเชิงปริมาณ และ และ เป็นตัวแปรเชิงหมวดหมู่

สมมติฐานในการทดสอบ ANOVA สองทาง

  • H0: ค่าเฉลี่ยของตัวแปรทั้งสองมีค่าเท่ากัน (เช่น ตัวแปรตัวประกอบ)
  • H3: ค่าเฉลี่ยของตัวแปรทั้งสองต่างกัน

คุณเพิ่มตัวแปรการรักษาให้กับโมเดลของเรา ตัวแปรนี้บ่งบอกถึงการรักษาที่ให้กับหนูตะเภา คุณสนใจที่จะดูว่ามีการพึ่งพาทางสถิติระหว่างพิษและการรักษาที่ให้กับหนูตะเภาหรือไม่

เราปรับโค้ดของเราโดยการเพิ่มการปฏิบัติกับตัวแปรอิสระอื่นๆ

anova_two_way <- aov(time~poison + treat, data = df)
summary(anova_two_way)

Output:

##             Df Sum Sq Mean Sq F value  Pr(>F)    
## poison       2 1.0330  0.5165   20.64 5.7e-07 ***
## treat        3 0.9212  0.3071   12.27 6.7e-06 ***
## Residuals   42 1.0509  0.0250                    
## ---

คุณสามารถสรุปได้ว่าทั้งพิษและการรักษามีความแตกต่างกันทางสถิติจาก 0 คุณสามารถปฏิเสธสมมติฐาน NULL และยืนยันว่าการเปลี่ยนแปลงการรักษาหรือพิษส่งผลต่อระยะเวลาการอยู่รอด

สรุป

เราสามารถสรุปผลการทดสอบได้ตามตารางด้านล่างนี้:

เอกสาร รหัส สมมติฐาน ค่า P
การวิเคราะห์ทางสถิติแบบทางเดียว
aov(y ~ X, data = df)
H3: ค่าเฉลี่ยแตกต่างกันสำหรับกลุ่มอย่างน้อยหนึ่งกลุ่ม 0.05
จับคู่
TukeyHSD(ANOVA summary)
0.05
การวิเคราะห์ทางสถิติแบบสองทาง
aov(y ~ X1 + X2, data = df)
H3: ค่าเฉลี่ยแตกต่างกันสำหรับทั้งสองกลุ่ม 0.05