भारी पूंछ वाले वितरण के लिए बॉक्सप्लॉट बराबर?


13

लगभग सामान्य रूप से वितरित किए गए डेटा के लिए, बॉक्सप्लाट्स डेटा के मध्यमान और प्रसार की कल्पना करने के साथ-साथ किसी भी आउटलेयर की उपस्थिति का एक शानदार तरीका है।

हालांकि अधिक भारी-पूंछ वाले वितरणों के लिए, बहुत सारे बिंदुओं को आउटलेर्स के रूप में दिखाया गया है, क्योंकि आउटलेयर को IQR के निश्चित कारक के बाहर होने के रूप में परिभाषित किया गया है, और यह निश्चित रूप से भारी-पूंछ वाले वितरणों के साथ बहुत अधिक बार होता है।

तो लोग इस तरह के डेटा की कल्पना करने के लिए क्या उपयोग करते हैं? क्या कुछ और अनुकूलित है? मैं आर पर ggplot का उपयोग करता हूं, अगर यह मायने रखता है।


1
भारी पूंछ वाले वितरणों के नमूनों में मध्य 50% की तुलना में एक बड़ी सीमा होती है। आप उसके बारे में क्या करना चाहते हैं?
Glen_b -Reinstate मोनिका

7
पहले से ही कई प्रासंगिक सूत्र जैसे आँकड़े। स्टैकएक्सचेंज / कंटेंट / १३०…६/… लघु उत्तर में पहले परिवर्तन शामिल है! histograms; विभिन्न प्रकार के मात्रात्मक भूखंड; विभिन्न प्रकार के पट्टी भूखंड।
निक कॉक्स

@Glen_b: यह ठीक मेरी समस्या है, यह बॉक्सप्लेट्स को अपठनीय बनाता है।
static_rtti

2
बात यह है, एक से अधिक चीजें हैं जो हो सकती हैं ... तो आप इसे क्या करना चाहते हैं?
Glen_b -Reinstate Monica

2
शायद यह ध्यान देने योग्य है कि अधिकांश सांख्यिकीय दुनिया उनके नामकरण से बॉक्सप्लेट्स जानती है और (पुनः) 1970 के दशक में जॉन टुके द्वारा परिचय दिया गया था। (इनका उपयोग कई दशकों पहले जलवायु विज्ञान और भूगोल में किया गया था।) लेकिन बाद में व्याख्यात्मक डेटा विश्लेषण (रीडिंग, एमए: एडिसन-वेस्ले) पर उनकी पुस्तक के 1977 के अध्यायों में भारी-भारी वितरण को संभालने के बारे में उनके अलग-अलग विचार हैं। ऐसा लगता है कि किसी ने भी नहीं पकड़ा है। लेकिन क्वांटाइल प्लॉट समान भावना में हैं।
निक कॉक्स

जवाबों:


8

ओपी के लिए केंद्रीय समस्या यह है कि उनके पास बहुत भारी पूंछ वाले डेटा हैं - और मुझे नहीं लगता कि अधिकांश वर्तमान उत्तर वास्तव में उस मुद्दे से निपटते हैं , इसलिए मैं अपनी पिछली टिप्पणी का उत्तर देने के लिए प्रचार कर रहा हूं।

यदि आप बॉक्सप्लॉट्स के साथ रहना चाहते हैं, तो नीचे कुछ विकल्प सूचीबद्ध हैं। मैंने R में कुछ डेटा बनाए हैं जो मूल समस्या को दर्शाता है:

 set.seed(seed=7513870)
 x <- rcauchy(80)
 boxplot(x,horizontal=TRUE,boxwex=.7)

असंतोषजनक बॉक्सप्लॉट

डेटा के बीच का आधा हिस्सा मिमी की एक जोड़ी की छोटी पट्टी से कम हो जाता है। यही समस्या अधिकांश अन्य सुझावों - क्यूक्यू प्लॉट्स, स्ट्रिप चार्ट्स, बीहाइव / बीस्वर्म प्लॉट्स और वायलिन प्लॉट्स को दर्शाती है।

अब कुछ संभावित समाधान:

1) परिवर्तन ,

