हिस्टोग्राम के आधार पर डेटा के अनुमानित वितरण का आकलन करना


111

मान लीजिए मैं देखना चाहता हूं कि क्या हिस्टोग्राम (यानी दाईं ओर तिरछी) के आधार पर मेरा डेटा घातीय है।

मैं डेटा को कैसे समूह या बिन करता हूं, इसके आधार पर, मैं बेतहाशा अलग-अलग हिस्टोग्राम प्राप्त कर सकता हूं।

हिस्टोग्राम का एक सेट बना देगा कि डेटा घातीय है। एक अन्य सेट यह प्रतीत होगा कि डेटा घातीय नहीं हैं। मैं अच्छी तरह से परिभाषित हिस्टोग्राम से वितरण का निर्धारण कैसे करूँ?


20
हिस्टोग्राम के बारे में क्यों नहीं भूलना चाहिए, क्योंकि आपके द्वारा वर्णित समस्याओं को अच्छी तरह से स्थापित किया गया है, और क्यूई प्लॉट और फिट परीक्षणों की अच्छाई जैसे वैकल्पिक साधनों पर विचार करें?
whuber

जवाबों:


163

अनुमान लगाने के लिए हिस्टोग्राम का उपयोग करने में कठिनाई

जबकि हिस्टोग्राम अक्सर उपयोगी होते हैं और कभी-कभी उपयोगी होते हैं, वे भ्रामक हो सकते हैं। बिन सीमाओं के स्थानों में परिवर्तन के साथ उनकी उपस्थिति काफी बदल सकती है।

इस समस्या को लंबे समय से जाना जाता है *, हालांकि शायद उतना व्यापक रूप से नहीं होना चाहिए जितना कि - आपको शायद ही कभी प्राथमिक-स्तरीय चर्चाओं में इसका उल्लेख मिलता है (हालांकि अपवाद हैं)।

* उदाहरण के लिए, पॉल रुबिन [1] ने इसे इस तरह रखा: " यह सर्वविदित है कि हिस्टोग्राम में अंतिम बिंदुओं को बदलने से इसकी उपस्थिति में काफी बदलाव आ सकता है "। ।

मुझे लगता है कि यह एक मुद्दा है जिसे हिस्टोग्राम्स पेश करते समय अधिक व्यापक रूप से चर्चा की जानी चाहिए। मैं कुछ उदाहरण और चर्चा दूंगा।

आपको डेटा सेट के एकल हिस्टोग्राम पर निर्भर होने से सावधान रहना चाहिए

इन चार हिस्टोग्राम पर एक नज़र डालें:

चार हिस्टोग्राम

यह चार बहुत अलग दिखने वाला हिस्टोग्राम है।

यदि आप निम्नलिखित डेटा पेस्ट करते हैं (मैं यहां R का उपयोग कर रहा हूं):

Annie <- c(3.15,5.46,3.28,4.2,1.98,2.28,3.12,4.1,3.42,3.91,2.06,5.53,
5.19,2.39,1.88,3.43,5.51,2.54,3.64,4.33,4.85,5.56,1.89,4.84,5.74,3.22,
5.52,1.84,4.31,2.01,4.01,5.31,2.56,5.11,2.58,4.43,4.96,1.9,5.6,1.92)
Brian <- c(2.9, 5.21, 3.03, 3.95, 1.73, 2.03, 2.87, 3.85, 3.17, 3.66, 
1.81, 5.28, 4.94, 2.14, 1.63, 3.18, 5.26, 2.29, 3.39, 4.08, 4.6, 
5.31, 1.64, 4.59, 5.49, 2.97, 5.27, 1.59, 4.06, 1.76, 3.76, 5.06, 
2.31, 4.86, 2.33, 4.18, 4.71, 1.65, 5.35, 1.67)
Chris <- c(2.65, 4.96, 2.78, 3.7, 1.48, 1.78, 2.62, 3.6, 2.92, 3.41, 1.56, 
5.03, 4.69, 1.89, 1.38, 2.93, 5.01, 2.04, 3.14, 3.83, 4.35, 5.06, 
1.39, 4.34, 5.24, 2.72, 5.02, 1.34, 3.81, 1.51, 3.51, 4.81, 2.06, 
4.61, 2.08, 3.93, 4.46, 1.4, 5.1, 1.42)
Zoe <- c(2.4, 4.71, 2.53, 3.45, 1.23, 1.53, 2.37, 3.35, 2.67, 3.16, 
1.31, 4.78, 4.44, 1.64, 1.13, 2.68, 4.76, 1.79, 2.89, 3.58, 4.1, 
4.81, 1.14, 4.09, 4.99, 2.47, 4.77, 1.09, 3.56, 1.26, 3.26, 4.56, 
1.81, 4.36, 1.83, 3.68, 4.21, 1.15, 4.85, 1.17)

