วิธีดำเนินการวิเคราะห์ความแปรปรวนแบบทางเดียวใน r


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

การทดสอบประเภทนี้เรียกว่าการวิเคราะห์ความแปรปรวน แบบทางเดียว เนื่องจากเราวิเคราะห์ผลกระทบ ของ ตัวแปรทำนายต่อตัวแปรตอบสนอง

หมายเหตุ : หากเราสนใจผลกระทบของตัวแปรทำนายสองตัวที่มีต่อตัวแปรตอบสนองแทน เราก็สามารถดำเนิน การวิเคราะห์ความแปรปรวนแบบสองทางได้

วิธีดำเนินการวิเคราะห์ความแปรปรวนแบบทางเดียวใน R

ตัวอย่างต่อไปนี้แสดงวิธีการดำเนินการวิเคราะห์ความแปรปรวนแบบทางเดียวใน R

พื้นหลัง

สมมติว่าเราต้องการพิจารณาว่าโปรแกรมการออกกำลังกายสามโปรแกรมที่แตกต่างกันมีผลกระทบต่อการลดน้ำหนักที่แตกต่างกันหรือไม่ ตัวแปรทำนายที่เราศึกษาคือ โปรแกรมการออกกำลังกาย และ ตัวแปรตอบสนอง คือ การลดน้ำหนัก วัดเป็นปอนด์

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

เรารับสมัครคน 90 คนเพื่อเข้าร่วมในการทดลอง โดยสุ่มให้คน 30 คนติดตามโปรแกรม A โปรแกรม B หรือโปรแกรม C เป็นเวลาหนึ่งเดือน

รหัสต่อไปนี้จะสร้าง data frame ที่เราจะใช้งานด้วย:

 #make this example reproducible
set.seed(0)

#create data frame
data <- data.frame(program = rep(c("A", "B", "C"), each = 30),
                   weight_loss = c(runif(30, 0, 3),
                                   runif(30, 0, 5),
                                   runif(30, 1, 7)))

#view first six rows of data frame
head(data)

# program weight_loss
#1 A 2.6900916
#2 A 0.7965260
#3 A 1.1163717
#4 A 1.7185601
#5 A 2.7246234
#6 A 0.6050458

คอลัมน์แรกของกรอบข้อมูลแสดงโปรแกรมที่บุคคลนั้นเข้าร่วมเป็นเวลาหนึ่งเดือน และคอลัมน์ที่สองแสดงการลดน้ำหนักรวมของบุคคลนั้นเมื่อสิ้นสุดโปรแกรม โดยวัดเป็นหน่วยปอนด์

สำรวจข้อมูล

ก่อนที่จะปรับแบบจำลองการวิเคราะห์ความแปรปรวนแบบทางเดียว เราสามารถเข้าใจข้อมูลได้ดีขึ้นโดยการค้นหาค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานของการลดน้ำหนักสำหรับแต่ละโปรแกรมจากสามโปรแกรมโดยใช้แพ็คเกจ dplyr :

 #load dplyr package
library (dplyr)

#find mean and standard deviation of weight loss for each treatment group
data %>%
  group_by (program) %>%
  summarize (mean = mean(weight_loss),
            sd = sd(weight_loss))

# A tibble: 3 x 3
# program mean sd
#      
#1 A 1.58 0.905
#2 B 2.56 1.24 
#3 C 4.13 1.57  

นอกจากนี้เรายังสามารถสร้าง boxplot สำหรับแต่ละโปรแกรมจากทั้งสามโปรแกรมเพื่อให้เห็นภาพการกระจายตัวของการลดน้ำหนักสำหรับแต่ละโปรแกรม:

 #create boxplots
boxplot(weight_loss ~ program,
data = data,
main = "Weight Loss Distribution by Program",
xlab = "Program",
ylab = "Weight Loss",
col = "steelblue",
border = "black")

จากแผนภาพกล่องเหล่านี้ เราจะเห็นว่าการลดน้ำหนักโดยเฉลี่ยจะสูงที่สุดสำหรับผู้เข้าร่วมในโปรแกรม C และการลดน้ำหนักโดยเฉลี่ยจะต่ำที่สุดสำหรับผู้เข้าร่วมในโปรแกรม A

เรายังเห็นอีกว่าค่าเบี่ยงเบนมาตรฐาน (“ความยาว” ของ boxplot) สำหรับการลดน้ำหนักนั้นสูงกว่าเล็กน้อยในโปรแกรม C เมื่อเทียบกับอีกสองโปรแกรม

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

การปรับโมเดล ANOVA แบบทางเดียว

ไวยากรณ์ทั่วไปสำหรับการปรับโมเดล ANOVA แบบทางเดียวให้เหมาะสมใน R คือ:

aov (ตัวแปรการตอบสนอง ~ Predictor_variable, Data = ชุดข้อมูล)

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

 #fit the one-way ANOVA model
model <- aov(weight_loss ~ program, data = data)

#view the model output
summary(model)

