कुक की दूरी का उपयोग करके प्रभावशाली डेटा बिंदुओं की पहचान कैसे करें
कुक की दूरी , जिसे अक्सर डी आई के रूप में दर्शाया जाता है, का उपयोग प्रतिगमन विश्लेषण में प्रभावशाली डेटा बिंदुओं की पहचान करने के लिए किया जाता है जो आपके प्रतिगमन मॉडल को नकारात्मक रूप से प्रभावित कर सकते हैं।
कुक की दूरी का सूत्र है:
डी आई = (आर आई 2 / पी*एमएसई) * (एच II / (1-एच II ) 2 )
सोना:
- आर मैं मैं वें अवशेष है
- p प्रतिगमन मॉडल में गुणांकों की संख्या है
- एमएसई माध्य वर्ग त्रुटि है
- h ii ith उत्तोलन मान है
भले ही सूत्र थोड़ा जटिल लगता है, अच्छी खबर यह है कि अधिकांश सांख्यिकीय सॉफ़्टवेयर आपके लिए आसानी से इसकी गणना कर सकते हैं।
अनिवार्य रूप से, कुक की दूरी एक काम करती है: यह मापती है कि i वें डेटा बिंदु को हटा दिए जाने पर मॉडल के सभी फिट किए गए मान कितने बदल जाते हैं।
एक डेटा बिंदु जिसका कुक की दूरी के लिए उच्च मान है, यह दर्शाता है कि यह फिट किए गए मानों को दृढ़ता से प्रभावित करता है। एक सामान्य नियम यह है कि कुक दूरी 4/n ( जहां n डेटा बिंदुओं की कुल संख्या है ) से अधिक वाले किसी भी बिंदु को आउटलायर माना जाता है।
यह ध्यान रखना महत्वपूर्ण है कि कुक की दूरी का उपयोग अक्सर प्रभावशाली डेटा बिंदुओं की पहचान करने के लिए किया जाता है। सिर्फ इसलिए कि कोई डेटा बिंदु प्रभावशाली है इसका मतलब यह नहीं है कि उसे हटा दिया जाना चाहिए। आपको पहले यह जांचना चाहिए कि क्या डेटा बिंदु केवल गलत तरीके से रिकॉर्ड किया गया था या डेटा बिंदु के बारे में कुछ अजीब है जो एक दिलचस्प खोज का संकेत दे सकता है।
आर में कुक की दूरी की गणना कैसे करें
निम्नलिखित उदाहरण दिखाता है कि आर में कुक की दूरी की गणना कैसे करें।
सबसे पहले, हम दो लाइब्रेरी लोड करेंगे जिनकी हमें इस उदाहरण के लिए आवश्यकता होगी:
library(ggplot2) library(gridExtra)
इसके बाद, हम दो डेटा फ़्रेम परिभाषित करेंगे: एक दो आउटलेर्स के साथ और एक बिना आउटलेर्स के।
#create data frame with no outliers no_outliers <- data.frame(x = c(1, 2, 2, 3, 4, 5, 7, 3, 2, 12, 11, 15, 14, 17, 22), y = c(22, 23, 24, 23, 19, 34, 35, 36, 36, 34, 32, 38, 41, 42, 44)) #create data frame with two outliers outliers <- data.frame(x = c(1, 2, 2, 3, 4, 5, 7, 3, 2, 12, 11, 15, 14, 17, 22), y = c( 190 , 23, 24, 23, 19, 34, 35, 36, 36, 34, 32, 38, 41, 42, 180 ))
इसके बाद, हम दो डेटा फ़्रेमों को एक साथ प्रदर्शित करने के लिए एक स्कैटर प्लॉट बनाएंगे:
#create scatterplot for data frame with no outliers no_outliers_plot <- ggplot(data = no_outliers, aes(x = x, y = y)) + geom_point() + geom_smooth(method = lm) + ylim(0, 200) + ggtitle("No Outliers") #create scatterplot for data frame with outliers outliers_plot <- ggplot(data = outliers, aes(x = x, y = y)) + geom_point() + geom_smooth(method = lm) + ylim(0, 200) + ggtitle("With Outliers") #plot the two scatterplots side by side gridExtra::grid.arrange(no_outliers_plot, outliers_plot, ncol=2)
हम देख सकते हैं कि आउटलेर्स दूसरे ग्राफ़ में प्रतिगमन रेखा के फिट को कैसे नकारात्मक रूप से प्रभावित करते हैं।
दूसरे डेटासेट में प्रभावशाली बिंदुओं की पहचान करने के लिए, हम डेटासेट में प्रत्येक अवलोकन के लिए कुक दूरी की गणना कर सकते हैं और फिर इन दूरियों को प्लॉट करके देख सकते हैं कि कौन से अवलोकन 4/एन की पारंपरिक सीमा से ऊपर हैं:
#fit the linear regression model to the dataset with outliers model <- lm(y ~ x, data = outliers) #find Cook's distance for each observation in the dataset cooksD <- cooks.distance(model) # Plot Cook's Distance with a horizontal line at 4/n to see which observations #exceed this threshold n <- nrow(outliers) plot(cooksD, main = "Cooks Distance for Influential Obs") abline(h = 4/n, lty = 2, col = "steelblue") # add cutoff line
हम स्पष्ट रूप से देख सकते हैं कि डेटासेट में पहला और अंतिम अवलोकन 4/n सीमा से अधिक है। इस प्रकार, हम इन दो अवलोकनों को प्रभावशाली डेटा बिंदुओं के रूप में पहचानेंगे जो प्रतिगमन मॉडल पर नकारात्मक प्रभाव डालते हैं।
यदि हम 4/एन सीमा से अधिक की सभी टिप्पणियों को हटाना चाहते हैं, तो हम निम्नलिखित कोड का उपयोग करके ऐसा कर सकते हैं:
#identify influential points influential_obs <- as.numeric(names(cooksD)[(cooksD > (4/n))]) #define new data frame with influential points removed outliers_removed <- outliers[-influential_obs, ]
फिर हम दो स्कैटरप्लॉट की तुलना कर सकते हैं: एक वर्तमान प्रभाव बिंदुओं के साथ प्रतिगमन रेखा दिखाता है और दूसरा हटाए गए प्रभाव बिंदुओं के साथ प्रतिगमन रेखा दिखाता है:
#create scatterplot with outliers present outliers_present <- ggplot(data = outliers, aes(x = x, y = y)) + geom_point() + geom_smooth(method = lm) + ylim(0, 200) + ggtitle("Outliers Present") #create scatterplot with outliers removed outliers_removed <- ggplot(data = outliers_removed, aes(x = x, y = y)) + geom_point() + geom_smooth(method = lm) + ylim(0, 200) + ggtitle("Outliers Removed") #plot both scatterplots side by side gridExtra::grid.arrange(outliers_present, outliers_removed, ncol = 2)
दो प्रभावशाली डेटा बिंदुओं को हटा दिए जाने के बाद हम स्पष्ट रूप से देख सकते हैं कि प्रतिगमन रेखा डेटा को कितनी बेहतर ढंग से फिट करती है।
तकनीकी नोट्स
- अधिकांश सांख्यिकीय सॉफ़्टवेयर में डेटा सेट में प्रत्येक अवलोकन के लिए कुक की दूरी की आसानी से गणना करने की क्षमता होती है।
- ध्यान रखें कि कुक की दूरी केवल प्रभाव के बिंदुओं की पहचान करने का एक तरीका है।
- प्रभावशाली बिंदुओं से निपटने के कई तरीके हैं, जिनमें शामिल हैं: इन बिंदुओं को हटाना, इन बिंदुओं को माध्य या मध्यिका जैसे मान से बदलना, या बस मॉडल में बिंदुओं को रखना लेकिन परिणाम प्रतिगमन की रिपोर्ट करते समय उन पर सावधानीपूर्वक ध्यान देना।