生成具有固定均值和sd的两个随机数序列,具有排序约束

时间:2017-03-07 15:03:06

标签: random mean standard-deviation

我想生成具有以下约束的(伪)随机正态分布数的两个序列S和T:

  1. S的平均值为m_S,标准差为sd_S,长度为
  2. T具有平均值m_T,标准偏差sd_T和长度N
  3. 对于每个i,T(i)< = S(i),即序列T中位置i处的元素小于或等于序列S中位置i中的对应元素
  4. 理想情况下,我想逐步生成两个序列(一次一对或多个数字)。

    我知道如何独立生成S或T(例如在Java mean + stdev * ThreadLocalRandom.current().nextGaussian();中 - 另见this question),但我不知道如何生成满足第三个约束的S和T

    感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

我认为你可以计算出这样的序列,满足所有条件并逐步生成两个序列(一次一对或多个数字)。为此你必须建立累积分布函数CDF S (x,m S ,sd S )和CDF T (x,m T ,sd T )并确保对于任何x的给定参数,它们的差异是非负的:CDF S (x) - CDF T (x)> = 0.

然后你抛出U(0,1)并且对于每个均匀分布的随机数,你使用逆CDF方法(在某些伪代码中)计算了两个高斯:

r = random()
t = inverseCDF(r, mu_T, sd_T)
s = inverseCDF(r, mu_S, sd_S)

它们将成对并保证为高斯并满足条件1,2,3。

反向CDF将通过反向错误函数表示,因此根据您正在使用的库,您可能已经拥有它。如果没有,在Wiki中可以使用erf -1 (x)的近似值:https://en.wikipedia.org/wiki/Error_function

更新

使其更清晰。如果按照我的建议并生成具有N个记录和2列(S,T)的数据帧,则分别清楚地采用S列为高斯(m_S,sd_S),T列为高斯(m_T,sd_T) )。没有问题。他们不会独立。但你没有陈述这种情况。如果没问题,那就是解决方案。如果他们必须独立,那是不可能的。所以你必须决定你想要什么