यदि लॉग, या व्युत्क्रम एक पठनीय बॉक्सप्लॉट बनाते हैं, तो वे एक बहुत अच्छा विचार हो सकता है, और मूल पैमाने को अभी भी अक्ष पर दिखाया जा सकता है।

बड़ी समस्या यह है कि कभी-कभी कोई 'सहज' परिवर्तन नहीं होता है। एक छोटी सी समस्या है कि जब क्वांटिल्स स्वयं मोनोटोनिक परिवर्तनों के साथ अच्छी तरह से अनुवाद करते हैं, तो बाड़ नहीं आते; यदि आप केवल ट्रांसफ़ॉर्म किए गए डेटा को बॉक्सप्लॉट करते हैं (जैसा कि मैंने यहां किया था), मूंछें मूल प्लॉट की तुलना में अलग-अलग एक्स-वैल्यू पर होंगी।

रूपांतरित मूल्यों का बॉक्सप्लॉट

यहाँ मैंने एक व्युत्क्रम-अतिशयोक्ति-पाप (asinh) का उपयोग किया; यह पूंछ की तरह लॉग-इन की तरह है और शून्य के पास रैखिक के समान है, लेकिन लोग आमतौर पर इसे एक सहज परिवर्तन नहीं पाते हैं, इसलिए सामान्य तौर पर मैं इस विकल्प की सिफारिश नहीं करूंगा जब तक कि लॉग की तरह एक काफी सहज परिवर्तन नहीं हो। उस के लिए कोड:

xlab <- c(-60,-20,-10,-5,-2,-1,0,1,2,5,10,20,40)
boxplot(asinh(x),horizontal=TRUE,boxwex=.7,axes=FALSE,frame.plot=TRUE)
axis(1,at=asinh(xlab),labels=xlab)

2) स्केल ब्रेक - चरम आउटलेर्स लें और उन्हें प्रत्येक छोर पर संकीर्ण खिड़कियों में केंद्र की तुलना में बहुत अधिक संकुचित पैमाने पर संपीड़ित करें। यदि आप ऐसा करते हैं तो मैं पूरे पैमाने पर पूर्ण विराम की सिफारिश करता हूं।

स्केल ब्रेक के साथ बॉक्सप्लॉट

opar <- par()
layout(matrix(1:3,nr=1,nc=3),heights=c(1,1,1),widths=c(1,6,1))
par(oma = c(5,4,0,0) + 0.1,mar = c(0,0,1,1) + 0.1)
stripchart(x[x< -4],pch=1,cex=1,xlim=c(-80,-5))
boxplot(x[abs(x)<4],horizontal=TRUE,ylim=c(-4,4),at=0,boxwex=.7,cex=1)
stripchart(x[x> 4],pch=1,cex=1,xlim=c(5,80))
par(opar)

3) चरम आउटलेर्स की ट्रिमिंग (जो मैं आमतौर पर यह बहुत स्पष्ट रूप से इंगित किए बिना सलाह नहीं देता, लेकिन यह अगले भूखंड की तरह दिखता है, "<5" और "2>" बिना किसी भी छोर पर), और

4) जिसे मैं अति-बाह्य "तीर" कहूंगा - ट्रिमिंग के समान, लेकिन प्रत्येक छोर पर इंगित किए गए मानों की गणना के साथ

चरम मूल्यों की ओर इशारा करते हुए, और तीर की गिनती के साथ बॉक्सप्लॉट

xout <- boxplot(x,range=3,horizontal=TRUE)$out
xin <- x[!(x %in% xout)]
noutl <- sum(xout<median(x))
nouth <- sum(xout>median(x))
boxplot(xin,horizontal=TRUE,ylim=c(min(xin)*1.15,max(xin)*1.15))
text(x=max(xin)*1.17,y=1,labels=paste0(as.character(nouth)," >"))
text(x=min(xin)*1.17,y=1,labels=paste0("< ",as.character(noutl)))

यह लिखने के लिए समय निकालने के लिए धन्यवाद! यह ठीक उसी तरह का जवाब है जिसकी मुझे उम्मीद थी। अब मुझे केवल यह पता लगाने की आवश्यकता है कि इन भूखंडों को आर :) के साथ कैसे लागू किया जाए
static_rtti