तब आप उन्हें स्वयं उत्पन्न कर सकते हैं:

opar<-par()
par(mfrow=c(2,2))
hist(Annie,breaks=1:6,main="Annie",xlab="V1",col="lightblue")
hist(Brian,breaks=1:6,main="Brian",xlab="V2",col="lightblue")
hist(Chris,breaks=1:6,main="Chris",xlab="V3",col="lightblue")
hist(Zoe,breaks=1:6,main="Zoe",xlab="V4",col="lightblue")
par(opar)

अब इस स्ट्रिप चार्ट को देखें:

x<-c(Annie,Brian,Chris,Zoe)
g<-rep(c('A','B','C','Z'),each=40)
stripchart(x~g,pch='|')
abline(v=(5:23)/4,col=8,lty=3)
abline(v=(2:5),col=6,lty=3)

4 स्ट्रिप चार्ट

(यदि यह अभी भी स्पष्ट नहीं है, देखो क्या होता है जब आप प्रत्येक सेट से एनी के डेटा घटाना: head(matrix(x-Annie,nrow=40)))

डेटा को केवल 0.25 तक हर बार छोड़ दिया गया है।

फिर भी हिस्टोग्राम से हमें जो इंप्रेशन मिलते हैं - राइट स्क्यू, यूनिफॉर्म, लेफ्ट स्क्यू और बिमोडल - बिलकुल अलग थे। हमारी छाप पूरी तरह से न्यूनतम के सापेक्ष पहले बिन-मूल के स्थान द्वारा शासित थी।

इसलिए न केवल 'एक्सपोनेंशियल' बनाम 'नॉट-वास्तव में एक्सपोनेंशियल' बल्कि 'राइट स्क्यू' बनाम 'लेफ्ट स्क्यू' या 'बिमॉडल' बनाम 'यूनिफॉर्म' को सिर्फ वहीं घुमाएं जहां आपके डिब्बे शुरू होते हैं।


संपादित करें: यदि आप द्विपद को बदलते हैं, तो आप इस तरह से सामान प्राप्त कर सकते हैं:

तिरछा बनाम बेल

यह दोनों मामलों में समान 34 अवलोकन हैं, बस अलग-अलग ब्रेकप्वाइंट, एक के साथ और दूसरे के साथ एक बैंडविड्थ ।0.810.8

x <- c(1.03, 1.24, 1.47, 1.52, 1.92, 1.93, 1.94, 1.95, 1.96, 1.97, 1.98, 
  1.99, 2.72, 2.75, 2.78, 2.81, 2.84, 2.87, 2.9, 2.93, 2.96, 2.99, 3.6, 
  3.64, 3.66, 3.72, 3.77, 3.88, 3.91, 4.14, 4.54, 4.77, 4.81, 5.62)
hist(x,breaks=seq(0.3,6.7,by=0.8),xlim=c(0,6.7),col="green3",freq=FALSE)
hist(x,breaks=0:8,col="aquamarine",freq=FALSE)

निफ्टी, एह?

हां, ऐसा करने के लिए उन आंकड़ों को जानबूझकर उत्पन्न किया गया था ... लेकिन सबक स्पष्ट है - जो आपको लगता है कि आप हिस्टोग्राम में देखते हैं, वह डेटा का विशेष रूप से सटीक प्रभाव नहीं हो सकता है।

हम क्या कर सकते है?

हिस्टोग्राम व्यापक रूप से उपयोग किया जाता है, अक्सर प्राप्त करने के लिए सुविधाजनक होता है और कभी-कभी अपेक्षित होता है। ऐसी समस्याओं से बचने या कम करने के लिए हम क्या कर सकते हैं?

जैसा कि निक कॉक्स एक संबंधित प्रश्न के लिए एक टिप्पणी में बताते हैं : अंगूठे का नियम हमेशा यह होना चाहिए कि बिन चौड़ाई में भिन्नता और बिन मूल के विवरण मजबूत होने की संभावना है; ऐसे विवरण नाजुक या तुच्छ होने की संभावना है

कम से कम, आपको हमेशा कई अलग-अलग बिनवीड या बिन-ओरिजिन्स, या अधिमानतः दोनों पर हिस्टोग्राम करना चाहिए।

