假设我知道样本的最大值、最小值和平均值(我无法访问样本本身)。我想编写一个通用函数来生成具有相同特征的样本。从这个答案中,我推测这不是一个简单的任务,因为可以找到许多具有相同特征的分布。
max, min, average = [411, 1, 20.98]
我尝试使用scipy.norm,但是没有成功。我似乎不明白我是否可以传递上面提到的参数,或者它们只是从一个已经生成的函数返回的值。我对python stats很陌生,所以这可能是一个很容易解决的问题。
假设我知道样本的最大值、最小值和平均值(我无法访问样本本身)。我想编写一个通用函数来生成具有相同特征的样本。从这个答案中,我推测这不是一个简单的任务,因为可以找到许多具有相同特征的分布。
max, min, average = [411, 1, 20.98]
我尝试使用scipy.norm,但是没有成功。我似乎不明白我是否可以传递上面提到的参数,或者它们只是从一个已经生成的函数返回的值。我对python stats很陌生,所以这可能是一个很容易解决的问题。
5条答案
按热度按时间mmvthczy1#
三角分布应该可以执行您想要的任务,因为它将三个参数(最小值、众数、最大值)作为与您的标准相匹配的输入。您可以考虑其他分布,如标准分布、均匀分布等;但是,他们的输入参数都缺少或部分采用了您上面提到的三个输入参数中的一个,如果我处在您的位置,我会考虑三角分布,因为即使部分排除单个参数也会导致信息丢失。
Numpy - Triangular Distribution
izj3ouym2#
作为noted here:
与这些样本量一致的可能分布有无限多个。
但是,您可以引入其他假设来找到一些解决方案:
您可以将其视为优化问题:找到具有最佳拟合的分布及其参数(根据指定的最小值/最大值/平均值统计)。在伪代码中,解决方案如下所示:
使用此过程,您可以发现幂律分布可以产生与所需类似的统计信息:
最大值/最小值/平均值:
完整代码:
这里,pycma包中的CMA-ES优化是为了简化。
798qvoo83#
让我们试试下面的函数:
当我测试这个功能时为:
我得到以下输出:
fae0ux8s4#
快速编辑与细化(我后来意识到这一点):您可以将平衡技巧应用于任何分布。
许多建议的解决方案的缺点是 * 使用浮点数达到MIN、MAX和AVERAGE的EXACT值的机会基本上为零 *。了解这一点意味着需要手动添加MIN和MAX值,但添加值会扰乱生成的分布。
一个简单的方法是,生成一个分布,将最小值和最大值相加,然后平衡它们以达到平均值:
1.设置最小值和最大值
1.计算平均值
1.添加点以补偿所需平均值的偏差(取决于MIN和MAX在所需平均值周围的不对称程度)
1.创建一个随机分布,在移动平均值后,该分布仍将在所需平均值和最近的边界条件之间拟合
1.将分布的均值转换为所需的真实均值
1.将生成的对称分布添加到点4之前的可用数据。
最初的3个步骤确保边界条件(最小值、最大值)不会扰乱平均值。步骤4-5创建一些数据,这些数据保证具有精确的所需平均值,并且将落在最小值和最大值之间。步骤6将数据组合到所需结果。
ao218c7q5#
一个概率(函数)仅仅由它的最小值,平均值和最大值来定义是不够的。有(字面上)无限多的概率分布满足这些条件。
为了证明这一点,给出具有概率(最大-平均)/(最大-最小)的最小值和具有概率(平均-最小)/(最大-最小)的最大值的概率分布已经满足这些特征.
这一点很容易验证:
此外,正态分布是对称的 * 且 * 不限于观察值(例如:它没有最小值和最大值)。