1
अभी कुछ कोड है। मैंने 3 के लिए कोड नहीं दिया) क्योंकि यह 4 का सरल संस्करण है); आप उस से लाइनों को काटकर इसे प्राप्त करने में सक्षम होना चाहिए।
Glen_b -Reinstate मोनिका

संयोग से इन विचारों में से अधिकांश यहां सुझाए गए अन्य महान प्रदर्शनों के साथ भी काम करते हैं - घबराहट वाली स्ट्राइकरेट्स और बीज़वर्म / बीहाइव प्लॉट्स और वायलिन प्लॉट्स और ऐसे।
Glen_b -Reinstate मोनिका

एक बार फिर धन्यवाद। मुझे यकीन है कि यह उत्तर काफी लोगों के लिए उपयोगी होगा।
static_rtti

मैं सहमत हूं, यह मेरे जवाब से बेहतर प्रश्न को संबोधित करता है। अच्छी चीज़।
टीओटी

4

व्यक्तिगत रूप से मैं डेटा के लिए एक महसूस करने के लिए कम से कम घबराना के साथ एक स्ट्रिपलॉट का उपयोग करना पसंद करता हूं । नीचे का प्लॉट R में जाली के साथ है (क्षमा करें ggplot2 नहीं)। मुझे ये प्लॉट पसंद हैं क्योंकि इनकी व्याख्या करना बहुत आसान है। जैसा कि आप कहते हैं, इसका एक कारण यह है कि कोई भी परिवर्तन नहीं है।

df <- data.frame(y1 = c(rnorm(100),-4:4), y2 = c(rnorm(100),-5:3), y3 = c(rnorm(100),-3:5))
df2 <- stack(df)
library(lattice)
stripplot(df2$values ~ df2$ind, jitter=T)

यहाँ छवि विवरण दर्ज करें

Beeswarm पैकेज (सुझाव के लिए @January करने के लिए धन्यवाद) एक महान stripplot लिए विकल्प प्रदान करता है।

beeswarm(df2$values ~ df2$ind)

यहाँ छवि विवरण दर्ज करें

आपके डेटा के साथ, जैसा कि लगभग सामान्य रूप से वितरित किया जाता है, कोशिश करने के लिए एक और चीज इस मामले में एक qqplot, qqnorm हो सकती है ।

par(mfrow=c(1,3))
for(i in 1:3) { qqnorm(df[,i]); abline(c(0,0),1,col="red") }

यहाँ छवि विवरण दर्ज करें


2
मुझे स्ट्रिप्लॉट्स भी पसंद हैं, लेकिन यह प्रश्न स्पष्ट रूप से है कि भारी पूंछ वाले वितरण के साथ क्या करना है।
निक कॉक्स

1
मुद्दा यह है कि उदाहरण के लिए qqnorm का उपयोग करने की सलाह सवाल से मेल नहीं खाती है। अन्य प्रकार के क्वांटाइल-क्वांटाइल प्लॉट, मैं सहमत हूं, एक बहुत अच्छा विचार हो, जैसा कि मैंने पहले उल्लेख किया है।
निक कॉक्स

1
आर से स्ट्रिप्लॉट से भी बेहतर beeswarmपैकेज से प्लॉट हैं ।
जनवरी

1
@ जैनचेन हाँ यह बहुत अच्छा है, मैं इसे अपने उत्तर में जोड़ रहा हूं (यदि आप कृपया ऐसा कहते हैं तो)।
ज्यादा

1
मेरा उत्तर आँकड़े.स्टैकएक्सचेंज . com / questions / 13086 पर पोस्ट किया गया था , जिसे मैं इस प्रश्न का एक (असंगत रूप से संकीर्ण) संस्करण के रूप में देखता हूं। मैंने इसे सारांशित किया "बॉक्सप्लेट एल्गोरिथ्म को न बदलें: इसके बजाय डेटा को फिर से व्यक्त करें।" इस प्रश्न में "अनुकूलित" द्वारा संकेत दिया गया मुद्दा चर के उपयोगी पुनः अभिव्यक्ति खोजने के लिए खोज डेटा विश्लेषण की मानक तकनीकों द्वारा संबोधित किया गया है।
whuber

2

