एक घनत्व समारोह के स्थानीय एक्सट्रैमा को स्प्लिन का उपयोग करके खोजना


15

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

तो, मेरे सवाल:

  1. से एक समारोह को देखते हुए splinefun, स्थानीय मैक्सीमा को कौन सी विधियाँ मिलेंगी?
  2. वहाँ एक आसान / मानक तरीका एक समारोह का उपयोग कर वापस पाने के लिए है splinefun?
  3. क्या संभावना घनत्व फ़ंक्शन के स्थानीय मैक्सिमा को खोजने का एक बेहतर / मानक तरीका है?

संदर्भ के लिए, नीचे मेरे घनत्व फ़ंक्शन का एक प्लॉट है। अन्य घनत्व कार्य जिनके साथ मैं काम कर रहा हूं वे फॉर्म में समान हैं। मुझे कहना चाहिए कि मैं आर के लिए नया हूं, लेकिन प्रोग्रामिंग के लिए नया नहीं हूं, इसलिए मुझे जो भी चाहिए उसे प्राप्त करने के लिए एक मानक पुस्तकालय या पैकेज हो सकता है। घनत्व फंक्शन

आपकी सहायता के लिए धन्यवाद!!


मुझे स्पष्ट नहीं है कि डेटा की बड़ी मात्रा 'पड़ोसियों के आसपास देखने' की विधि के लिए एक समस्या है। density()हर डेटम के घनत्व का अनुमान नहीं लगाता है, यह एन मानों पर घनत्व का अनुमान लगाता है , जहां n डिफ़ॉल्ट मान n = 512 के साथ एक उपयोगकर्ता-निर्दिष्ट पैरामीटर है
onestop

इसके लिए मेरा n 2 ^ 15 है और ऐसा लगता है कि डेटा का बिंदु-दर-बिंदु स्तर पर बहुत अधिक विचरण होता है। मैंने पड़ोस विधि (के माध्यम से msExtrema {msProcess}) के समान कुछ का उपयोग करके अधिकतम / मिनट खोजक लिखने की कोशिश की और केवल सहिष्णुता सेटिंग्स के साथ खेलकर, अधिकतम कुछ की पहचान करने में सक्षम था।
अनारोन्वेलिन

2
के लिए कोड को देखते हुए msExtrema, यह पैकेज peaksसे एक सरल आवरण है splus2R, जिसे आप सीधे उपयोग करना बेहतर होगा यदि आप केवल स्थानीय मैक्सिमा चाहते हैं न कि स्थानीय मिनीमा। मैं यह नहीं देख सकता कि डिफ़ॉल्ट का उपयोग span=3करने से सभी स्थानीय मैक्सीमा नहीं मिलेंगे। और 2 ^ 15 = 32768 दक्षता के लिए एक बड़ी चिंता का विषय नहीं होना चाहिए।
19'12

स्पलाइनफुन द्वारा लौटाए गए फ़ंक्शन में एक तर्क "व्युत्पन्न" है जो कि डिफ़ॉल्ट रूप से 0 है। पहली व्युत्पन्न के लिए व्युत्पन्न = 1 सेट करें।
सियान

1
हम्म, peaksछोटी गाड़ी प्रतीत होती है: यह max.colडिफ़ॉल्ट सेटिंग के साथ कॉल करता है ties.method = "random", जो न केवल यादृच्छिक पर संबंधों को तोड़ता है, बल्कि टाई घोषित करने के लिए 1e-5 की सापेक्ष सहिष्णुता भी निर्धारित करता है। पूर्व भ्रामक है, बाद वाला निश्चित रूप से वह नहीं है जो आप यहां चाहते हैं। peaks()एक strictपैरामीटर भी लेता है जो खराब दस्तावेज है और फ़ंक्शन के कोड को देखकर कुछ भी नहीं करता है। आह, उपयोगकर्ता योगदान सॉफ्टवेयर पुस्तकालयों की खुशियाँ! आप अच्छी तरह से इसे ठीक करने में सक्षम हो सकते हैं, जैसा कि आप कहते हैं कि आप प्रोग्रामिंग के लिए नए नहीं हैं,
on Junop

जवाबों:


14

आप जो करना चाहते हैं, उसे केमोमेट्रिक्स में पीक डिटेक्शन कहा जाता है। विभिन्न विधियाँ हैं जिनका आप उपयोग कर सकते हैं। मैं यहाँ केवल एक बहुत ही सरल दृष्टिकोण प्रदर्शित करता हूँ।

require(graphics)
#some data
d <- density(faithful$eruptions, bw = "sj")

#make it a time series
ts_y<-ts(d$y)

#calculate turning points (extrema)
require(pastecs)
tp<-turnpoints(ts_y)
#plot
plot(d)
points(d$x[tp$tppos],d$y[tp$tppos],col="red")

सभी समाधानों में, इसने सबसे अच्छा काम किया। 1. अनुवर्ती प्रश्न: क्या टर्नपॉइंट के साथ सहिष्णुता को टॉगल करने का एक तरीका है? घनत्व समारोह के लंबे पूंछ वाले हिस्से में बहुत सारी चोटियाँ और घाटियाँ मिलीं। 2. अनुवर्ती प्रश्न # 2: सहिष्णुता निर्धारित करने का एक अच्छा तरीका क्या है?
अनारोन्वेलिन

विज्ञापन 1. मुझे ऐसा नहीं लगता। यह समय श्रृंखला की यादृच्छिकता के परीक्षण के लिए है, इसलिए फ़ंक्शन को इसकी आवश्यकता नहीं है। आप खुद चोटी की प्रासंगिकता / महत्व को परखने की कोशिश कर सकते हैं। जैसे, आप पड़ोस के खिलाफ एक टी-टेस्ट कर सकते हैं (जहां आप यह तय कर सकते हैं कि पड़ोस कितना बड़ा होना चाहिए)। या आप (मास) स्पेक्ट्रोमेट्री या अन्य विश्लेषणात्मक रसायन विधियों से डेटा के मूल्यांकन के लिए आर संकुल में एक अधिक परिष्कृत फ़ंक्शन की तलाश कर सकते हैं।
रोलैंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.