आर में दो-तरफा एनोवा कैसे निष्पादित करें
दो-तरफा एनोवा (“विचरण का विश्लेषण”) का उपयोग यह निर्धारित करने के लिए किया जाता है कि दो कारकों में विभाजित तीन या अधिक स्वतंत्र समूहों के साधनों के बीच सांख्यिकीय रूप से महत्वपूर्ण अंतर है या नहीं।
यह ट्यूटोरियल बताता है कि आर में दो-तरफ़ा एनोवा कैसे निष्पादित करें।
उदाहरण: आर में दो-तरफा एनोवा
मान लीजिए कि हम यह निर्धारित करना चाहते हैं कि क्या व्यायाम की तीव्रता और लिंग वजन घटाने पर प्रभाव डालते हैं। इस मामले में, हम जिन दो कारकों को देख रहे हैं वे व्यायाम और लिंग हैं, और प्रतिक्रिया चर वजन घटाना है, जिसे पाउंड में मापा जाता है।
हम यह निर्धारित करने के लिए दो-तरफ़ा एनोवा का प्रदर्शन कर सकते हैं कि क्या व्यायाम और लिंग वजन घटाने पर प्रभाव डालते हैं और यह निर्धारित करने के लिए कि क्या वजन घटाने पर व्यायाम और लिंग के बीच कोई परस्पर क्रिया है।
हम एक प्रयोग में भाग लेने के लिए 30 पुरुषों और 30 महिलाओं की भर्ती कर रहे हैं, जिसमें हम बेतरतीब ढंग से प्रत्येक में से 10 को एक महीने के लिए बिना व्यायाम, हल्के व्यायाम या गहन व्यायाम कार्यक्रम का पालन करने के लिए नियुक्त करते हैं।
निम्नलिखित कोड वह डेटा फ़्रेम बनाता है जिसके साथ हम काम करेंगे:
#make this example reproducible set.seed(10) #create data frame data <- data.frame(gender = rep(c("Male", "Female"), each = 30), exercise = rep(c("None", "Light", "Intense"), each = 10, times = 2), weight_loss = c(runif(10, -3, 3), runif(10, 0, 5), runif(10, 5, 9), runif(10, -4, 2), runif(10, 0, 3), runif(10, 3, 8))) #view first six rows of data frame head(data) # gender exercise weight_loss #1 Male None 0.04486922 #2 Male None -1.15938896 #3 Male None -0.43855400 #4 Male None 1.15861249 #5 Male None -2.48918419 #6 Male None -1.64738030 #see how many participants are in each group table(data$gender, data$exercise) # Intense Light None # Female 10 10 10 # Male 10 10 10
डेटा का अन्वेषण करें
दो-तरफा एनोवा मॉडल को फिट करने से पहले, हम dplyr पैकेज का उपयोग करके छह उपचार समूहों में से प्रत्येक के लिए वजन घटाने का माध्य और मानक विचलन ढूंढकर डेटा को बेहतर ढंग से समझ सकते हैं:
#load dplyr package library(dplyr) #find mean and standard deviation of weight loss for each treatment group data %>% group_by (gender, exercise) %>% summarize (mean = mean(weight_loss), sd = sd(weight_loss)) # A tibble: 6 x 4 # Groups: gender [2] # gender exercise means sd # #1 Female Intense 5.31 1.02 #2 Female Light 0.920 0.835 #3 Female None -0.501 1.77 #4 Male Intense 7.37 0.928 #5 Male Light 2.13 1.22 #6 Male None -0.698 1.12
हम प्रत्येक समूह के लिए वजन घटाने के वितरण की कल्पना करने के लिए छह उपचार समूहों में से प्रत्येक के लिए एक बॉक्सप्लॉट भी बना सकते हैं:
#set margins so that axis labels on boxplot don't get cut off by(mar=c(8, 4.1, 4.1, 2.1)) #create boxplots boxplot(weight_loss ~ gender:exercise, data = data, main = "Weight Loss Distribution by Group", xlab = "Group", ylab = "Weight Loss", col = "steelblue", border = "black", las = 2 #make x-axis labels perpendicular )
हम तुरंत देख सकते हैं कि गहन व्यायाम में भाग लेने वाले दो समूहों में वजन घटाने के मूल्य अधिक प्रतीत होते हैं। हम यह भी देख सकते हैं कि तीव्र और हल्के व्यायाम दोनों समूहों में महिलाओं की तुलना में पुरुषों में वजन घटाने का मूल्य अधिक होता है।
इसके बाद, हम यह देखने के लिए अपने डेटा में दो-तरफ़ा एनोवा मॉडल फिट करेंगे कि क्या ये दृश्य अंतर वास्तव में सांख्यिकीय रूप से महत्वपूर्ण हैं।
दो-तरफा एनोवा मॉडल फिट करना
आर में दो-तरफ़ा एनोवा मॉडल को फ़िट करने का सामान्य सिंटैक्स है:
aov(प्रतिक्रिया चर ~predictor_variable1 *predictor_variable2, डेटा = डेटासेट)
ध्यान दें कि दो भविष्यवक्ता चरों के बीच * इंगित करता है कि हम दो भविष्यवक्ता चरों के बीच अंतःक्रिया प्रभाव का परीक्षण भी करना चाहते हैं।
हमारे उदाहरण में, हम दो-तरफा एनोवा मॉडल को फिट करने के लिए निम्नलिखित कोड का उपयोग कर सकते हैं, प्रतिक्रिया चर के रूप में वेट_लॉस और दो भविष्यवक्ता चर के रूप में लिंग और व्यायाम का उपयोग कर सकते हैं।
फिर हम अपने मॉडल का परिणाम प्रदर्शित करने के लिए सारांश() फ़ंक्शन का उपयोग कर सकते हैं:
#fit the two-way ANOVA model model <- aov(weight_loss ~ gender * exercise, data = data) #view the model output summary(model) # Df Sum Sq Mean Sq F value Pr(>F) #gender 1 15.8 15.80 11.197 0.0015 ** #exercise 2 505.6 252.78 179.087 <2e-16 *** #gender:exercise 2 13.0 6.51 4.615 0.0141 * #Residuals 54 76.2 1.41 #--- #Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
मॉडल परिणामों से, हम देख सकते हैं कि लिंग , व्यायाम और दो चर के बीच की बातचीत सभी 0.05 महत्व स्तर पर सांख्यिकीय रूप से महत्वपूर्ण हैं।
मॉडल मान्यताओं की जाँच करना
इससे पहले कि हम आगे बढ़ें, हमें यह सत्यापित करना होगा कि हमारे मॉडल की धारणाएँ पूरी हुई हैं ताकि हमारे मॉडल के परिणाम विश्वसनीय हों। विशेष रूप से, दो-तरफा एनोवा मानता है:
1. स्वतंत्रता – प्रत्येक समूह के अवलोकन एक दूसरे से स्वतंत्र होने चाहिए। चूँकि हमने एक यादृच्छिक डिज़ाइन का उपयोग किया है , इसलिए यह धारणा पूरी होनी चाहिए, इसलिए हमें इसके बारे में बहुत अधिक चिंता करने की ज़रूरत नहीं है।
2. सामान्यता – आश्रित चर में दो कारकों के समूहों के प्रत्येक संयोजन के लिए लगभग सामान्य वितरण होना चाहिए।
इस धारणा का परीक्षण करने का एक तरीका मॉडल अवशेषों का एक हिस्टोग्राम बनाना है। यदि अवशेष लगभग सामान्य रूप से वितरित हैं, तो यह धारणा संतुष्ट होनी चाहिए।
#define model residuals reside <- model$residuals #create histogram of residuals hist(resid, main = "Histogram of Residuals", xlab = "Residuals", col = "steelblue")
अवशेष लगभग सामान्य रूप से वितरित होते हैं, इसलिए हम मान सकते हैं कि सामान्यता की धारणा पूरी हो गई है।
3. समान प्रसरण – प्रत्येक समूह के लिए प्रसरण समान या लगभग बराबर हैं।
इस धारणा की जांच करने का एक तरीका कार पैकेज का उपयोग करके भिन्नताओं की समानता के लिए लेवेने परीक्षण करना है:
#load car package library(car) #conduct Levene's Test for equality of variances leveneTest(weight_loss ~ gender * exercise, data = data) #Levene's Test for Homogeneity of Variance (center = median) # Df F value Pr(>F) #group 5 1.8547 0.1177 #54
चूँकि परीक्षण का पी-मान हमारे महत्व स्तर 0.05 से अधिक है, हम मान सकते हैं कि समूहों के बीच भिन्नताओं की समानता की हमारी धारणा पूरी हुई है।
उपचार के अंतरों का विश्लेषण करें
एक बार जब हम सत्यापित कर लेते हैं कि मॉडल धारणाएँ पूरी हो गई हैं, तो हम यह निर्धारित करने के लिए पोस्ट हॉक परीक्षण कर सकते हैं कि कौन से उपचार समूह एक दूसरे से भिन्न हैं।
हमारे पोस्ट हॉक परीक्षण के लिए, हम कई तुलनाओं के लिए तुकी परीक्षण करने के लिए TukeyHSD() फ़ंक्शन का उपयोग करेंगे:
#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 ~ gender * exercise, data = data)
#
#$gender
# diff lwr upr p adj
#Male-Female 1.026456 0.4114451 1.641467 0.0014967
#
#$exercise
# diff lwr upr p adj
#Light-Intense -4.813064 -5.718493 -3.907635 0.0e+00
#None-Intense -6.938966 -7.844395 -6.033537 0.0e+00
#None-Light -2.125902 -3.031331 -1.220473 1.8e-06
#
#$`gender:exercise`
# diff lwr upr p adj
#Male:Intense-Female:Intense 2.0628297 0.4930588 3.63260067 0.0036746
#Female:Light-Female:Intense -4.3883563 -5.9581272 -2.81858535 0.0000000
#Male:Light-Female:Intense -3.1749419 -4.7447128 -1.60517092 0.0000027
#Female:None-Female:Intense -5.8091131 -7.3788841 -4.23934219 0.0000000
#Male:None-Female:Intense -6.0059891 -7.5757600 -4.43621813 0.0000000
#Female:Light-Male:Intense -6.4511860 -8.0209570 -4.88141508 0.0000000
#Male:Light-Male:Intense -5.2377716 -6.8075425 -3.66800066 0.0000000
#Female:None-Male:Intense -7.8719429 -9.4417138 -6.30217192 0.0000000
#Male:None-Male:Intense -8.0688188 -9.6385897 -6.49904786 0.0000000
#Male:Light-Female:Light 1.2134144 -0.3563565 2.78318536 0.2185439
#Female:None-Female:Light -1.4207568 -2.9905278 0.14901410 0.0974193
#Male:None-Female:Light -1.6176328 -3.1874037 -0.04786184 0.0398106
#Female:None-Male:Light -2.6341713 -4.2039422 -1.06440032 0.0001050
#Male:None-Male:Light -2.8310472 -4.4008181 -1.26127627 0.0000284
#Male:None-Female:None -0.1968759 -1.7666469 1.37289500 0.9990364
पी-वैल्यू इंगित करता है कि प्रत्येक समूह के बीच सांख्यिकीय रूप से महत्वपूर्ण अंतर है या नहीं।
उदाहरण के लिए, उपरोक्त अंतिम पंक्ति में, हम देखते हैं कि व्यायाम न करने वाले पुरुषों के समूह ने महिलाओं के व्यायाम न करने वाले समूह की तुलना में वजन घटाने में सांख्यिकीय रूप से महत्वपूर्ण अंतर का अनुभव नहीं किया (पी-मान: 0.990364)।
हम आर में प्लॉट() फ़ंक्शन का उपयोग करके टुकी परीक्षण के परिणामस्वरूप 95% विश्वास अंतराल की कल्पना भी कर सकते हैं:
#set axis margins so labels don't get cut off by(mar=c(4.1, 13, 4.1, 2.1)) #create confidence interval for each comparison plot(TukeyHSD(model, conf.level=.95), las = 2)
दो-तरफा एनोवा परिणामों की रिपोर्टिंग
अंत में, हम दो-तरफा एनोवा के परिणामों को इस तरह से रिपोर्ट कर सकते हैं जो परिणामों को सारांशित करता है:
वजन घटाने (पाउंड में मापा गया) पर लिंग ( पुरुष, महिला) और व्यायाम कार्यक्रम (कोई नहीं, हल्का, तीव्र) के प्रभावों की जांच करने के लिए दो-तरफा एनोवा का प्रदर्शन किया गया। वजन घटाने पर लिंग और व्यायाम के प्रभाव के बीच सांख्यिकीय रूप से महत्वपूर्ण बातचीत हुई (एफ(2,54) = 4.615, पी = 0.0141)। पोस्ट-हॉक तुकी के एचएसडी परीक्षण किए गए।
पुरुषों के लिए, एक गहन व्यायाम कार्यक्रम के परिणामस्वरूप हल्के कार्यक्रम (पी <0.0001) या बिना व्यायाम कार्यक्रम (पी <0.0001) की तुलना में काफी अधिक वजन कम हुआ। इसके अतिरिक्त, पुरुषों में, व्यायाम न करने की तुलना में हल्के आहार से वजन में काफी अधिक कमी आई (पी <0.0001)।
महिलाओं के लिए, एक गहन व्यायाम कार्यक्रम के परिणामस्वरूप हल्के कार्यक्रम (पी <0.0001) या बिना व्यायाम कार्यक्रम (पी <0.0001) की तुलना में काफी अधिक वजन कम हुआ।
यह सत्यापित करने के लिए कि एनोवा की धारणाएँ पूरी हुईं, सामान्यता जाँच और लेवेने परीक्षण किया गया।