给定峰度或偏度的生成数(分布)

2024-05-15 18:06:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我对在xls中使用统计函数很陌生。我可以用xls中的KURT函数来计算峰度或偏度,给定一组数字。在

但我的要求是用另一种方法来做,比如对于给定的偏度或峰度,有没有一种方法可以生成随机数。有什么建议吗。在

函数应以偏度或峰度值为输入,生成50个随机数,1为最小值,100000为最大值。在

如果Excel没有办法,我会在Python中寻找建议。在

你能帮我用Excel或Python做这个吗?在


Tags: 方法函数数字xlsexcel建议我会办法
1条回答
网友
1楼 · 发布于 2024-05-15 18:06:46

在对几个分布进行了实验之后,广义Gamma分布似乎足够灵活,可以将倾斜或峰度调整到所需的值,但并不像他在评论中提到的question@gabriel中所要求的那样同时进行调整。在

因此,要从具有一个单一固定矩的g-Gamma分布中提取一个样本,您可以使用^{}来找到一个惩罚函数最小的分布(我选择了(target - value) ** 2

from scipy import stats, optimize
import numpy as np

def random_by_moment(moment, value, size):
    """ Draw `size` samples out of a generalised Gamma distribution
    where a given moment has a given value """
    assert moment in 'mvsk', "'{}' invalid moment. Use 'm' for mean,"\
            "'v' for variance, 's' for skew and 'k' for kurtosis".format(moment)
    def gengamma_error(a):
        m, v, s, k = (stats.gengamma.stats(a[0], a[1], moments="mvsk"))
        moments = {'m': m, 'v': v, 's': s, 'k': k}
        return (moments[moment] - value) ** 2    # has its minimum at the desired value      

    a, c = optimize.minimize(gengamma_error, (1, 1)).x    
    return stats.gengamma.rvs(a, c, size=size)

n = random_by_moment('k', 3, 100000)
# test if result is correct
print("mean={}, var={}, skew={}, kurt={}".format(np.mean(n), np.var(n), stats.skew(n), stats.kurtosis(n)))

在此之前,我提出了一个函数,它与skew峰度相匹配。然而,即使是g-伽马射线也不够灵活,不足以达到这个目的,这取决于你的条件有多极端

^{pr2}$

相关问题 更多 >