R में ANOVA: एकतरफ़ा और दोतरफ़ा परीक्षण, उदाहरणों सहित
⚡ स्मार्ट सारांश
R में ANOVA तीन या दो से अधिक समूहों के माध्यों की तुलना करता है, जिसमें कुल भिन्नता को अंतर-समूह और भीतर-समूह घटकों में विभाजित किया जाता है। यह विधि ज़हर डेटासेट पर एक-तरफ़ा और दो-तरफ़ा परीक्षण चलाती है, मान्यताओं की जाँच करती है और ट्यूकी HSD का उपयोग करके भिन्न युग्मों को अलग करती है।

एनोवा क्या है?
भिन्नता का विश्लेषण (ANOVA) दो या दो से अधिक समूहों के माध्यों की तुलना करने के लिए उपयोग की जाने वाली एक सांख्यिकीय तकनीक है। यह परीक्षण किसी माप में कुल भिन्नता को समूह सदस्यता द्वारा स्पष्ट किए गए भाग और यादृच्छिक शोर के रूप में बचे हुए भाग में विभाजित करके कार्य करता है। इसलिए, R में ANOVA आपको यह बताता है कि कम से कम एक समूह का माध्य अन्य समूहों से भिन्न है या नहीं, न कि कौन सा। यह एक प्रत्यक्ष विस्तार है। टी परीक्षण उन स्थितियों के लिए जहां कारक चर के दो से अधिक स्तर होते हैं।
टेस्ट चलाने से पहले, यह जानना मददगार होता है कि ANOVA परिवार का कौन सा सदस्य आपके डिजाइन के लिए उपयुक्त है।
R में ANOVA परीक्षणों के प्रकार
"एनोवा" एक एकल प्रक्रिया नहीं बल्कि परीक्षणों का एक समूह है। सही समूह का चयन इस बात पर निर्भर करता है कि आपके पास कितने कारक हैं और डेटा कैसे एकत्र किया गया था।
| टेस्ट | इसका उपयोग कब करें | आर कॉल |
|---|---|---|
| वन-वे एनोवा | एक कारक जिसमें तीन या अधिक स्तर हों | aov(y ~ x, data = df) |
| दो तरफा एनोवा | दो स्वतंत्र कारक | aov(y ~ x1 + x2, data = df) |
| दोतरफा संवाद | एक कारक का प्रभाव दूसरे पर निर्भर करता है | aov(y ~ x1 * x2, data = df) |
| दोहराए गए माप एनोवा | एक ही विषय पर एक से अधिक बार माप लिया गया। | aov(y ~ x + त्रुटि(विषय/x)) |
| एंकोवा | एक सतत सहचर को नियंत्रित किया जाना चाहिए | aov(y ~ x + सहचर, डेटा = df) |
| मनोवा | एक साथ दो या अधिक प्रतिक्रिया चर | manova(cbind(y1, y2) ~ x) |
इस ट्यूटोरियल में पहले तीन विकल्पों को शामिल किया गया है। शेष विकल्प समान aov() इंटरफ़ेस का उपयोग करते हैं, इसलिए एक बार जब आप एक आउटपुट टेबल पढ़ लेते हैं, तो आप सभी को पढ़ सकते हैं।
R में ANOVA बनाम T-टेस्ट: मुख्य अंतर
दोनों परीक्षण औसत की तुलना करते हैं, इसलिए यह स्पष्ट होना महत्वपूर्ण है कि एक परीक्षण दूसरे की जगह कहाँ उपयोग किया जा सकता है।
| मापदंड | टी टेस्ट | एनोवा |
|---|---|---|
| समूहों की संख्या | ठीक दो | दो या दो से ज़्यादा |
| परीक्षण के आंकड़े | t | जब दो समूह होते हैं तो F, t के वर्ग के बराबर होता है। |
| परिणाम | अंतर की दिशा का नाम बताता है | केवल रिपोर्टों में ही अंतर के अस्तित्व का उल्लेख है |
| अनुवर्ती कार्रवाई आवश्यक है | कोई नहीं | पोस्ट हॉक परीक्षण जैसे कि ट्यूकी एचएसडी |
| आर फ़ंक्शन | टी.परीक्षण() | एओवी() |
तीन समूहों के मामले में, तीन अलग-अलग t-परीक्षण करने का प्रलोभन होता है। इससे बचें। प्रत्येक परीक्षण में 5 प्रतिशत त्रुटि दर होती है, इसलिए तीन तुलनाएँ करने से गलत सकारात्मक परिणाम की संभावना लगभग 14 प्रतिशत तक बढ़ जाती है। ANOVA एक ही परीक्षण से इसी प्रश्न का उत्तर देता है, और फिर ट्यूकी HSD त्रुटि दर को नियंत्रण में रखते हुए युग्मवार विवरण को संभालता है। दो-समूह मामले के लिए, देखें टी-टेस्ट ट्यूटोरियल.
वन-वे एनोवा
ऐसी कई स्थितियाँ होती हैं जहाँ आपको कई समूहों के बीच औसत की तुलना करने की ज़रूरत होती है। उदाहरण के लिए, मार्केटिंग विभाग जानना चाहता है कि क्या तीन टीमों का बिक्री प्रदर्शन एक जैसा है।
- टीम: 3 स्तर कारक: ए, बी, और सी
- बिक्री: प्रदर्शन का एक माप
एनोवा परीक्षण से यह पता चल सकता है कि तीनों समूहों का प्रदर्शन समान है या नहीं।
यह स्पष्ट करने के लिए कि क्या डेटा एक ही जनसंख्या से आता है, आप एक परीक्षण कर सकते हैं विचरण का एकतरफा विश्लेषण (इसके बाद इसे एकतरफा एनोवा कहा जाएगा)। किसी भी अन्य सांख्यिकीय परीक्षण की तरह, यह इस बात का प्रमाण देता है कि क्या परिकल्पना H0 को अस्वीकार किया जा सकता है। ध्यान दें कि H0 को अस्वीकार करने में विफल रहना, उसे सत्य सिद्ध करने के समान नहीं है।
एकतरफा एनोवा परीक्षण में परिकल्पना
- H0: समूहों के बीच माध्य समान हैं
- H1: कम से कम, एक समूह का माध्य अलग है
दूसरे शब्दों में, H0 को अस्वीकार करने में विफल रहने का अर्थ है कि यह निष्कर्ष निकालने के लिए पर्याप्त सबूत नहीं हैं कि किसी भी समूह का औसत अन्य समूहों से भिन्न है।
यह परीक्षण टी-परीक्षण के समान है, लेकिन दो से अधिक समूहों के मामले में एनोवा (ANOVA) सही विकल्प है। ठीक दो समूहों के मामले में, दोनों परीक्षण समतुल्य होते हैं और एफ-सांख्यिकी टी-सांख्यिकी के वर्ग के बराबर होती है।
मान्यताओं
वन-वे एनोवा तीन शर्तों पर आधारित है: प्रेक्षणों का यादृच्छिक रूप से नमूना लिया जाना और एक दूसरे से स्वतंत्र होना, प्रत्येक समूह के भीतर अवशिष्टों का लगभग सामान्य वितरण होना, और प्रत्येक समूह में विचरण का समान होना (विचरण की समरूपता)। नीचे दिए गए मान्यता जांच अनुभाग में R में प्रत्येक मान्यता की जांच करने का तरीका बताया गया है।
एनोवा परीक्षण की व्याख्या करें
एफ-सांख्यिकी का प्रयोग यह जांचने के लिए किया जाता है कि क्या आंकड़ें काफी भिन्न जनसंख्याओं से हैं, अर्थात भिन्न नमूना माध्यों से।
एफ-सांख्यिकी की गणना करने के लिए, आपको विभाजित करने की आवश्यकता है समूह के बीच परिवर्तनशीलता ओवर समूह के भीतर परिवर्तनशीलता.
RSI बीच-समूह परिवर्तनशीलता यह दर्शाती है कि प्रत्येक समूह का औसत समग्र औसत से कितना दूर है। इस विचार को समझने के लिए नीचे दिए गए दोनों ग्राफ़ की तुलना करें।
बाएँ ग्राफ में तीनों समूहों के बीच बहुत कम भिन्नता दिखाई देती है, इसलिए तीनों समूहों के औसत लगभग एक समान हैं। कुल मतलब है।
दाहिनी ओर का ग्राफ तीन ऐसे वितरणों को दर्शाता है जो एक दूसरे से काफी दूर हैं और उनमें कोई ओवरलैप नहीं है, इसलिए समग्र माध्य और प्रत्येक समूह के माध्य के बीच का अंतर बड़ा है।
RSI भीतर-समूह परिवर्तनशीलता यह मापती है कि व्यक्तिगत अवलोकन अपने समूह के औसत से कितनी दूरी पर हैं। कुछ बिंदु अपने समूह के औसत से बहुत दूर होते हैं, और समूह के भीतर का पद ठीक उसी फैलाव को दर्शाता है, जिसे नमूना त्रुटि कहते हैं।
समूह के भीतर परिवर्तनशीलता की अवधारणा को दृश्यात्मक रूप से समझने के लिए नीचे दिए गए ग्राफ को देखें।
बाएँ भाग में तीन अलग-अलग समूहों का वितरण दर्शाया गया है। आपने प्रत्येक नमूने का फैलाव बढ़ा दिया है और यह स्पष्ट है कि व्यक्तिगत विचरण अधिक है। F-सांख्यिकी कम हो जाती है, इसलिए आप शून्य परिकल्पना को अस्वीकार करने में विफल रहेंगे।
दाएँ भाग में समान माध्य वाले नमूने दिखाए गए हैं, लेकिन उनका फैलाव काफी कम है। इससे F-सांख्यिकी बढ़ जाती है और वैकल्पिक परिकल्पना के पक्ष में संकेत मिलता है।
आप F-सांख्यिकी बनाने के लिए दोनों उपायों का उपयोग कर सकते हैं। F-सांख्यिकी को समझना बहुत सहज है। यदि अंश बढ़ता है, तो इसका मतलब है कि समूहों के बीच परिवर्तनशीलता अधिक है, और यह संभावना है कि नमूने में समूह पूरी तरह से अलग-अलग वितरण से लिए गए हैं।
दूसरे शब्दों में, कम एफ-सांख्यिकी समूह औसत के बीच बहुत कम या कोई सार्थक अंतर नहीं दर्शाती है।
उदाहरण एकतरफा एनोवा परीक्षण
आप वन-वे ANOVA परीक्षण को लागू करने के लिए पॉइज़न डेटासेट का उपयोग करेंगे। डेटासेट में 48 पंक्तियाँ और 3 चर हैं:
- समय: पशु का जीवित रहने का समय
- ज़हर: इस्तेमाल किए गए ज़हर का प्रकार: कारक स्तर: 1,2 और 3
- उपचार: प्रयुक्त उपचार का प्रकार: कारक स्तर: 1,2 और 3
एनोवा परीक्षण की गणना शुरू करने से पहले, आपको निम्नलिखित तरीके से डेटा तैयार करना होगा:
- चरण 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)
आउटपुट:
## 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: समूह के बीच जीवित रहने के औसत समय में कोई अंतर नहीं है
- H1: कम से कम एक समूह के लिए जीवित रहने का औसत समय अलग-अलग है।
दूसरे शब्दों में, आप यह जानना चाहते हैं कि गिनी पिग को दिए गए जहर के प्रकार के अनुसार जीवित रहने के समय के औसत में सांख्यिकीय अंतर है या नहीं।
आप निम्न प्रकार आगे बढ़ेंगे:
- चरण 1: वेरिएबल poison का प्रारूप जांचें
- चरण 2: सारांश सांख्यिकी प्रिंट करें: गणना, माध्य और मानक विचलन
- चरण 3: बॉक्स प्लॉट बनाएं
- चरण 4: एक-तरफ़ा ANOVA परीक्षण की गणना करें
- चरण 5: ट्यूकी एचएसडी के साथ युग्मवार तुलना करें
चरण 1) नीचे दिए गए कोड से ज़हर के स्तर की जाँच करें। आपको तीन वर्ण मान दिखाई देने चाहिए, क्योंकि म्यूटेट क्रिया ने कॉलम को एक क्रमबद्ध गुणनखंड में परिवर्तित कर दिया है।
levels(df$poison)
आउटपुट:
## [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) )
आउटपुट:
## # 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) चरण तीन में, आप ग्राफ़िक रूप से जाँच कर सकते हैं कि वितरण के बीच कोई अंतर है या नहीं। ध्यान दें कि आपने घबराए हुए बिंदु को शामिल किया है।
ggplot(df, aes(x = poison, y = time, fill = poison)) + geom_boxplot() + geom_jitter(shape = 15, color = "steelblue", position = position_jitter(0.21)) + theme_classic()
आउटपुट:
चरण 4) आप aov कमांड के साथ वन-वे ANOVA टेस्ट चला सकते हैं। 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)
Code व्याख्या
- aov(time ~ poison, data = df): निम्नलिखित सूत्र के साथ ANOVA परीक्षण चलाएँ
- सारांश(anova_one_way): परीक्षण का सारांश प्रिंट करें
आउटपुट:
## 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-मान 7.66e-05 है, जो सामान्य सीमा 0.05 से काफी कम है, और तीन तारे सबसे मजबूत सार्थकता कोड को दर्शाते हैं। आप H0 को अस्वीकार कर सकते हैं और यह निष्कर्ष निकाल सकते हैं कि कम से कम एक विष समूह का औसत उत्तरजीविता समय भिन्न है।
R में ANOVA की मान्यताओं की जाँच कैसे करें
ANOVA का p-मान तभी विश्वसनीय होता है जब ऊपर बताई गई तीनों शर्तें पूरी हों। इनमें से प्रत्येक की R में सीधी जाँच होती है, और ये सभी फिट किए गए मॉडल ऑब्जेक्ट पर चलती हैं।
1. प्रेक्षणों की स्वतंत्रता। यह अध्ययन की डिज़ाइन की विशेषता है, डेटा की नहीं, इसलिए कोई भी परीक्षण इसे ठीक नहीं कर सकता। प्रत्येक गिनी पिग को एक बार मापना होगा और उसे यादृच्छिक रूप से उसके समूह में रखना होगा। यदि एक ही विषय कई पंक्तियों में दिखाई देता है, तो आपको इसके बजाय दोहराए गए माप मॉडल की आवश्यकता होगी।
2. अवशिष्टों की सामान्यता। ANOVA यह मानता है कि अवशेष लगभग सामान्य हैं, न कि कच्चा डेटा। QQ प्लॉट का निरीक्षण करें और शापिरो-विल्क परीक्षण से इसकी पुष्टि करें:
par(mfrow = c(2, 2)) plot(anova_one_way) # four diagnostic plots shapiro.test(residuals(anova_one_way))
नॉर्मल QQ प्लॉट के विकर्ण के निकट स्थित बिंदु सामान्य अवशिष्टों को दर्शाते हैं। 0.05 से अधिक का शैपिरो-विल्क p-मान दर्शाता है कि आप सामान्यता को अस्वीकार नहीं कर सकते।
3. प्रसरण की समरूपता। प्रत्येक समूह में समान फैलाव दिखना चाहिए। अवशिष्ट बनाम फिटेड प्लॉट फ़नल के बजाय एक सपाट पट्टी की तरह दिखना चाहिए। इसे लेवेन परीक्षण से सत्यापित करें, जो बार्टलेट परीक्षण की तुलना में गैर-सामान्य वितरण के प्रति अधिक मजबूत है।
library(car)
leveneTest(time ~ poison, data = df)
bartlett.test(time ~ poison, data = df)
0.05 से ऊपर का p-मान समान प्रसरण का समर्थन करता है।
जब कोई धारणा गलत साबित हो जाए तो क्या करें। यदि प्रसरण असमान हैं, तो oneway.test(time ~ poison, data = df, var.equal = FALSE) चलाएँ, जो वेल्च सुधार है। यदि अवशिष्ट स्पष्ट रूप से गैर-सामान्य हैं और नमूना छोटा है, तो क्रुस्कल-वालिस रैंक परीक्षण पर स्विच करें, kruskal.test(time ~ poison, data = df)। बड़े संतुलित नमूनों के साथ, ANOVA सामान्यता से मध्यम विचलन के प्रति काफी मजबूत है, इसलिए सीमा रेखा पर स्थित शापिरो-विल्क परिणाम शायद ही कभी घातक होता है।
जोड़े द्वारा तुलना
एक सार्थक एफ-परीक्षण यह बताता है कि समूह माध्य सभी बराबर नहीं हैं, लेकिन यह नहीं बताता कि कौन सा जोड़ा भिन्न है। ट्यूकी ऑनेस्ट सिग्निफिकेंट डिफरेंस परीक्षण परिवार-वार त्रुटि दर को नियंत्रित करते हुए प्रत्येक जोड़े की तुलना करके इसका उत्तर देता है।
TukeyHSD(anova_one_way)
आउटपुट:
आउटपुट को प्रति जोड़ी एक पंक्ति के हिसाब से पढ़ें। diff कॉलम में दोनों समूहों के माध्यों के बीच का अंतर दर्शाया गया है। एलडब्ल्यूआर और अनुमति उस अंतर के लिए 95 प्रतिशत विश्वास अंतराल को सीमित करें, और पी विशेषण यह एकाधिक तुलनाओं के लिए समायोजित पी-मान है। एक जोड़ी में महत्वपूर्ण अंतर तब होता है जब उसका अंतराल शून्य को शामिल नहीं करता है, यानी जब पी-मान 0.05 से कम होता है। इस डेटासेट में, विष 3 से संबंधित तुलनाएँ महत्वपूर्ण हैं, जो बॉक्स प्लॉट से मेल खाती हैं: समूह 3 का औसत उत्तरजीविता समय समूह 1 और 2 की तुलना में स्पष्ट रूप से कम है, जबकि समूह 1 और 2 सांख्यिकीय रूप से एक दूसरे से अप्रभेद्य हैं।
दो तरफा एनोवा
दो-तरफ़ा एनोवा (Two-way ANOVA) में सूत्र में एक दूसरा कारक जोड़ा जाता है। यह बिल्कुल एक-तरफ़ा परीक्षण की तरह काम करता है, केवल सूत्र बदल जाता है:
y ~ x1 + x2
यहां y मात्रात्मक प्रतिक्रिया चर है, जबकि x1 और x2 दोनों श्रेणीबद्ध कारक हैं।
दो-तरफ़ा ANOVA परीक्षण में परिकल्पना
- H0: दोनों कारक चरों के लिए समूह माध्य बराबर हैं
- H1: कम से कम एक समूह का माध्य दो कारकों में से कम से कम एक के लिए भिन्न होता है।
आप मॉडल में 'उपचार' नामक चर जोड़ते हैं। यह चर गिनी पिग को दिए गए उपचार को रिकॉर्ड करता है। नीचे दिया गया योगात्मक सूत्र यह परीक्षण करता है कि क्या प्रत्येक कारक दूसरे कारकों को ध्यान में रखते हुए, अपने आप में जीवित रहने के समय को प्रभावित करता है।
पहले स्वतंत्र चर के साथ "ट्रीट" जोड़कर कोड को संशोधित करें।
anova_two_way <- aov(time~poison + treat, data = df) summary(anova_two_way)
आउटपुट:
## 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 ## ---
दोनों पी-मान (ज़हर के लिए 5.7e-07 और उपचार के लिए 6.7e-06) 0.05 से काफी नीचे हैं, इसलिए आप दोनों कारकों के लिए H0 को अस्वीकार करते हैं और यह निष्कर्ष निकालते हैं कि ज़हर या उपचार में से किसी एक को बदलने से जीवित रहने के समय पर प्रभाव पड़ता है।
अंतःक्रिया पद जोड़ना
उपरोक्त योगात्मक मॉडल यह मानता है कि उपचार चाहे जो भी हो, विष का प्रभाव समान रहता है। इस धारणा का परीक्षण करने के लिए, धन चिह्न को तारांकन चिह्न से बदलें, जो मुख्य प्रभावों और उनकी परस्पर क्रिया दोनों के लिए उपयुक्त है:
anova_interaction <- aov(time~poison * treat, data = df) summary(anova_interaction)
यदि पॉइज़न:ट्रीट पंक्ति महत्वपूर्ण नहीं है, तो एडिटिव मॉडल बेहतर विकल्प है क्योंकि इसमें कम डिग्री ऑफ़ फ्रीडम का उपयोग होता है।
R में ANOVA: त्वरित परीक्षण संदर्भ
नीचे दी गई तालिका में ऊपर उपयोग किए गए प्रत्येक परीक्षण, उसे चलाने वाले R कॉल और उसके द्वारा मूल्यांकित परिकल्पना को सूचीबद्ध किया गया है:
| टेस्ट | Code | परिकल्पना | पी-मूल्य |
|---|---|---|---|
| एकतरफा एनोवा |
aov(y ~ X, data = df)
|
H1: कम से कम एक समूह के लिए औसत अलग है | 0.05 |
| जोड़ो में |
TukeyHSD(ANOVA summary) |
0.05 | |
| दोतरफा एनोवा |
aov(y ~ X1 + X2, data = df)
|
H1: दोनों कारकों में से किसी एक के लिए कम से कम एक समूह का माध्य भिन्न होता है। | 0.05 |