वैकल्पिक रूप से, एक कर्नेल घनत्व की जांच करें कि बैंडविड्थ बहुत अधिक नहीं है।

एक अन्य दृष्टिकोण है कि कम कर देता है हिस्टोग्राम के मनमानेपन है औसतन हिस्टोग्राम स्थानांतरित कर दिया ,

एवरेज्ड शिफ्ट हिस्टोग्राम

(यह डेटा के उस हालिया सेट पर एक है) लेकिन अगर आप उस प्रयास में जाते हैं, तो मुझे लगता है कि आप कर्नेल घनत्व अनुमान का उपयोग कर सकते हैं।

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

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

[१]: रुबिन, पॉल (२०१४) "हिस्टोग्राम एब्यूज़!",
ब्लॉग पोस्ट, या एक ओबी दुनिया में , २३ जनवरी २०१४
लिंक ... (वैकल्पिक लिंक)


1
व्यावहारिक रूप से आवश्यकता का हर ग्राफ डेटा को इस तरह से काटता है। डिब्बे बस इतना छोटा है (धुरी के साथ एक पिक्सेल की चौड़ाई) कि यह कोई फर्क नहीं पड़ता?
AJMansfield

1
@AJMansfield यह "हर वितरण असतत है" कहने का एक सा है - जबकि सचमुच सच है, यह प्रासंगिक मुद्दे को अस्पष्ट करता है। एक बाइन किए गए अनुमानक में एक विशिष्ट संख्या में डिब्बे पिक्सेल की एक विशिष्ट संख्या की तुलना में बहुत छोटे होते हैं ... और किसी भी ग्राफिक्स के साथ जो एंटी-अलियासिंग का उपयोग करते हैं, पिक्सल की 'प्रभावी' संख्या बड़ी होती है (इसमें संभावित रूप से अंतर करना संभव है) पिक्सल्स के बीच के अंतर के अंतर)
ग्लेन_ बी

2
मूल मुद्दा यह है कि हिस्टोग्राम बड़े आकार पर निर्भर करते हैं। इसे प्राथमिकता तय करना मुश्किल है।

29

हिस्टोग्राम की तुलना में कर्नेल घनत्व या लॉगस्पलाइन प्लॉट एक बेहतर विकल्प हो सकता है। अभी भी कुछ विकल्प हैं जो इन विधियों के साथ सेट किए जा सकते हैं, लेकिन वे हिस्टोग्राम की तुलना में कम चंचल हैं। साथ ही qqplots भी हैं। यह देखने के लिए एक अच्छा उपकरण है कि क्या डेटा एक सैद्धांतिक वितरण के लिए पर्याप्त करीब है:

 Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne,
 D.F and Wickham, H. (2009) Statistical Inference for exploratory
 data analysis and model diagnostics Phil. Trans. R. Soc. A 2009
 367, 4361-4383 doi: 10.1098/rsta.2009.0120

विचार का संक्षिप्त संस्करण (अभी भी विवरण के लिए कागज पढ़ें) यह है कि आप अशक्त वितरण से डेटा उत्पन्न करते हैं और कई प्लॉट बनाते हैं जिनमें से एक मूल / वास्तविक डेटा है और बाकी सैद्धांतिक वितरण से सिम्युलेटेड हैं। आप तब किसी को (संभवतः अपने आप को) प्लॉट पेश करते हैं, जिसने मूल डेटा नहीं देखा है और देखें कि क्या वे वास्तविक डेटा को निकाल सकते हैं। यदि वे वास्तविक डेटा की पहचान नहीं कर सकते हैं तो आपके पास अशक्त के खिलाफ सबूत नहीं हैं।

vis.testआर के लिए TeachingDemos पैकेज में समारोह इस परीक्षण का एक रूप को लागू करने में मदद।

यहाँ एक त्वरित उदाहरण है। नीचे दिए गए भूखंडों में से एक 25 डिग्री पर 10 डिग्री की स्वतंत्रता के साथ वितरण से उत्पन्न होता है, अन्य 8 सामान्य माध्य और भिन्नता वाले समान वितरण से उत्पन्न होते हैं।

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

vis.testइस साजिश बनाई और फिर समारोह का चयन करने के जो भूखंडों उन्हें लगता है कि अलग है की, तो प्रक्रिया 2 बार (3 कुल) दोहराता उपयोगकर्ता संकेत देता है।


@ScottStafford, मैंने ऊपर कथानक की एक प्रति जोड़ी। यह एक qqplots का उपयोग करता है, लेकिन फ़ंक्शन हिस्टोग्राम्स भी उत्पन्न करेगा या घनत्व भूखंडों को प्रोग्राम किया जा सकता है।
ग्रेग स्नो

