【问题标题】:Moment matching - simulating a discrete distribution with specified moments (mean, standard deviation, skewness, kurtosis) in Python矩匹配 - 在 Python 中模拟具有指定矩(均值、标准差、偏度、峰度)的离散分布
【发布时间】:2020-05-20 12:50:06
【问题描述】:

Python 中是否有任何库/函数允许我们生成与给定目标矩(均值、标准差、偏度、峰度)匹配的离散数据?我不希望强制执行任何特定的基础连续分布。

也就是说,我想生成 10000 个数字,这样当我们使用标准公式计算它们的前四个矩时,我们得到的结果接近作为输入给出的目标矩。

Python 中是否有任何已知的库可以实现这种方法?她是解决这个特定问题的论文的一个例子(作为一个更大问题的一部分):

https://link.springer.com/article/10.1023/A:1021853807313

谢谢!

【问题讨论】:

    标签: python scipy statistics


    【解决方案1】:

    是的,虽然不是 100% 准确,但这是可能的。

    import statsmodels.sandbox.distributions.extras as extras
    import scipy.interpolate as interpolate
    import scipy.stats as ss
    import matplotlib.pyplot as plt  
    import numpy as np
    
    def generate_normal_four_moments(mu, sigma, skew, kurt, size=10000, sd_wide=10):
       f = extras.pdf_mvsk([mu, sigma, skew, kurt])
       x = np.linspace(mu - sd_wide * sigma, mu + sd_wide * sigma, num=500)
       y = [f(i) for i in x]
       yy = np.cumsum(y) / np.sum(y)
       inv_cdf = interpolate.interp1d(yy, x, fill_value="extrapolate")
       rr = np.random.rand(size)
    
       return inv_cdf(rr)
    

    接下来,我们使用生成数据

    data = generate_normal_four_moments(mu=0, sigma=1, skew=-1, kurt=3)
    

    让我们检查一下时刻:

    np.mean(data)
    np.var(data)
    ss.skew(data)
    ss.kurtosis(data)
    

    给予

    -0.039986656405454374
     1.051375501684874
    -1.071149838792561
     2.9813805363255472
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-13
      • 2021-07-21
      • 2019-09-04
      • 2013-11-05
      • 2018-12-29
      • 2019-02-06
      • 2014-04-27
      • 1970-01-01
      相关资源
      最近更新 更多