आप बॉक्सप्लॉट कर सकते हैं। मूंछ को परिभाषित करने के लिए अलग-अलग संभावनाएं हैं। पूंछ की मोटाई के आधार पर, आउटलेर्स के लिए नमूनों की संख्या और सहिष्णुता के आधार पर आप दो या अधिक चरम मात्राएँ चुन सकते हैं। आपकी समस्या को देखते हुए मैं IQR के माध्यम से परिभाषित मूंछ से बचूंगा।
जब तक आप अपने डेटा को बदलना नहीं चाहते हैं, जो इस मामले में समझ को कठिन बनाता है।


1
अंतिम वाक्य भी टिप्पणी के बिना पारित करने के लिए अयोग्य है। परिवर्तन एक रामबाण नहीं है, लेकिन अत्यधिक तिरछे डेटा को नहीं बदलने से समझने में आसानी नहीं होती है। यदि डेटा सभी सकारात्मक हैं, तो आप कम से कम रूट, लॉगरिदमिक या पारस्परिक पैमाने का उपयोग करके देख सकते हैं। यदि यह वास्तव में मदद नहीं करता है, तो वापस बंद करें।
निक कॉक्स

तिरछे डेटा को समझने में किन कठिनाइयों का आप उल्लेख कर रहे हैं? IQR पर निर्भर मूंछ वाले? हल्की पूंछ के साथ भी यह समस्या है। और हम भारी पूंछ के बारे में बात नहीं कर रहे हैं, स्वतंत्र रूप से तिरछा? ट्रांसफॉर्मेशन लाइटिंग टेल्स निश्चित रूप से अधिक नियमित रूप से बॉक्सप्लॉट देते हैं, लेकिन एक व्याख्या परत जोड़ते हैं, आराम के लिए व्यापारिक समझ। लेकिन कोई भी उस फीचर को कॉल कर सकता है अगर वह पसंद करता है।
क्वार्ट्ज

2
रूपांतरण अक्सर मदद करते हैं: यह मेरी निचली रेखा है। एक सांख्यिकीय व्यक्ति जिसने यह नहीं सीखा है कि लॉगरिदमिक स्केल (विशेष रूप से) पर बहुत सी चीजें स्पष्ट दिखती हैं, उनमें से एक सबसे पुरानी और सबसे प्रभावी चाल में से एक को गंभीरता से याद कर रहा है। आपको लगता है कि इनकार कर रहा था; मुझे आशा है कि मैंने आपको गलत समझा।
निक कॉक्स

1
मैं असहमत हूं। मैं हर समय अत्यधिक तिरछे डेटा को रूपांतरित करता हूं और मेरा अनुभव है कि यह सौंदर्यशास्त्र के प्रश्न से कहीं अधिक है। यह अक्सर काम करता है। एक अनाम सांख्यिकीविद् ने कुछ समय पहले लिखा था कि लॉगनॉर्मल सामान्य से अधिक सामान्य है। वह / वह थोड़ा मुखर हो रहा था लेकिन वहाँ भी एक महत्वपूर्ण सच्चाई है। (ऐसा नहीं है कि कई अन्य वितरण बेहतर फिट नहीं हो सकते।)
निक कॉक्स

1
मुझे लगता है कि मुझे दूसरों को न्याय करने के लिए यहाँ रुकने की ज़रूरत है, लेकिन मेरा नज़रिया सनकी नहीं है। परिवर्तन जैसे कम एक संभावना के रूप में चर्चा की है stats.stackexchange.com/questions/13086/... मेरा सुझाव है कि आप का जवाब या टिप्पणी वहाँ समझाने के लिए क्यों कि सलाह अस्वस्थ है।
निक कॉक्स

0

मुझे लगता है कि यह सवाल डेटा को समझने के बारे में है (अन्यथा "इसे प्रबंधित करने" के विपरीत)
यदि डेटा भारी पूंछ और / या मल्टीमॉडल हैं, तो मुझे ये ggplot2 की "परतें" बहुत उपयोगी लगती हैं : geom_violinऔर geom_jitter


3
क्या आप संक्षेप में बता सकते हैं कि वायलिन के प्लॉट और / या घबराने वाले बिंदु भारी पूंछ वाले वितरण के साथ क्यों उपयोगी होंगे?
CHL
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.