28

संचयी वितरण भूखंड [ MATLAB , R ] - जहाँ आप डेटा मानों के अंश को मानों की एक सीमा से कम या बराबर करते हैं - अनुभवजन्य डेटा के वितरण को देखने का सबसे अच्छा तरीका है। यहाँ, उदाहरण के लिए, R में उत्पादित इस डेटा के ECDF हैं :

ऐलिस, ब्रायन, क्रिस और ज़ो के ईसीडीएफ भूखंड

यह निम्नलिखित आर इनपुट (उपरोक्त डेटा के साथ) के साथ उत्पन्न किया जा सकता है:

plot(ecdf(Annie),xlim=c(min(Zoe),max(Annie)),col="red",main="ECDFs")
lines(ecdf(Brian),col="blue")
lines(ecdf(Chris),col="green")
lines(ecdf(Zoe),col="orange")

जैसा कि आप देख सकते हैं, यह स्पष्ट रूप से स्पष्ट है कि ये चार वितरण केवल एक दूसरे के अनुवाद हैं। सामान्य तौर पर, डेटा के अनुभवजन्य वितरण के दृश्य के लिए ईसीडीएफ के लाभ हैं:

  1. वे केवल डेटा को प्रस्तुत करते हैं क्योंकि यह वास्तव में संचय के अलावा किसी भी परिवर्तन के साथ नहीं होता है, इसलिए गलती से अपने आप को धोखा देने की कोई संभावना नहीं है, क्योंकि हिस्टोग्राम और कर्नेल घनत्व अनुमानों के साथ है, क्योंकि आप डेटा को कैसे संसाधित कर रहे हैं।
  2. वे डेटा के वितरण का एक स्पष्ट दृश्य अर्थ देते हैं क्योंकि प्रत्येक बिंदु उसके पहले और बाद में सभी डेटा से बफर हो जाता है। इसे गैर-संचयी घनत्व विज़ुअलाइज़ेशन के साथ तुलना करें, जहां प्रत्येक घनत्व की सटीकता स्वाभाविक रूप से अप्रभावित है, और इस प्रकार या तो बाइनिंग (हिस्टोग्राम) या स्मूथिंग (केडीई) द्वारा अनुमान लगाया जाना चाहिए।
  3. वे समान रूप से अच्छी तरह से काम करते हैं चाहे डेटा एक अच्छा पैरामीट्रिक वितरण, कुछ मिश्रण, या एक गड़बड़ गैर पैरामीट्रिक वितरण का अनुसरण करता है।

एकमात्र चाल सीख रही है कि ईसीडीएफ को ठीक से कैसे पढ़ा जाए: उथले ढलान वाले क्षेत्रों का अर्थ है विरल वितरण, खड़ी ढलान वाले क्षेत्रों का अर्थ है घना वितरण। एक बार जब आप उन्हें पढ़ने के लिए लटका देते हैं, हालांकि, वे अनुभवजन्य डेटा के वितरण को देखने के लिए एक अद्भुत उपकरण हैं।


क्या सीडीएफ को पढ़ने के लिए कोई दस्तावेज उपलब्ध है? उदाहरण के लिए, यदि आप जैसा मेरा सीएफडी वितरण ऊपर दिखा चुके हैं तो हम इसे कैसेट, सामान्य या अन्य वितरण में वर्गीकृत कर सकते हैं जो कि लुक पर आधारित है
आँकड़े

2

सुझाव: हिस्टोग्राम आमतौर पर केवल एक्स-एक्सिस डेटा प्रदान करते हैं जो कि बिन के मध्य बिंदु पर होता है और अधिक सटीकता के स्थान के एक्स-एक्सिस उपायों को छोड़ देता है। फिट के डेरिवेटिव पर इसका प्रभाव काफी बड़ा हो सकता है। आइए हम एक तुच्छ उदाहरण लें। मान लें कि हम एक डिराक डेल्टा की शास्त्रीय व्युत्पत्ति लेते हैं, लेकिन इसे संशोधित करते हैं ताकि हम एक परिमित पैमाने (पूर्ण चौड़ाई आधा-अधिकतम) के साथ कुछ मनमाने ढंग से मध्य स्थान पर कॉची वितरण के साथ शुरू करें। फिर हम सीमा लेते हैं क्योंकि पैमाने शून्य हो जाता है। यदि हम हिस्टोग्राम की शास्त्रीय परिभाषा का उपयोग करते हैं और बिन आकार नहीं बदलते हैं तो हम न तो स्थान और पैमाने पर कब्जा करेंगे। यदि फिर भी, हम निश्चित चौड़ाई के डिब्बे के भीतर एक मध्य स्थान का उपयोग करते हैं, तो हम हमेशा स्थान को कैप्चर करेंगे, यदि स्केल नहीं है, जब स्केल बिन चौड़ाई के सापेक्ष छोटा है।

