繁体   English   中英

矩匹配 - 在 Python 中模拟具有指定矩(均值、标准差、偏度、峰度)的离散分布

[英]Moment matching - simulating a discrete distribution with specified moments (mean, standard deviation, skewness, kurtosis) in Python

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

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

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

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

谢谢!

是的,虽然不是 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM