【问题标题】:Generating random numbers with predefined mean, std, min and max [duplicate]生成具有预定义均值、标准、最小值和最大值的随机数
【发布时间】:2018-11-10 14:37:09
【问题描述】:

对于我正在进行的研究项目,我需要使用以下参数生成一组随机(或伪随机)数据(例如 10,000 个数据):

  • 最大值 = 35;
  • 最小值 = 1.5;
  • 平均值 = 9.87;
  • 标准偏差 = 3.1;

现在很明显,这个分布看起来有点像

scipy.stats.maxwell.rvs(locs=1.5,scale=3.1)

但是,这并没有给出必要的平均值或最大值。有没有可能的解决方案?

【问题讨论】:

  • "现在很明显,这个分布看起来有点像..." 实际上,这并不清楚。符合这些标准的可能分布空间很大。真的很大。你不会相信它有多么巨大、巨大、令人难以置信的大。

标签: python random scipy statistics


【解决方案1】:

您需要根据需要选择概率分布。有a number of continuous distributions with bounded intervals。例如,您可以选择(缩放的)beta distribution 并计算参数 α 和 β 以适合您的均值和标准差:

import numpy as np
import scipy.stats
import matplotlib.pyplot as plt

def my_distribution(min_val, max_val, mean, std):
    scale = max_val - min_val
    location = min_val
    # Mean and standard deviation of the unscaled beta distribution
    unscaled_mean = (mean - min_val) / scale
    unscaled_var = (std / scale) ** 2
    # Computation of alpha and beta can be derived from mean and variance formulas
    t = unscaled_mean / (1 - unscaled_mean)
    beta = ((t / unscaled_var) - (t * t) - (2 * t) - 1) / ((t * t * t) + (3 * t * t) + (3 * t) + 1)
    alpha = beta * t
    # Not all parameters may produce a valid distribution
    if alpha <= 0 or beta <= 0:
        raise ValueError('Cannot create distribution for the given parameters.')
    # Make scaled beta distribution with computed parameters
    return scipy.stats.beta(alpha, beta, scale=scale, loc=location)

np.random.seed(100)

min_val = 1.5
max_val = 35
mean = 9.87
std = 3.1
my_dist = my_distribution(min_val, max_val, mean, std)
# Plot distribution PDF
x = np.linspace(min_val, max_val, 100)
plt.plot(x, my_dist.pdf(x))
# Stats
print('mean:', my_dist.mean(), 'std:', my_dist.std())
# Get a large sample to check bounds
sample = my_dist.rvs(size=100000)
print('min:', sample.min(), 'max:', sample.max())

输出:

mean: 9.87 std: 3.100000000000001
min: 1.9290674232087306 max: 25.03903889816994

概率密度函数图:

在这种情况下,并非所有可能的边界、均值和标准差组合都会产生有效的分布,并且 beta 分布具有一些您可能希望或可能不希望的特定属性。可能存在无限可能的分布,它们与具有不同质量(偏斜、峰度、模态......)的边界、均值和标准差的某些给定要求相匹配。您需要确定最适合您的情况的分布。

【讨论】:

  • @WarrenWeckesser 是的,我注意到了。我不知道缩放是否会导致额外的不精确或什么......它看起来肯定不仅仅是浮点不精确,但它看起来并没有大到足以成为一个完全错误的计算......我正在审查我是如何计算 alphabeta 但我看不出有什么问题...
  • 顺便说一下,你应该把你的答案移到*.com/questions/27831923/…,因为这个问题是那个问题的重复。
  • @WarrenWeckesser 不知道我第一次出错的地方,但现在已经解决了……我会复制另一个问题的答案,如果这个问题被关闭,我会删除它……