【问题标题】:Generate empirical/user defined distribution with desired mean and std生成具有所需均值和标准差的经验/用户定义分布
【发布时间】:2018-08-16 15:14:08
【问题描述】:

我根据一年的实际需求数据生成了一个需求分布。这种分布是非正态分布或类似于任何理论分布。我将此经验性需求分布用于模拟研究。

In current empirical distribution:
mean = 1000
std = 600
Coefficient of variation (CV) = 0.6

我想以当前的经验分布模式/形状为基础,生成四个额外的分布。

dist1: Low volume, low variation   -> mean:500, std:150, CV:0.3
dist2: Low volume, high variation  -> mean:500, std:665, CV:1.33
dist3: High volume, low variation  -> mean:2000, std:600, CV:0.3
dist4: High volume, high variation -> mean:2000, std:2660, CV:1.33

这样做的主要目的是研究需求量和需求变化的变化如何影响模拟系统。创建这样的分布(上面的 dist1-4)在统计上是否可行,或者我必须更改为正态分布?

【问题讨论】:

    标签: random statistics simulation probability-distribution empirical-distribution


    【解决方案1】:

    您的问题未充分说明,但将适当的线性函数应用于给定的分布可能就足够了。

    由于E(aX+b) = aE(X) + bStDev(aX+b) = |a|StDev(X),您可以选择ab 以便获得给定的目标参数。

    假设您有一个函数f(),它生成平均值为1000、标准差为600的值。以下定义将生成平均值为m、标准差为s的随机数:

    g(m,s) =  (s/600)*f()+m-5*s/3
    

    R 中的快速测试:

    > f <- function() rnorm(1,1000,600) #mock empirical f()
    > g <- function(m,s) (s/600)*f()+m-5*s/3
    > x <- replicate(1000,g(2000,300))
    > mean(x)
    [1] 1988.719
    > sd(x)
    [1] 300.7044
    

    【讨论】:

    • 似乎是一个很好的解决方案。由于我不熟悉 R,您能否为每一行添加 cmets?或者使用 Python 或 Netlogo 作为代码示例?非常感谢
    • R 代码只是概念证明。答案的关键部分是它上面的那一行,它应该很容易在 Python 中实现。
    猜你喜欢
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 2014-11-22
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    相关资源
    最近更新 更多