我想生成具有以下约束的(伪)随机正态分布数的两个序列S和T:
理想情况下,我想逐步生成两个序列(一次一对或多个数字)。
我知道如何独立生成S或T(例如在Java mean + stdev * ThreadLocalRandom.current().nextGaussian();
中 - 另见this question),但我不知道如何生成满足第三个约束的S和T
感谢任何帮助!
答案 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) )。没有问题。他们不会独立。但你没有陈述这种情况。如果没问题,那就是解决方案。如果他们必须独立,那是不可能的。所以你必须决定你想要什么