当前位置: 首页 > 知识库问答 >
问题:

生成峰度大于3的随机正态分布

吕新
2023-03-14

正态分布的峰度为 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之间的厚尾随机正态分布

???

共有2个答案

太叔弘壮
2023-03-14

由于峰度不是正态分布函数的参数之一,因此必须使用另一种方法来生成近似于正态分布的函数。它变得复杂。看看这个: https://stats.stackexchange.com/questions/43482/transformation-to-increase-kurtosis-and-skewness-of-normal-r-v

上面的链接给出了使用R(叹息)代码的示例,但我认为它足够简单,可以让你用Python编写等效的代码。这是我所知道的允许你实现这一目标的几个扩展(即函数分层)之一。

不幸的是,据我所知没有简单的解决方法。

幸弘扬
2023-03-14

正态分布的峰度始终为3。均匀分布的峰态为9/5。长尾分布的峰形高于3。例如,拉普拉斯分布的峰期为6。[注意,通常这些分布是根据超额峰态定义的,即实际峰态减去3。]见下表:http://mathworld.wolfram.com/KurtosisExcess.html

然而,通过切断尾巴,只能减少峰度。通过切割尾部,不可能生成峰度高于3的正态分布。为了生成范围有限且峰度高的分布,您需要确保切割对尾部的影响最小,并从长尾(非正态)分布开始。俗话说,你需要有一个非常尖锐的分布。我在下面用拉普拉斯和一个小指数衰减参数制作了一个。

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
 类似资料:
  • 我将需要初始化一个'n'数量的类,将有一个随机值附加到他们从1到100。 我知道如何创建一个介于1和100之间的随机值,但我如何使所有的值都落在一个正态分布模式?

  • 问题内容: 如何在或中按照正态分布轻松生成随机数? 我不想使用Boost。 我知道Knuth详细讨论了这个问题,但是我现在没有他的书。 问题答案: 有许多方法可以从常规RNG生成高斯分布数。 该箱穆勒变换是常用的。它会正确产生具有正态分布的值。数学很简单。您生成两个(均匀)随机数,然后对它们应用公式,就得到两个正态分布的随机数。返回一个,并将另一个保存为下一个随机数请求。

  • 问题内容: 我正在阅读Math.random()javadoc,发现random只是psuedorandom。 是否有一个库(特别是java)根据随机变量(例如环境温度,CPU温度/电压等)生成随机数? 问题答案: 查看http://random.org/ RANDOM.ORG是一种真正的随机数服务,可通过大气噪​​声生成随机性。 可以在以下位置找到用于与其连接的Java库: http //sou

  • 问题内容: 最重要的答案是建议使用switch语句来完成这项工作。但是,如果我要考虑的情况很多,那么代码看起来就很笨拙。我有一个巨大的switch语句,在每种情况下都一遍又一遍地重复非常相似的代码。 当您要考虑的概率很大时,是否有更好,更干净的方法来选择具有一定概率的随机数?(例如〜30) 问题答案: 这是一个Swift实现,受各种答案的影响很大,这些答案会生成具有给定(数字)分布的随机数 对于

  • 问题内容: 我们如何在Java中生成非常大的随机数?我说的是10000位数吗?我知道我们必须使用BigInteger,但是我们该怎么做呢?做这样的事情最有效的方法是什么?请提供一个小例子。谢谢。 问题答案: 嗯,一种方法是转到Random.org并下载二进制随机文件之一。这些文件是由大气噪声生成的,因此非常随机。我在国际象棋引擎中将其用于Zobrist键。 或者你可以去 这会给你你想要的。在此示例

  • 本文向大家介绍基于JavaScript伪随机正态分布代码实例,包括了基于JavaScript伪随机正态分布代码实例的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了基于JavaScript伪随机正态分布代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在游戏开发中经常遇到随机奖励的情况,一般会采取先生成数组,再一个一个取的方式发随