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

Python 给定峰度或偏度的生成数(分布),python,excel-formula,kurtosis,Python,Excel Formula,Kurtosis,我不熟悉在xls中使用统计函数。在给定一组数字的情况下,我能够使用xls中的库尔特函数来计算峰度或偏度 但我的要求是用另一种方法,比如对于给定的偏度或峰度,有没有生成随机数的方法。任何关于如何做到这一点的建议 该函数应以偏度或峰度值作为输入,并应生成50个随机数,最小值为1,最大值为100000 如果Excel没有办法,我正在寻找Python的建议 您能帮助我如何在Excel或Python中执行此操作吗?在尝试了几种分布之后,广义伽马分布似乎足够灵活,可以将倾斜或峰度调整到所需的值,但并不是像加

我不熟悉在xls中使用统计函数。在给定一组数字的情况下,我能够使用xls中的库尔特函数来计算峰度或偏度

但我的要求是用另一种方法,比如对于给定的偏度或峰度,有没有生成随机数的方法。任何关于如何做到这一点的建议

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

如果Excel没有办法,我正在寻找Python的建议


您能帮助我如何在Excel或Python中执行此操作吗?

在尝试了几种分布之后,广义伽马分布似乎足够灵活,可以将倾斜或峰度调整到所需的值,但并不是像加布里埃尔在评论中提到的@gabriel中所问的那样,两者同时出现

因此,要从具有单个固定力矩的g-伽马分布中提取样本,您可以使用找到具有最小化惩罚函数的分布(我选择了
(目标值)**2

在此之前,我提出了一个函数,匹配倾斜和峰度。然而,即使是g-Gamma也不够灵活,无法达到这一目的,这取决于您的条件有多极端

def random_by_sk(skew, kurt, size):
    def gengamma_error(a):
        s, k = (stats.gengamma.stats(a[0], a[1], moments="sk"))
        return (s - skew) ** 2 + (k - kurt) ** 2  # penalty equally weighted for skew and kurtosis

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

n = random_by_sk(3, 3, 100000)
print("mean={}, var={}, skew={}, kurt={}".format(np.mean(n), np.var(n), stats.skew(n), stats.kurtosis(n)))
# will yield skew ~2 and kurtosis ~3 instead of 3, 3

你核对过这个答案了吗?另外,请注意这里提到的注意事项:是的,我检查过了。但我认为它正在尝试打印一些东西,我希望首先在控制台上打印输出(表示数字)。另外,你能帮我理解那个例子中的输入峰度在哪里吗?这显然不是一个简单的练习,而且不是一个专家,我可能会给你建议弊大于利。我能给你的唯一建议是仔细看看我提供的第二个链接中的评论。
def random_by_sk(skew, kurt, size):
    def gengamma_error(a):
        s, k = (stats.gengamma.stats(a[0], a[1], moments="sk"))
        return (s - skew) ** 2 + (k - kurt) ** 2  # penalty equally weighted for skew and kurtosis

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

n = random_by_sk(3, 3, 100000)
print("mean={}, var={}, skew={}, kurt={}".format(np.mean(n), np.var(n), stats.skew(n), stats.kurtosis(n)))
# will yield skew ~2 and kurtosis ~3 instead of 3, 3