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