按照措辞,这在数学上是不可能的。令 D = S - T。T = 0。由于 S 和 T 是正态分布的,因此 D 也是正态分布,因为法线的线性组合是正态的。你不能有一个具有有限下限的正态分布。因此,您不能同时满足 S 和 T 的正态性要求并满足您的约束。
您可以通过使用您选择的任何分布生成 T 来构造非正态解,使用严格的正分布独立生成 D(例如 gamma、Weibull、uniform(0,?)、截断正态...),并创建 S = T + D。由于独立随机变量的期望和方差相加,您可以获得所需的均值和 sd通过适当调整 D 的参数化对 T 和 S 都适用。结果甚至可以看起来很漂亮的钟形,但严格来说是不正常的。
由于独立随机变量的方差是相加的并且必须是正的,所以 S = T + D 仅在 S 的方差大于 T 的方差时才有效。更一般的解决方案是生成 S 和 T 中的任何一个具有较小的方差。如果是T,加D得到S。如果是S,减去D得到T。
既然你在 cmets 中说近似值是可以的,这里有一个例子。假设您希望较小的分布具有 μsmaller = 10 和 σsmaller = 3,而较大的分布具有 μlarger = 15 和σlarger = 5。那么它们之间的差异应该具有严格的正分布,其中 μdelta = 5 和 σdelta = 4 (σ更大 = sqrt(32 + 42) = 5)。我为 delta 选择了一个伽马分布,参数化为具有所需的均值和标准差。这是在 Python 中的:
import random
alpha = 25.0 / 16.0
beta = 16.0 / 5.0
for _ in range(100000):
smaller = random.gauss(10, 3)
delta = random.gammavariate(alpha, beta)
print(smaller, delta, smaller + delta)
我将结果保存到一个文件中,然后将它们导入 JMP。这是我分析的快照:
如您所见,越小越大都有所需的均值和标准差。您还可以确认所有的增量都是正的,所以大总是大于小。最后,larger 直方图上方的正态 q-q 图表明,结果虽然是单峰的且大致呈钟形,但并不正态,因为绘制的点不沿直线下降。
另一个答案建议通过生成单个随机均匀分布并将其用作两个 CDF 的反演输入来匹配两个分布:
q = random()
t = inverseCDF(q, mu_T, sd_T)
s = inverseCDF(q, mu_S, sd_S)
这是一种众所周知的相关归纳策略,称为“Common Random Numbers”,其中 q 是用于通过反演生成两个分布的相同分位数。对于对称分布,例如正态分布,这会在 T 和 S 之间产生 1 的相关性。1 的相关性告诉我们(其中一个)是另一个的线性变换。
事实上,有一种更简单的方法可以为法线完成此操作,而无需进行两次反转。通过您希望的任何机制生成 T 或 S 之一——反转、极坐标法、Ziggurat 法等。然后使用标准转换将其转换为标准法线,并从那里转换为另一个法线。如果我们让 T 是我们直接生成的法线,那么
S = (σS / σT) * (T - μT) + μS .
我们希望所有可能的分位数都有 T
(σT/σT) * (T - μT) + μS
经过一些代数变成
T * (σS - σT) / σST - μS * (σT/σS).
这减少到 3 个案例。
σS = σT:在这种情况下,T被消除,只要μT S.
σS > σT:在这种情况下,T > S 当 T T * σS / (σS - σT)) - (μS * σT / (σS - σT))。
σST: T > S 当 T > (μT * σS sub> / (σS - σT)) - (μS * σT / (σS - σT)) 因为在 #2 的结果中通过具有 (σS - σT)
底线 - 相关归纳方案唯一有效的情况是两个分布的方差相等。不等方差将导致 T > S 的结果。
下图可能会给人一些直觉。红色曲线是平均值为 0 和标准差为 1 的标准正态曲线。绿色曲线是平均值为 1 和标准差为 2 的正态曲线。我们可以看到,由于绿色曲线较宽,因此存在一些分位数,低于该分位数会产生较小的结果比红色。如果 T(“较低”分布)具有较大的可变性,则会有一些分位数高于该分位数会产生较大的结果。