आर में कर्नेल घनत्व आकलन में "पीडीएफ" के तहत क्षेत्र


15

मैं कर्नेल घनत्व अनुमान करने के लिए R में ' घनत्व ' फ़ंक्शन का उपयोग करने का प्रयास कर रहा हूं । मैं के रूप में ऐसा लगता है वक्र के तहत क्षेत्र जरूरी 1. किसी भी के लिए नहीं है कुछ परेशानी परिणाम की व्याख्या और विभिन्न डेटासेट की तुलना कर रहा हूँ प्रायिकता घनत्व समारोह (पीडीएफ) , हम क्षेत्र की आवश्यकता है - φ ( x ) d x = 1 । मैं मान रहा हूं कि कर्नेल घनत्व का अनुमान पीडीएफ रिपोर्ट करता है। मैं उपयोग कर रहा हूँ integrate.xy से sfsmisc वक्र के तहत क्षेत्र अनुमान लगाने के लिए।φ(एक्स)-φ(एक्स)एक्स=1

> # generate some data
> xx<-rnorm(10000)
> # get density
> xy <- density(xx)
> # plot it
> plot(xy)

घनत्व की साजिश

> # load the library
> library(sfsmisc)
> integrate.xy(xy$x,xy$y)
[1] 1.000978
> # fair enough, area close to 1
> # use another bw
> xy <- density(xx,bw=.001)
> plot(xy)

bw = .001 के साथ घनत्व

> integrate.xy(xy$x,xy$y)
[1] 6.518703
> xy <- density(xx,bw=1)
> integrate.xy(xy$x,xy$y)
[1] 1.000977
> plot(xy)

bw = 1 के साथ घनत्व

