कोर्स
Standard deviation आपके डेटा के फैलाव को संक्षेप में बताने के सबसे आम तरीकों में से एक है। R में, sd() फ़ंक्शन आपको इस परिवर्तनशीलता के माप की तेज़ी से गणना करने का तरीका देता है, चाहे आप वेक्टर, डेटा फ़्रेम या समूहित डेटा के साथ काम कर रहे हों।
इस लेख में, मैं R में sd() का उपयोग करने की बुनियाद बताऊंगा, मिसिंग वैल्यू को कैसे संभालें, और tapply() जैसी फ़ंक्शन और dplyr जैसे पैकेज का उपयोग करके समूहों के अनुसार standard deviation कैसे निकालें, यह दिखाऊंगा।
R में sd() क्या करता है?
R के base पैकेज का sd() फ़ंक्शन किसी संख्यात्मक वेक्टर या डेटा फ़्रेम के कॉलम का standard deviation गणना करता है। यह मापता है कि आपके डेटा के मान औसत से कितने विचलित हैं, जिससे परिवर्तनशीलता या प्रसार का अंदाज़ा मिलता है।
यदि आप variance से परिचित हैं, तो standard deviation उसका वर्गमूल भर है और क्योंकि इसकी गणना औसत वर्ग विचलन का वर्गमूल लेकर की जाती है, standard deviation मूल डेटा के समान स्केल पर रहता है। इससे व्यावहारिक रूप से इसकी व्याख्या करना आसान हो जाता है।
एक साधारण sd() उदाहरण
मान लीजिए आपके पास कुछ संख्याएँ हैं और आप जानना चाहते हैं कि वे औसत से कितनी भिन्न हैं।
R में आप ऐसा इस तरह करेंगे:
exam_scores <- c(75, 80, 85, 90, 95)
sd(exam_scores)
आउटपुट आपको standard deviation बताता है, जो प्रत्येक स्कोर की औसत से औसतन दूरी को परिमाणित करता है।
आप sd() का उपयोग किसी भी संख्यात्मक वेक्टर के साथ कर सकते हैं, जिनमें integers, doubles, या गणनाओं के परिणाम शामिल हैं। अब, आप शायद जानते हैं कि R तर्कसंगत वेक्टरों को संख्यात्मक मानता है (TRUE को 1, FALSE को 0), इसलिए तकनीकी रूप से sd() तार्किक वेक्टरों पर भी काम करेगा (आप चाहें तो आज़मा सकते हैं), लेकिन standard deviation की धारणा निरंतर संख्यात्मक डेटा के लिए ही सबसे अधिक सार्थक होती है।
sd() के साथ मिसिंग वैल्यू को संभालना
वास्तविक दुनिया के डेटासेट में अक्सर मिसिंग वैल्यू होती हैं, इसलिए यह उल्लेख करना उचित है: यदि आपके डेटा में कोई भी NA मान है, तो sd() डिफ़ॉल्ट रूप से NA लौटाएगा।
यह उदाहरण देखें:
heights <- c(170, 175, NA, 180, 185)
sd(heights)
परिणाम NA आता है।
मिसिंग वैल्यू को नज़रअंदाज़ करके उपलब्ध संख्याओं का standard deviation निकालने के लिए na.rm = TRUE आर्ग्यूमेंट का उपयोग करें। या फिर, आप अपने डेटासेट से NA मानों को हटाकर सफाई कर सकते हैं, लेकिन मैं ऐसा तभी सलाह दूंगा जब वह संदर्भ में उचित हो।
sd(heights, na.rm = TRUE)
अब आपको 170, 175, 180 और 185 का standard deviation मिलेगा।
R में डेटा फ़्रेम के लिए Standard Deviation की गणना
आप $ ऑपरेटर का उपयोग करके किसी डेटा फ़्रेम के किसी विशेष कॉलम का standard deviation आसानी से निकाल सकते हैं। मान लें कि आपके पास प्रोडक्ट वज़न का डेटा फ़्रेम है:
product_data <- data.frame( weight = c(1.2, 1.5, 1.3, 1.7, 1.4), price = c(10, 12, 11, 13, 12) )
sd(product_data$weight)
यह आपको weight कॉलम का standard deviation देता है। ध्यान रखें, sd() संख्यात्मक वेक्टरों के लिए बनाया गया है, पूरे डेटा फ़्रेम के लिए नहीं। हमेशा सही कॉलम चुनें।
sd() और समूह-आधारित Standard Deviations
अक्सर, आप श्रेणी, क्षेत्र या किसी अन्य कारक के अनुसार समूहों के भीतर बदलाव मापना चाहेंगे। R समूहित standard deviation निकालने के कई तरीके देता है। मैं तीन दिखाऊंगा:
समूहित standard deviation के लिए tapply() का उपयोग
मान लें कि आपके पास अलग-अलग क्षेत्रों की बिक्री का डेटा है और आप हर क्षेत्र के लिए standard deviation चाहते हैं:
sales_amount <- c(200, 220, 210, 250, 240, 230)
region <- c("North", "North", "South", "South", "North", "South")
tapply(sales_amount, region, sd)
tapply() क्षेत्र द्वारा परिभाषित प्रत्येक समूह पर sd() लागू करता है।
समूहित standard deviation के लिए aggregate() का उपयोग
यदि आप अपना परिणाम एक सुथरे डेटा फ़्रेम में चाहते हैं, तो aggregate() काम करता है:
sales_data <- data.frame( region = c("North", "North", "South", "South", "North", "South"), amount = c(200, 220, 210, 250, 240, 230) )
aggregate(amount ~ region, data = sales_data, sd)
यह प्रत्येक क्षेत्र के standard deviation के साथ एक सारांश डेटा फ़्रेम तैयार करता है।
समूहित standard deviation के लिए dplyr का उपयोग
dplyr पैकेज के साथ, समूहित गणनाएँ और भी पठनीय हो जाती हैं। समूह बनाने के बाद summarize() का उपयोग करें:
library(dplyr)
sales_data %>%
group_by(region) %>%
summarize(sd_amount = sd(amount))
यह तरीका बड़े डेटासेट के लिए या जब आप कई डेटा रूपांतरणों को एक साथ जोड़ रहे हों, खास तौर पर उपयोगी है। (या अगर आपको पाइप ऑपरेटर का इस्तेमाल पसंद है, जैसे मुझे है।)
सामान्य गलतियाँ और सुझाव
sd() जैसा सरल फ़ंक्शन भी, अगर आप सावधान नहीं हैं, तो दिक्कत दे सकता है। यहाँ कुछ आम गिरावटें हैं:
-
गैर-संख्यात्मक डेटा:
sd()केवल संख्यात्मक वेक्टरों पर काम करता है। यदि आपके डेटा में characters या factors हैं, तो आपको त्रुटि मिलेगी। अपने डेटा की जाँच के लिएis.numeric()का उपयोग करें। -
मिसिंग वैल्यू: एक भी
NAsd()कोNAलौटाने पर मजबूर कर देगा। यदि आप मिसिंग वैल्यू को अनदेखा करना चाहते हैं, तो हमेशाna.rm = TRUEका उपयोग करें। -
छोटे सैंपल आकार:
sd()हर का मान n-1 लेता है (सैंपल standard deviation)। लंबाई 1 वाले वेक्टर के लिए,sd()0नहीं बल्किNAलौटाता है।
खासकर आख़िरी बिंदु, मेरे ख्याल से, दिलचस्प है। यह कम–ज्ञात अंतर है और अगर आप Python से R पर आ रहे हैं तो यह आपको उलझा सकता है, क्योंकि Python डिफ़ॉल्ट रूप से जनसंख्या standard deviation से भाग देता है, न कि sample से।
R में उपयोगी विविधताएँ और संबंधित फ़ंक्शन
R परिवर्तनशीलता मापने और डेटा का सार बताने के लिए कई संबंधित फ़ंक्शन प्रदान करता है:
-
var(): variance की गणना करता है, जो standard deviation का वर्ग होता है। -
apply(),sapply(),lapply(): मैट्रिक्स और डेटा फ़्रेम की पंक्तियों या कॉलमों मेंsd()लागू करने के लिए उपयोगी। mad(): median absolute deviation की गणना करता है, जो परिवर्तनशीलता का एक और दिलचस्प और अधिक robust माप है।
चूँकि मैंने apply() के साथ sd() का ज़िक्र किया, तो दिखा देता हूँ: यहाँ बताया गया है कि किसी मैट्रिक्स के प्रत्येक कॉलम का standard deviation पाने के लिए apply() कैसे उपयोग करें। पहले की तरह, मैं वही मैट्रिक्स तुरंत बना रहा हूँ।
measurement_matrix <- matrix(1:9, nrow = 3)
apply(measurement_matrix, 2, sd)
यह प्रत्येक कॉलम के standard deviation को लौटाता है, जिससे कई वेरिएबल्स में परिवर्तनशीलता का त्वरित अवलोकन मिलता है।
निष्कर्ष
R में sd() फ़ंक्शन अपेक्षाकृत सरल है (यह बस एक लाइन का कोड है)। लेकिन यदि आप इसे रिपोर्ट या प्रस्तुतियों के लिए इस्तेमाल करते हैं और आपको विवरण थोड़े धुंधले लगते हैं, तो हमारे Statistician in R करियर ट्रैक में नामांकन करें। सांख्यिकी और डेटा विश्लेषण में बहुत बारीकियाँ होती हैं, इसलिए सुनिश्चित करें कि आप अच्छी तरह से पारंगत हैं।

मैं एक डेटा साइंस संपादक हूँ और वैज्ञानिक पत्रिकाओं में प्रकाशित शोध लेखों में योगदान दे चुका/चुकी हूँ। मुझे विशेष रूप से रैखिक बीजगणित, सांख्यिकी, R, और इसी तरह के विषयों में रुचि है।