[英]How do I generate data with specified mean, variance, skewness, kurtosis in 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.