将峰度应用于python中的分布

时间:2012-05-30 10:20:27

标签: python statistics scipy distribution

我有一个格式为

的数据集

频率,方向,归一化功率谱密度,扩展,偏度,峰度

我能够使用skew normal distribution in 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()

1 个答案:

答案 0 :(得分:4)

如果你有平均值,标准差,倾斜度和峰度,那么你可以使用Gram-Charlier扩展来建立近似正态的分布。

我前一段时间研究过这个问题,scipy.stats的功能出错并被删除了。

我不记得这是什么状态,因为很久以前我把它放在statsmodels沙盒中 http://statsmodels.sourceforge.net/devel/generated/statsmodels.sandbox.distributions.extras.pdf_mvsk.html#statsmodels.sandbox.distributions.extras.pdf_mvsk