簡體   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