如何在 Python 中生成具有给定均值、方差、偏斜和峰度的分布? [英] How to generate a distribution with a given mean, variance, skew and kurtosis in Python?
问题描述
random.gauss(mu, sigma)
上面是一个函数,允许从具有给定均值和方差的正态分布中随机抽取一个数字.但是,我们如何从由不止两个第一矩定义的正态分布中提取值?
类似:
<块引用>random.gauss(mu, sigma, skew, kurtosis)
使用 scipy 怎么样?您可以从 scipy.stats 中的 连续分布中选择您想要的分布图书馆.
广义 gamma 函数具有非零偏斜和峰态,但是您需要做一些工作来确定使用哪些参数来指定分布以获得特定的均值、方差、偏斜和峰度.这是一些帮助您入门的代码.
import scipy.stats导入 matplotlib.pyplot 作为 plt分布 = scipy.stats.norm(loc=100,scale=5)样本 = distribution.rvs(大小 = 10000)plt.hist(样本)plt.show()打印 distribution.stats('mvsk')
这将显示来自均值为 100 且方差为 25 的正态分布的 10,000 个元素样本的直方图,并打印分布的统计信息:
(array(100.0), array(25.0), array(0.0), array(0.0))
用广义伽马分布代替正态分布,
distribution = scipy.stats.gengamma(100, 70, loc=50, scale=10)
你得到统计数据[均值、方差、偏斜、峰度](数组(60.67925117494595),数组(0.00023388203873597746),数组(-0.09588807605341435),数组(-0.028177799805)
p.73
random.gauss(mu, sigma)
Above is a function allowing to randomly draw a number from a normal distribution with a given mean and variance. But how can we draw values from a normal distribution defined by more than only the two first moments?
something like:
random.gauss(mu, sigma, skew, kurtosis)
How about using scipy? You can pick the distribution you want from continuous distributions in the scipy.stats library.
The generalized gamma function has non-zero skew and kurtosis, but you'll have a little work to do to figure out what parameters to use to specify the distribution to get a particular mean, variance, skew and kurtosis. Here's some code to get you started.
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')
This displays a histogram of a 10,000 element sample from a normal distribution with mean 100 and variance 25, and prints the distribution's statistics:
(array(100.0), array(25.0), array(0.0), array(0.0))
Replacing the normal distribution with the generalized gamma distribution,
distribution = scipy.stats.gengamma(100, 70, loc=50, scale=10)
you get the statistics [mean, variance, skew, kurtosis]
(array(60.67925117494595), array(0.00023388203873597746), array(-0.09588807605341435), array(-0.028177799805207737))
.
这篇关于如何在 Python 中生成具有给定均值、方差、偏斜和峰度的分布?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!