【问题标题】:Combining two normal random variables结合两个正态随机变量
【发布时间】:2010-12-15 20:23:28
【问题描述】:

假设我有以下 2 个随机变量:

X 其中均值 = 6 且标准差 = 3.5
Y 其中平均值 = -42 和标准差 = 5

我想基于前两个创建一个新的随机变量 Z,并且知道:X 发生 90% 的时间,Y 发生 10% 的时间。

很容易计算 Z 的平均值:0.9 * 6 + 0.1 * -42 = 1.2

但是是否可以在单个函数中为 Z 生成随机值? 当然,我可以按照这些思路做一些事情:

if (randIntBetween(1,10) > 1)
    GenerateRandomNormalValue(6, 3.5);
else
    GenerateRandomNormalValue(-42, 5);

但我真的很想有一个函数,它可以作为这样一个非正态的随机变量 (Z) 的概率密度函数。

对不起,糟糕的伪代码

感谢您的帮助!

编辑:这是一个具体的审讯:

假设我们从 Z 中添加 5 个连续值的结果。以大于 10 的数字结尾的概率是多少?

【问题讨论】:

  • 将您提供的代码包装为函数有什么问题?它会生成两个随机数并很好地执行您的任务。你在找什么?
  • 好吧,我会有很多变量,比如这里用Z表示的那个(普通变量的组合)。我正在寻找表示它们的最佳方式,因为我最终必须将这些变量组合在一起......

标签: math statistics normal-distribution


【解决方案1】:

但我真的很想拥有一个 将作为一个单一的功能 这种概率密度函数 一个随机变量 (Z) 不是 必要的正常。

好的,如果你想要密度,这里是:

rho = 0.9 * density_of_x + 0.1 * density_of_y

但如果不这样做,则无法从该密度中采样 1) 计算其 CDF(繁琐,但并非不可行) 2) 反转它(为此您需要一个数值求解器)。或者你可以做rejection sampling(或变体,例如重要性抽样)。这是昂贵的,而且很难做到正确。

所以你应该使用“if”语句(即调用生成器 3 次),除非你有非常充分的理由不这样做(例如使用准随机序列)。

【讨论】:

  • 谢谢,请参阅我对这个问题的评论,我最终将不得不组合正常变量组合的变量......这会改变你的答案吗?
  • 顺便说一下,这方面的技术术语是“混合分布”。您的分布是两个正态的混合。
  • 正如 belisarius 指出的那样,这将是二项分布与两个正态分布的混合...从答案中得出结论:模拟是使用 if 语句的方式...谢谢大家!跨度>
【解决方案2】:

如果随机变量表示为 x=(mean,stdev),则适用以下代数

number * x = ( number*mean, number*stdev )

x1 + x2 = ( mean1+mean2, sqrt(stdev1^2+stdev2^2) )

所以对于 X = (mx,sx), Y= (my,sy) 的情况,线性组合是

Z = w1*X + w2*Y = (w1*mx,w1*sx) + (w2*my,w2*sy) = 
    ( w1*mx+w2*my, sqrt( (w1*sx)^2+(w2*sy)^2 ) ) =
    ( 1.2, 3.19 )

链接:Normal Distribution 查找其他部分,第 1 项。

PS。对不起,奇怪的符号。新的标准偏差是通过类似于勾股定理的东西来计算的。它是平方和的平方根。

【讨论】:

  • 谢谢,我会调查一下,但我不确定 Z 的标准差对我来说是否有意义,因为原始结果可能与平均值相差甚远(要么紧在 6或-42)a.k.a.我不希望Z成为代表其他两个的正态分布变量......因为如果我没记错的话,X和Y的组合肯定不是正态分布的?
  • OP 没有添加正态分布,他只是根据 90%-10% 的权重选择一个或另一个
【解决方案3】:

这是分布的形式:

ListPlot[BinCounts[Table[If[RandomReal[] < .9,
    RandomReal[NormalDistribution[6, 3.5]], 
    RandomReal[NormalDistribution[-42, 5]]], {1000000}], {-60, 20, .1}], 
    PlotRange -> Full, DataRange -> {-60, 20}]

这不是正常的,因为您没有添加正常变量,而只是以一定的概率选择一个或另一个。

编辑

这是添加五个具有此分布的变量的曲线:

上峰和下峰代表单独采用其中一种分布,中峰代表混合。

【讨论】:

  • 感谢您的视觉感受!这将是取自 Z 的单个值的 PDF 是 :) 获取 PDF 的最佳方法是让我们说来自 Z 的 5 个连续值?又名:假设我们从 Z 中添加 5 个连续值的结果。以大于 10 的数字结尾的概率是多少?
  • @ibiza 这个答案只是“直观地”显示分布,因为您已经得到了至少一个计算它的正确答案(参见@Alexandre 的答案)。不过,我将详细说明添加 5 个变量的图表 :)。
  • 感谢您的宝贵时间,这很有帮助。所以基本上,没有简单的方法来计算这个函数(第二张图表),我应该坚持在我的代码中使用 if 语句..?
  • 从技术上讲,第二张图表的 x 轴不应该下降到 -210,因为它(极不可能,0.10^5)可能连续 5 次得到 -42..! :p 另外,您能否提供生成此图表的代码?再次感谢!
  • @ibiza 我刚刚修剪了情节:)
【解决方案4】:

最直接和通用的解决方案是模拟问题:

运行分段函数 1,000,000 次(只是一个高次数),生成结果的直方图(通过将它们分成箱,然后将每个箱的计数除以 N(在我的示例中为 1,000,000)。这将在每个给定的 bin 处为您提供 Z 的 PDF 的 近似值

【讨论】:

  • 何必呢?这是一个定义明确的问题,有一个简单的解决方案(假设正态分布)。
  • @jalexiou,这听起来直接来自决策理论教科书;虽然 0.9/0.1 伯努利试验在这里很简单,但在某些时候可能会被更复杂的条件所取代——已知解决方案不起作用。
【解决方案5】:

这里有很多未知数,但实际上您只是希望将两个(或更多)概率函数相加。

对于任何给定的概率函数,您可以通过计算概率曲线下的面积(积分)然后生成一个介于 0 和该面积之间的随机数来计算具有该密度的随机数。然后沿着曲线移动,直到面积等于您的随机数,并将其用作您的值。

这个过程可以推广到任何函数(或两个或多个函数的总和)。

阐述: 如果你有一个从 0 到 1 的分布函数 f(x)。你可以通过计算 f(x) 从 0 到 1 的积分来计算基于分布的随机数,给你曲线下的面积,让叫它A。

现在,您生成一个介于 0 和 A 之间的随机数,我们将这个数字称为 r。现在你需要找到一个值 t,使得 f(x) 从 0 到 t 的积分等于 r。 t 是你的随机数。

此过程可用于任何概率密度函数 f(x)。包括两个(或更多)概率密度函数之和。

我不确定你的函数是什么样的,所以不确定你是否能够计算出所有这些的解析解,但更糟糕的情况是,你可以使用数值技术来近似效果。

【讨论】:

猜你喜欢
  • 2015-04-26
  • 2017-06-30
  • 1970-01-01
  • 2021-10-07
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
相关资源
最近更新 更多