正态分布的峰度为3。随着分布中异常值的增加,尾部变“肥”,峰度增加超过3。
如何在峰度大于3(最好在5-7左右)的两个数字之间产生随机分布?
进口
import numpy as np
import scipy.stats import kurtosis随机均匀分布在0.01-0.10之间
# Random Uniform Distribution
runif = np.random.uniform(0.01, 0.10, 10000)
kurtosis(runif, fisher=False)1.8124891901330156

随机正常值在0.01-0.10之间
lower = 0.01
upper = 0.10
mu = (upper)/2
sigma = 0.01
N = 10000
retstats = scipy.stats.truncnorm.rvs((lower-mu)/sigma,(upper-mu)/sigma,loc=mu,scale=sigma,size=N)
mean = .05
stdev = .01 # 99.73% chance the sample will fall in your desired range
values = [gauss(mean, stdev) for _ in range(10000)]
kurtosis(values, fisher=False)3.015004351756201

随机正态带脂肪尾在0.01-0.10之间
???
发布于 2020-01-14 17:21:52
正态分布总是有3的峰度,均匀的分布有9/5的峰度,长尾分布的峰度大于3。例如,Laplace的峰度是6。请注意,通常这些分布是用超额的峰度来定义的,这等于实际的峰度减去3。参见这里的表格:http://mathworld.wolfram.com/KurtosisExcess.html:
然而,通过切断尾巴,你只会减少峰度。通过切割尾巴,就不可能产生一个峰度大于3的正态分布。为了产生一个有限范围和高峰度的分布,你需要确保切割对尾巴的影响最小,从长尾(非正态分布)开始。从口头上讲,你需要有一个非常尖峰的分布。我用一个小指数衰减参数的Laplace制作了下面的一个。
import numpy as np
from scipy.stats import kurtosis
min_range = 0.01
max_range = 0.10
midpoint = (max_range + min_range)/2
samples = 10000
def filter_tails(x):
return x[(x >= min_range) & (x <= max_range)]
runif = np.random.uniform(min_range, max_range, samples)
value = kurtosis(filter_tails(runif), fisher=False)
print(f"uniform kurtosis = {value}")
sigma = 0.01
runif = np.random.normal(midpoint, sigma, samples)
value = kurtosis(filter_tails(runif), fisher=False)
print(f"gaussian kurtosis = {value}")
exponential_decay = 0.001
runif = np.random.laplace(midpoint, exponential_decay, samples)
value = kurtosis(filter_tails(runif), fisher=False)
print(f"laplace kurtosis = {value}")运行脚本,我得到:
uniform kurtosis = 1.8011863970680828
gaussian kurtosis = 3.0335178694177785
laplace kurtosis = 5.76290423111418发布于 2020-01-14 17:14:03
由于峰度不是正态分布函数的参数之一,所以必须使用另一种方法来生成近似正态分布的函数。事情变得复杂起来。看看这个:https://stats.stackexchange.com/questions/43482/transformation-to-increase-kurtosis-and-skewness-of-normal-r-v
上面的链接给出了使用R(叹息)代码的例子,但我认为它非常简单,可以让您用Python编写等价的代码。这是我所知道的几个扩展(即功能分层)之一,它允许您实现这一点。
不幸的是,据我所知,没有简单的解决办法。
https://stackoverflow.com/questions/59738193
复制相似问题