scipy

2011-05-04 13 views
16

में सामान्य वितरण skew सामान्य किसी को पता है कि कैसे एक skew सामान्य वितरण के साथ सामान्य वितरण? मुझे लगता है कि आँकड़े। नॉर्म क्लास का उपयोग किया जा सकता है लेकिन मैं बस यह नहीं समझ सकता कि कैसे। इसके अलावा, मैं एक असामान्य डेटासेट के सामान्य वितरण को वर्णित पैरामीटर का अनुमान कैसे लगा सकता हूं?scipy

उत्तर

36

विकिपीडिया description से,

from scipy import linspace 
from scipy import pi,sqrt,exp 
from scipy.special import erf 

from pylab import plot,show 

def pdf(x): 
    return 1/sqrt(2*pi) * exp(-x**2/2) 

def cdf(x): 
    return (1 + erf(x/sqrt(2)))/2 

def skew(x,e=0,w=1,a=0): 
    t = (x-e)/w 
    return 2/w * pdf(t) * cdf(a*t) 
    # You can of course use the scipy.stats.norm versions 
    # return 2 * norm.pdf(t) * norm.cdf(a*t) 


n = 2**10 

e = 1.0 # location 
w = 2.0 # scale 

x = linspace(-10,10,n) 

for a in range(-3,4): 
    p = skew(x,e,w,a) 
    plot(x,p) 

show() 

आप e=1.0, w=2.0 और a=1.0 उपयोग करने वाले स्केल, स्थान, और आकार मापदंडों एक डाटासेट उपयोग scipy.optimize.leastsq से, उदाहरण के लिए खोजने के लिए चाहते हैं,

fzz = skew(x,e,w,a) + norm.rvs(0,0.04,size=n) # fuzzy data 

def optm(l,x): 
    return skew(x,l[0],l[1],l[2]) - fzz 

print leastsq(optm,[0.5,0.5,0.5],(x,)) 

आपको कुछ ऐसा देना चाहिए,

(array([ 1.05206154, 1.96929465, 0.94590444]), 1) 
+0

धन्यवाद @lafrasu! – Ben2209