matlab - english - संचयी आवृत्ति वक्र




Matlab: एक वक्र के साथ आवृत्ति वितरण की साजिश रचने (2)

कैसे splines के साथ interpolating के बारे में?

nbins = 10; %// number of bins for original histogram
n_interp = 500; %// number of values for interpolation
[counts, bins] = hist(data, nbins);
bins_interp = linspace(bins(1), bins(end), n_interp);
counts_interp = interp1(bins, counts, bins_interp, 'spline');
plot(bins, counts) %// original histogram
figure
plot(bins_interp, counts_interp) %// interpolated histogram

उदाहरण: चलो

data = randn(1,1e4);

मूल हिस्टोग्राम:

अंतर्वेशित:

अपने कोड के बाद, ऊपर के आंकड़ों में वाई अक्ष गिनती देता है, न कि संभाव्यता घनत्व । संभावना घनत्व पाने के लिए आपको सामान्य करने की आवश्यकता है:

normalization = 1/(bins(2)-bins(1))/sum(counts);
plot(bins, counts*normalization) %// original histogram
plot(bins_interp, counts_interp*normalization) %// interpolated histogram

चेक: कुल क्षेत्र लगभग 1 होना चाहिए:

>> trapz(bins_interp, counts_interp*normalization)
ans =
    1.0009

मुझे एक ग्राफ़ पर 10 फ़्रीक्वेंसी वितरण को छानना होगा। चीजें सुव्यवस्थित रखने के लिए, मैं हिस्टोग्राम को डिब्बे से नहीं बचना चाहूंगा और ये प्रत्येक हिस्टोग्राम प्लॉट के समोच्च का अनुसरण करने वाली रेखाएं पसंद करना चाहेंगे।

मैंने निम्नलिखित की कोशिश की

[counts, bins] = hist(data);
plot(bins, counts)

लेकिन यह मुझे एक बहुत ही अनियंत्रित और दांतेदार लाइन देता है

मैं केएसडीसीटीटी के बारे में पढ़ता हूं, जो मुझे एक अच्छा वक्र देता है, लेकिन यह मेरी वाई-अक्ष के स्केलिंग को बदलता है और मुझे y- अक्ष से आवृत्तियों को पढ़ने में सक्षम होना चाहिए।

क्या आप कुछ और सुझा सकते हैं?


आप अपने हिस्टोग्राम के लिए डिब्बे की डिफ़ॉल्ट संख्या का उपयोग कर रहे हैं और, मैं कर्नेल घनत्व आकलन गणनाओं के लिए अनुमान लगाऊंगा।

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

यदि आपको अभी भी पसंद नहीं है, तो परिणामस्वरूप साजिश को कितना चिकना करना है, आप ksdensity से bins आउटपुट का उपयोग करके आगे की इनपुट के रूप में ksdensity कोशिश कर सकते हैं। शायद ऐसा कुछ:

[kcounts,kbins] = ksdensity(data,bins,'npoints',length(bins));

मेरे पास आपका डेटा नहीं है, इसलिए आपको सटीक रूप से प्राप्त करने के लिए पैरामीटर कुछ के साथ खेलना पड़ सकता है जो आप चाहते हैं।

वैकल्पिक रूप से, आप उन बिंदुओं के माध्यम से एक spline फ़िट करने का प्रयास कर सकते हैं जो आप hist से प्राप्त करते हैं और इसके बदले में प्लॉट करते हैं।

कुछ कोड:

data = randn(1,1e4);

optN = sshist(data);

figure(1)
[N,Center] = hist(data);
[Nopt,CenterOpt] = hist(data,optN);
[f,xi] = ksdensity(data,CenterOpt);

dN = mode(diff(Center));
dNopt = mode(diff(CenterOpt));

plot(Center,N/dN,'.-',CenterOpt,Nopt/dNopt,'.-',xi,f*length(data),'.-')
legend('Default','Optimum','ksdensity')

परिणाम:

ध्यान दें कि "इष्टतम" बिन चौड़ाई वितरण के कुछ अच्छे ढांचे को सुरक्षित रखती है (मुझे इसे स्पाइक्स प्राप्त करने के लिए दो बार चलाने की ksdensity ), जबकि ksdensity एक चिकनी वक्र देता है। आप अपने डेटा में जो खोज रहे हैं उसके आधार पर, यह अच्छा या बुरा हो सकता है





distribution