दुर्भाग्य से, मानक सामान्य (जिसमें से अन्य सभी को निर्धारित किया जा सकता है, क्योंकि सामान्य एक स्थान-स्केल परिवार है) क्वांटाइल फ़ंक्शन एक बंद फॉर्म (यानी 'एक सुंदर सूत्र') को स्वीकार नहीं करता है। एक बंद रूप के लिए निकटतम बात यह है कि मानक सामान्य मात्रात्मक फ़ंक्शन फ़ंक्शन, , जो अंतर समीकरण को संतुष्ट करता हैw
घ2wघपी2= डब्ल्यू ( डी)wघपी)2
और प्रारंभिक शर्तें और । अधिकांश कंप्यूटिंग वातावरण में एक फ़ंक्शन होता है जो सामान्य रूप से सामान्य मात्रात्मक फ़ंक्शन की गणना करता है। आर में, आप टाइप करेंगेw ( 1 / 2 ) = 0w'( 1 / 2 ) = 2 π--√
qnorm(p, mean=mu, sd=sigma)
वितरण के 'वें मात्रा प्राप्त करने के लिए ।पीएन( μ , σ2)
संपादित करें: समस्या की संशोधित समझ के साथ, डेटा मानदंडों के मिश्रण से उत्पन्न होता है, ताकि देखे गए डेटा का घनत्व निम्न हो:
p ( x) ) = ∑मैंwमैंपीमैं( x )
जहाँ और प्रत्येक माध्य और मानक विचलन साथ कुछ सामान्य घनत्व है । यह निम्नानुसार है कि देखे गए डेटा का CDF हैΣमैंwमैं= 1पीमैं( x )μमैंσमैं
एफ( y) = ∫y- ∞Σमैंwमैंपीमैं( x ) dx = ∑मैंwमैं∫y- ∞पीमैं( x ) = ∑मैंwमैंएफमैं( y)
जहां माध्य और मानक विचलन साथ सामान्य CDF है । एकीकरण और योग को परस्पर जोड़ा जा सकता है क्योंकि ये अभिन्न परिमित हैं। यह सीडीएफ एक कंप्यूटर पर गणना करने के लिए निरंतर और आसान है, इसलिए उलटा सीडीएफ, , जिसे क्वांटाइल फ़ंक्शन के रूप में भी जाना जाता है, एक लाइन खोज करके गणना की जा सकती है। मैं इस विकल्प के लिए डिफ़ॉल्ट हूं क्योंकि घटक के मिश्रण के क्वांटाइल फ़ंक्शन के लिए कोई सरल सूत्र, घटक वितरण के क्वांटाइल्स के फ़ंक्शन के रूप में, दिमाग में नहीं आता है।μ i σ i F - 1एफमैं( x )μमैंσमैंएफ- 1
निम्नलिखित R कोड संख्यात्मक रूप से गणना करता है जो लाइन खोज के लिए बाइसेक्शन का उपयोग करता है। फ़ंक्शन F_inv () क्वांटाइल फ़ंक्शन है, आपको वेक्टर को प्रत्येक युक्त और आपूर्ति करने की आवश्यकता है , । डब्ल्यू मैं , μ मैं , σ मैं पीएफ- 1wमैं, μमैं, σमैंपी
# evaluate the function at the point x, where the components
# of the mixture have weights w, means stored in u, and std deviations
# stored in s - all must have the same length.
F = function(x,w,u,s) sum( w*pnorm(x,mean=u,sd=s) )
# provide an initial bracket for the quantile. default is c(-1000,1000).
F_inv = function(p,w,u,s,br=c(-1000,1000))
{
G = function(x) F(x,w,u,s) - p
return( uniroot(G,br)$root )
}
#test
# data is 50% N(0,1), 25% N(2,1), 20% N(5,1), 5% N(10,1)
X = c(rnorm(5000), rnorm(2500,mean=2,sd=1),rnorm(2000,mean=5,sd=1),rnorm(500,mean=10,sd=1))
quantile(X,.95)
95%
7.69205
F_inv(.95,c(.5,.25,.2,.05),c(0,2,5,10),c(1,1,1,1))
[1] 7.745526
# data is 20% N(-5,1), 45% N(5,1), 30% N(10,1), 5% N(15,1)
X = c(rnorm(5000,mean=-5,sd=1), rnorm(2500,mean=5,sd=1),
rnorm(2000,mean=10,sd=1), rnorm(500, mean=15,sd=1))
quantile(X,.95)
95%
12.69563
F_inv(.95,c(.2,.45,.3,.05),c(-5,5,10,15),c(1,1,1,1))
[1] 12.81730