> xy <- density(xx,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 6507.451
> plot(xy)

बीडब्ल्यू = 1e-6 के साथ घनत्व

वक्र के नीचे का क्षेत्र हमेशा 1 नहीं होना चाहिए? ऐसा लगता है कि छोटे बैंडवादक एक समस्या हैं, लेकिन कभी-कभी आप विवरणों को पूंछों में दिखाना चाहते हैं और छोटे बैंडवाइड्स की आवश्यकता होती है।

अद्यतन / उत्तर:

220

> xy <- density(xx,n=2^15,bw=.001)
> plot(xy)

पर नमूना करने के लिए अंक की उच्च संख्या के साथ घनत्व

> integrate.xy(xy$x,xy$y)
[1] 1.000015
> xy <- density(xx,n=2^20,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 2.812398


3
यह घनत्व में फ्लोटिंग पॉइंट लिमिटेशन की तरह दिखता है (): 1e-6 की बैंडविड्थ का उपयोग करते हुए, आप 10,000 स्पाइक्स का एक संग्रह (सिद्धांत में) बना रहे हैं, प्रत्येक कुल द्रव्यमान 1/10000। उन स्पाइक्स को मुख्य रूप से उनकी चोटियों द्वारा प्रतिनिधित्व किया जा रहा है, बिना अंतराल के पर्याप्त रूप से विशेषता है। आप केवल अपनी सीमाओं से परे घनत्व () को बढ़ा रहे हैं।
whuber

@whuber, फ्लोटिंग पॉइंट लिमिटेशन से, क्या आपका मतलब है कि सीमा का सटीक होना, क्योंकि फ्लोट्स का उपयोग करने से डबल्स का उपयोग करने की तुलना में त्रुटि का अधिक से अधिक मूल्यांकन होगा। मुझे नहीं लगता कि मैं देखता हूं कि ऐसा कैसे होगा लेकिन कुछ सबूत देखना चाहते हैं।
highBandWidth

n

1

@ Anony-Mousse, हाँ, यही सवाल पूछ रहा है। यह 1 का मूल्यांकन क्यों नहीं कर रहा है?
HighBandWidth

जवाबों:


9

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


इसका मतलब है कि हम चोटियों को "ओवरसम्पलिंग" कर रहे हैं और घाटियों को "अंडरस्क्लेमप्लिंग" कर रहे हैं, कुछ हाथ से काम करने वाले अर्थों में। चूंकि विज़ुअलाइज़ेशन भी ट्रेपेज़ोइडल नियम (नमूनों के रैखिक प्रक्षेप) का अनुसरण करता है, ऐसा लगता है कि दृश्य के लिए बहुत छोटा कर्नेल बैंडविड्थ भी खराब है। इसके अलावा, यदि हम बड़ी संख्या में अंक प्राप्त कर सकते हैं जिस पर हम घनत्व की गणना करते हैं, तो समस्या कम होगी।
highBandWidth

1
इस स्पष्टीकरण में पानी नहीं है। समस्या यह है कि घनत्व अपर्याप्त रूप से विवेकाधीन है, न कि यह कि ट्रेपोजॉइड नियम बुरी तरह से टूट जाता है। एकीकृत () सही उत्तर पाने के लिए असहाय है क्योंकि घनत्व () सही प्रतिनिधित्व नहीं देता है। इसे देखने के लिए, बस xy $ x का निरीक्षण करें: इसमें केवल ५१० मूल्य हैं जो १०,००० संकीर्ण स्पाइक्स का प्रतिनिधित्व करते हैं!
whuber

@ शुभंकर, यही जवाब दिया। बिंदु यह है कि आपको नमूनों की परिमित संख्या के लिए समलम्बाकार नियम का उपयोग करने की आवश्यकता है, और यह गुठली के अनुसार एक निरंतर अक्ष पर वास्तविक घनत्व की तुलना में क्षेत्र को कम कर देता है। प्रश्न के अंत में मेरा अपडेट इस पर विस्तृत है।
highBandWidth

1
@ हइ न; ट्रैपेज़ॉइडल नियम ठीक काम कर रहा है। समस्या यह है कि यह एकीकृत के एक गलत विवेक के साथ काम कर रहा है। जब संभवत: 10,000 डेटा बिंदु हों और घनत्व सरणी में केवल 512 मान हों, तो आपके पास "डेटा बिंदुओं के अनुरूप बहुत सारे संकीर्ण स्पाइक्स" नहीं हो सकते हैं!
whuber

1
इन ग्राफ़ों को देखते हुए, मैं अब सोच रहा हूँ कि समस्या के densityबजाय के साथ है integrate.xy। एन के साथ = 10000 और BW = 1E6, आप होगा है 1E6 के बारे में प्रत्येक दांत की ऊंचाई के साथ एक कंघी को देखने के लिए, और दांत के बजाय 0. चारों ओर सघन किया जा रहा है, तब भी आप एक पहचानी घंटी के आकार का वक्र देखते हैं। तो आप densityको धोखा दे रहा है, या कम से कम इसका इस्तेमाल छोटे बैंडविद के साथ अलग तरीके से किया nजाना चाहिए : डिफ़ॉल्ट के बजाय (डेटा की सीमा) / (बीडब्ल्यू) होना चाहिए n=512। इंटरग्रेटर को इन विशाल मूल्यों में से एक को चुनना होगा जो densityएक दुखी संयोग से वापस आता है।
StasK

-1

यह ठीक है, आप इसे स्थानांतरण और स्केलिंग को ठीक कर सकते हैं; सबसे छोटी संख्या को ऐसे जोड़ें कि घनत्व गैर-ऋणात्मक हो, फिर पूरी चीज़ को एक स्थिर से गुणा करें जैसे कि क्षेत्र एकता है। यह आसान तरीका है।

एल2सी[φ(एक्स)-सी]+


2
सूचना है कि प्रश्न नहीं बल्कि पर है क्योंdensity समारोह "उचित" घनत्व का उत्पादन नहीं करता है कि 1 से जुड़ता है - बल्कि तो इसे ठीक करने पर।
टिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.