次の形式のデータセットがあります
周波数、方向、正規化されたパワースペクトル密度、広がり、歪度、尖度
scipyのスキュー正規分布のトップアンサーのコードを使用して特定のレコードの分布を視覚化することはできますが、尖度値を分布に適用する方法がわかりませんか?
from scipy import linspace
from scipy import pi,sqrt,exp
from scipy.special import erf
from pylab import plot,show
def pdf(factor, x):
return (100*factor)/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, norm_psd=1):
t = (x-e) / w
return 2 / w * pdf(norm_psd, t) * cdf(a*t)
n = 540
e = 341.9 # direction
w = 59.3 # spread
a = 3.3 # skew
k = 4.27 # kurtosis
n_psd = 0.5 # normalised power spectral density
x = linspace(-90, 450, n)
p = skew(x, e, w, a, n_psd)
print max(p)
plot(x,p)
show()
編集:上記の分布に尖度値を適用することは実際には不可能だと思うので、タイトルからスキュー正規分布を削除しました。方向が関係しているため、別の分布が必要だと思います。循環統計からの分布の方が適切な場合があります。 ?
以下の回答のおかげで、以下のコードに示されているpdf_mvsk関数を使用して尖度を適用できます。残念ながら、スキュー値によって負のy値が発生しますが、回答は私の質問を満たします。
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.sandbox.distributions.extras as extras
pdffunc = extras.pdf_mvsk([341.9, 59.3, 3.3, 4.27])
range = np.arange(0, 360, 0.1)
plt.plot(range, pdffunc(range))
plt.show()