# Df Sum Sq Mean Sq F value Pr(>F)    
#program 2 98.93 49.46 30.83 7.55e-11 ***
#Residuals 87 139.57 1.60                     
#---
#Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

จากผลลัพธ์ของแบบจำลอง เราจะเห็นว่า โปรแกรม ตัวแปรทำนายมีนัยสำคัญทางสถิติที่ระดับนัยสำคัญ 0.05

กล่าวอีกนัยหนึ่ง มีความแตกต่างที่มีนัยสำคัญทางสถิติระหว่างการลดน้ำหนักโดยเฉลี่ยที่เกิดจากทั้งสามโปรแกรม

การตรวจสอบสมมติฐานแบบจำลอง

ก่อนที่เราจะไปไกลกว่านั้น เราต้องตรวจสอบว่าเป็นไปตาม สมมติฐาน ของแบบจำลองของเรา เพื่อให้ผลลัพธ์ของแบบจำลองของเราเชื่อถือได้ โดยเฉพาะอย่างยิ่งการวิเคราะห์ความแปรปรวนแบบทางเดียวจะถือว่า:

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

2. ความปกติ – ตัวแปรตามควรมีการแจกแจงแบบปกติโดยประมาณสำหรับตัวแปรทำนายแต่ละระดับ

3. ความแปรปรวนที่เท่ากัน – ความแปรปรวนสำหรับแต่ละกลุ่มจะเท่ากันหรือเท่ากันโดยประมาณ

วิธีหนึ่งในการตรวจสอบสมมติฐานของ ความเป็นปกติ และ ความแปรปรวนที่เท่ากัน คือการใช้ฟังก์ชัน plot() ซึ่งสร้างพล็อตการตรวจสอบแบบจำลองสี่แผน โดยเฉพาะอย่างยิ่งเราสนใจเป็นพิเศษในสองแปลงต่อไปนี้:

  • สารตกค้างเทียบกับ ติดตั้งแล้ว – กราฟนี้แสดงความสัมพันธ์ระหว่างค่าคงเหลือและค่าติดตั้ง เราสามารถใช้กราฟนี้เพื่อประเมินคร่าวๆ ว่าความแปรปรวนระหว่างกลุ่มมีค่าเท่ากันโดยประมาณหรือไม่
  • พล็อต QQ – พล็อตนี้แสดงปริมาณคงเหลือที่เป็นมาตรฐานเทียบกับควอนไทล์ทางทฤษฎี เราสามารถใช้กราฟนี้เพื่อประเมินคร่าวๆ ว่าเป็นไปตามสมมติฐานปกติหรือไม่

รหัสต่อไปนี้สามารถใช้เพื่อสร้างแผนการตรวจสอบแบบจำลองเหล่านี้:

 plot(model)

กราฟ QQ ด้านบนช่วยให้เราสามารถตรวจสอบสมมติฐานภาวะปกติได้ ตามหลักการแล้ว ส่วนที่เหลือที่ได้มาตรฐานจะวางตามแนวเส้นทแยงมุมของแปลง อย่างไรก็ตาม ในกราฟด้านบน เราจะเห็นว่าส่วนที่เหลือเบี่ยงเบนไปเล็กน้อยจากเส้นตรงไปยังจุดเริ่มต้นและจุดสิ้นสุด สิ่งนี้บ่งชี้ว่าสมมติฐานปกติของเราอาจถูกละเมิด

สารตกค้างเทียบกับ กราฟที่ปรับ ด้านบนช่วยให้เราตรวจสอบสมมติฐานของความแปรปรวนที่เท่ากันได้ ตามหลักการแล้ว เราต้องการให้แบ่งส่วนที่เหลือเท่าๆ กันสำหรับค่าที่ติดตั้งแต่ละระดับ

เราจะเห็นได้ว่าส่วนที่เหลือจะกระจายออกไปมากขึ้นสำหรับค่าที่ติดตั้งที่สูงกว่า ซึ่งบ่งชี้ว่า สมมติฐานของเราเกี่ยวกับความเท่าเทียมกันของความแปรปรวน อาจถูกละเมิด

เพื่อทดสอบความแปรปรวนที่เท่ากันอย่างเป็นทางการ เราสามารถทำการทดสอบ Levene โดยใช้แพ็คเกจ รถยนต์ :

 #load car package
library (car)

#conduct Levene's Test for equality of variances
leveneTest(weight_loss ~ program, data = data)

#Levene's Test for Homogeneity of Variance (center = median)
# Df F value Pr(>F)  
#group 2 4.1716 0.01862 *
#87                  
#---
#Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

ค่า p ของการทดสอบคือ 0.01862 หากเราใช้ระดับนัยสำคัญที่ 0.05 เราจะปฏิเสธสมมติฐานว่างที่ว่าความแปรปรวนเท่ากันในทั้งสามโปรแกรม อย่างไรก็ตาม หากเราใช้ระดับนัยสำคัญที่ 0.01 เราจะไม่ปฏิเสธสมมติฐานว่าง

