如何在Python中生成一个给定均值、方差、偏度和峰度的分布?

20

random.gauss(mu, sigma)

上述函数可以随机从给定的平均值和方差的正态分布中绘制一个数字。但是,如何从定义由不止前两个矩定义的正态分布中绘制值呢?

例如:

random.gauss(mu, sigma, skew, kurtosis)


6
任何正态分布的偏度和峰度都为0。请使用其他分布族。 - Bennett Brown
2
注意,定义偏度和峰度的计算方法有几种。矩不等同于均值、方差、偏度和峰度,尽管它们具有相同的要旨。 - Bennett Brown
3
同时,这些矩并不能确定唯一的分布。请参考[类似的问题,但是询问R语言:https://dev59.com/7W445IYBdhLWcg3wiq4i] - Bennett Brown
我建议您查看此链接 - champion-runner
2个回答

10

使用scipy如何?您可以从scipy.stats库中的连续分布中选择所需的分布。

广义伽马函数具有非零偏斜度和峰度,但是您需要一些工作来确定要使用哪些参数来指定分布以获得特定的均值、方差、偏斜度和峰度。以下是一些代码,可帮助您入门。

import scipy.stats
import matplotlib.pyplot as plt
distribution = scipy.stats.norm(loc=100,scale=5)
sample = distribution.rvs(size=10000)
plt.hist(sample)
plt.show()
print distribution.stats('mvsk')

这显示了一个来自均值为100,方差为25的正态分布的一万个元素样本的直方图,并打印出该分布的统计信息:

(array(100.0), array(25.0), array(0.0), array(0.0))

用广义伽玛分布替代正态分布,

distribution = scipy.stats.gengamma(100, 70, loc=50, scale=10)

您可以获得统计量[均值、方差、偏度、峰度] (array(60.67925117494595), array(0.00023388203873597746), array(-0.09588807605341435), array(-0.028177799805207737))


5

3
有没有一种方便的方法可以从这个分布中抽取值,而不仅仅计算密度? - kuzzooroo
1
这里的mc2是什么意思?我预计会有差异,但只想确保一下。 - jason m
在Gram-Charlier分布中,密度可能变为负值。这是当偏离正态分布过大时发生的情况。到目前为止,我发现这种方法在接受所有4个矩方面最好,但收敛最差。 - Yahya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接