rozkład normalny w scypiach

Czy ktoś wie jak wykreślić rozkład normalny z scipy? Domyślam się, że statystyki.Klasa norm może być używana, ale nie wiem jak. Ponadto, jak Mogę oszacować parametry opisujące przekrzywiony rozkład normalny jednowymiarowego zbioru danych?

Author: Ben2209, 2011-05-04

2 answers

Z opisu Wikipedii ,

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()

Jeśli chcesz znaleźć parametry skali, lokalizacji i kształtu z zestawu danych, użyj scipy.optimize.leastsq, na przykład używając e=1.0,w=2.0 i a=1.0,

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,))

Powinno dać ci coś w rodzaju,

(array([ 1.05206154,  1.96929465,  0.94590444]), 1)
 37
Author: lafras,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-20 14:26:29

Przyjęta odpowiedź jest mniej lub bardziej nieaktualna, ponieważ funkcja skewnorm jest teraz zaimplementowana w scipy. Więc kod można napisać dużo krócej:

 from scipy.stats import skewnorm
 import numpy as np
 from matplotlib import pyplot as plt

 X = np.linspace(min(your_data), max(your_data))
 plt.plot(X, skewnorm.pdf(X, *skewnorm.fit(your_data))
 1
Author: mcocdawc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-29 15:25:59