แม้ว่าเราจะพยายามแปลงข้อมูลเพื่อให้แน่ใจว่าเป็นไปตามสมมติฐานของเราในเรื่องความปกติและความเท่าเทียมกันของความแปรปรวน แต่ตอนนี้เราจะไม่กังวลมากเกินไปเกี่ยวกับเรื่องนี้

วิเคราะห์ความแตกต่างในการรักษา

เมื่อเราตรวจสอบแล้วว่าเป็นไปตามสมมติฐานของแบบจำลอง (หรือเป็นไปตามที่สมเหตุสมผล) เราก็สามารถทำการ ทดสอบหลังการทดสอบ เพื่อระบุได้อย่างแน่ชัดว่ากลุ่มการรักษาใดที่แตกต่างกัน

สำหรับการทดสอบหลังการทดสอบ เราจะใช้ฟังก์ชัน TukeyHSD() เพื่อทำการทดสอบ Tukey สำหรับการเปรียบเทียบหลายรายการ:

 #perform Tukey's Test for multiple comparisons
TukeyHSD(model, conf.level=.95) 

#Tukey multiple comparisons of means
# 95% family-wise confidence level
#
#Fit: aov(formula = weight_loss ~ program, data = data)
#
#$program
# diff lwr upr p adj
#BA 0.9777414 0.1979466 1.757536 0.0100545
#CA 2.5454024 1.7656076 3.325197 0.0000000
#CB 1.5676610 0.7878662 2.347456 0.0000199

ค่า p บ่งชี้ว่าแต่ละโปรแกรมมีความแตกต่างที่มีนัยสำคัญทางสถิติหรือไม่ ผลการวิจัยพบว่าการลดน้ำหนักเฉลี่ยของแต่ละโปรแกรมมีความแตกต่างกันอย่างมีนัยสำคัญทางสถิติที่ระดับนัยสำคัญ 0.05

นอกจากนี้เรายังสามารถเห็นภาพช่วงความเชื่อมั่น 95% ที่เกิดจากการทดสอบ Tukey โดยใช้ฟังก์ชัน plot(TukeyHSD()) ใน R:

 #create confidence interval for each comparison
plot(TukeyHSD(model, conf.level=.95), las = 2)

ผลลัพธ์ของช่วงความเชื่อมั่นสอดคล้องกับผลลัพธ์ของการทดสอบสมมติฐาน

โดยเฉพาะอย่างยิ่ง เราจะเห็นว่าไม่มีช่วงความเชื่อมั่นสำหรับการลดน้ำหนักโดยเฉลี่ยระหว่างโปรแกรมที่มีค่า เป็นศูนย์ ซึ่งบ่งชี้ว่ามีความแตกต่างที่มีนัยสำคัญทางสถิติในการสูญเสียน้ำหนักเฉลี่ยระหว่างทั้งสามโปรแกรม

ซึ่งสอดคล้องกับ ค่า p ทั้งหมดสำหรับ การทดสอบสมมติฐาน ของเราที่น้อยกว่า 0.05

การรายงานผลลัพธ์การวิเคราะห์ความแปรปรวนแบบทางเดียว

สุดท้ายนี้ เราสามารถรายงานผลลัพธ์ของการวิเคราะห์ความแปรปรวนแบบทางเดียวในลักษณะที่สรุปผลลัพธ์ได้:

ทำการวิเคราะห์ความแปรปรวนแบบทางเดียวเพื่อตรวจสอบผลกระทบของโปรแกรมการออกกำลังกาย   เกี่ยวกับการลดน้ำหนัก (วัดเป็นปอนด์) มีความแตกต่างที่มีนัยสำคัญทางสถิติระหว่างผลกระทบของทั้งสามโปรแกรมต่อการลดน้ำหนัก (F(2, 87) = 30.83, p = 7.55e-11) ทำการทดสอบ HSD ของ Post-hoc Tukey

การลดน้ำหนักโดยเฉลี่ยของผู้เข้าร่วมโปรแกรม C มากกว่าการลดน้ำหนักเฉลี่ยของผู้เข้าร่วมโปรแกรม B อย่างมีนัยสำคัญ (p < 0.0001)

การลดน้ำหนักโดยเฉลี่ยของผู้เข้าร่วมโปรแกรม C มากกว่าการลดน้ำหนักเฉลี่ยของผู้เข้าร่วมโปรแกรม A อย่างมีนัยสำคัญ (p < 0.0001)

นอกจากนี้ การลดน้ำหนักโดยเฉลี่ยของผู้เข้าร่วมโปรแกรม B ยังมากกว่าการลดน้ำหนักเฉลี่ยของผู้เข้าร่วมโปรแกรม A อย่างมีนัยสำคัญ (p = 0.01)

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้ให้ข้อมูลเพิ่มเติมเกี่ยวกับการวิเคราะห์ความแปรปรวนแบบทางเดียว:

ข้อมูลเบื้องต้นเกี่ยวกับการวิเคราะห์ความแปรปรวนแบบทางเดียว
คู่มือการใช้การทดสอบหลังการทดลองด้วย ANOVA
คู่มือฉบับสมบูรณ์: วิธีรายงานผลลัพธ์ ANOVA

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

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