फिटिंग मानों के लिए जहां डेटा तिरछा है, निश्चित बिन मिडपॉइंट का उपयोग करके एक्स-अक्ष उस क्षेत्र में पूरे वक्र खंड को स्थानांतरित कर देगा, जो मुझे लगता है कि ऊपर दिए गए प्रश्न से संबंधित है।

चरण 1 मज़ेदार हिस्टोयहाँ एक लगभग समाधान है। मैंने उपयोग कियाn=8प्रत्येक हिस्टोग्राम श्रेणी में, और बस इन्हें प्रत्येक बिन से माध्य एक्स-अक्ष मान के रूप में प्रदर्शित किया जाता है। चूंकि प्रत्येक हिस्टोग्राम बिन का मूल्य 8 है, इसलिए वितरण सभी समान दिखते हैं, और मुझे उन्हें दिखाने के लिए लंबवत ऑफसेट करना पड़ा। प्रदर्शन सही उत्तर नहीं है, लेकिन यह जानकारी के बिना नहीं है। यह हमें सही ढंग से बताता है कि समूहों के बीच एक एक्स-अक्ष ऑफसेट है। यह हमें यह भी बताता है कि वास्तविक वितरण थोड़ा U आकार का प्रतीत होता है। क्यों? ध्यान दें कि औसत मानों के बीच की दूरी केंद्रों में अलग है, और किनारों पर करीब है। इसलिए, इसे एक बेहतर प्रतिनिधित्व बनाने के लिए, हमें एक्स-एक्सिड इक्वेडिस्ट पर सभी माध्य बिन मान बनाने के लिए प्रत्येक बिन सीमा नमूने के पूरे नमूने और आंशिक मात्रा में उधार लेना चाहिए। इसे ठीक करने और इसे ठीक से प्रदर्शित करने के लिए थोड़ी प्रोग्रामिंग की आवश्यकता होगी। परंतु, यह सिर्फ हिस्टोग्राम बनाने का एक तरीका हो सकता है ताकि वे वास्तव में अंतर्निहित डेटा को कुछ तार्किक प्रारूप में प्रदर्शित करें। यदि हम डेटा की सीमा को कवर करते हुए कुल डब्बे को बदलते हैं, तो आकार फिर भी बदल जाएगा, लेकिन विचार यह है कि मनमाने ढंग से बिनिंग द्वारा बनाई गई कुछ समस्याओं को हल करना है।

चरण 2 तो चलिए साधनों को समान रूप से स्थान देने के प्रयास के लिए डिब्बे के बीच उधार लेना शुरू करें।यहाँ छवि विवरण दर्ज करें

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

चरण 3 मूल्यों और मूल्यों के कुछ हिस्सों को साझा करना। histo3

जैसा कि कोई देख सकता है, एक बिन सीमा पर एक मूल्य के कुछ हिस्सों का बंटवारा औसत मूल्यों के बीच की दूरी की एकरूपता में सुधार कर सकता है। मैं दिए गए डेटा के साथ तीन दशमलव स्थानों पर ऐसा करने में कामयाब रहा। हालाँकि, कोई ऐसा नहीं कर सकता है, मुझे नहीं लगता कि औसत मानों के बीच की दूरी सामान्य रूप से समान हो, क्योंकि डेटा का तालमेल इसकी अनुमति नहीं देगा।

हालांकि, अन्य चीजें जैसे कर्नेल घनत्व आकलन का उपयोग कर सकते हैं ।

यहां हम एनी के डेटा को 0.1, 0.2 और 0.4 के गॉसियन स्मूथिंग्स का उपयोग करके एक बंधे हुए कर्नेल घनत्व के रूप में देखते हैं। अन्य विषयों में एक ही प्रकार के कार्यों को स्थानांतरित कर दिया जाएगा, बशर्ते कि जैसा मैंने किया वैसा ही प्रत्येक डेटा सेट के निचले और ऊपरी सीमा का उपयोग करें। तो, यह अब हिस्टोग्राम नहीं है, लेकिन एक पीडीएफ है, और यह कुछ मौसा के बिना हिस्टोग्राम के रूप में एक ही भूमिका निभाता है।

kernelsmooth

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.