假设我有以下2个随机变量:
X,其中mean = 6,stdev = 3.5
Y表示平均值= -42且stdev = 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的数字结束的概率是多少?
答案 0 :(得分:4)
但我真的想要一个 作为一个单一的功能 这种概率密度函数 随机变量(Z)不是 必要的正常。
好的,如果你想要密度,这里是:
rho = 0.9 * density_of_x + 0.1 * density_of_y
但是你不能从这个密度中取样,如果你不1)计算它的CDF(繁琐但不可行)2)反转它(你需要一个数值求解器)。或者您可以rejection sampling(或变体,例如重要性抽样)。这样做既昂贵又难以做到。
所以你应该去找“if”语句(即调用生成器3次),除非你有非常强烈的理由(例如使用准随机序列)。
答案 1 :(得分: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 )
link:Normal Distribution查找杂项部分,第1项。
PS。抱歉,这是一个奇怪的符号。新的标准偏差是通过类似于pythagorian定理的计算得出的。它是平方和的平方根。
答案 2 :(得分:2)
这是分发的形式:
ListPlot[BinCounts[Table[If[RandomReal[] < .9,
RandomReal[NormalDistribution[6, 3.5]],
RandomReal[NormalDistribution[-42, 5]]], {1000000}], {-60, 20, .1}],
PlotRange -> Full, DataRange -> {-60, 20}]
这不是正常的,因为你没有添加正常变量,只是选择一个或另一个具有一定概率。
修改
这是使用此分布添加五个变量的曲线:
上峰和下峰表示仅取一个分布,中间峰表示混合。
答案 3 :(得分:0)
最直接和最普遍适用的解决方案是模拟问题:
运行分段函数,你有1,000,000(只是一个很高的数字)次数,生成结果的直方图(通过将它们分成垃圾箱,并将每个垃圾箱的计数除以你的N(在我的例子中为1,000,000)。将为每个给定的bin中的Z的PDF留下近似。
答案 4 :(得分:0)
这里有很多未知数,但基本上你只是希望将两个(或更多)概率函数相互添加。
对于任何给定的概率函数,您可以通过计算概率曲线下的面积(积分)计算具有该密度的随机数,然后生成0和该区域之间的随机数。然后沿曲线移动,直到该区域等于您的随机数,并将其用作您的值。
然后可以将此过程推广到任何函数(或两个或更多函数的总和)。
<强>精化强>: 如果你有一个分布函数f(x),范围从0到1.你可以通过计算f(x)从0到1的积分来计算一个随机数,给你曲线下面积,让叫它A。
现在,您生成一个介于0和A之间的随机数,让我们调用该数字r。现在你需要找到一个值t,这样f(x)从0到t的积分等于r。 t是你的随机数。
此过程可用于任何概率密度函数f(x)。包括两个(或更多)概率密度函数的总和。
我不确定你的功能是什么样的,所以不确定你是否能够计算所有这些的分析解决方案,但更糟糕的情况是,你可以使用数字技术来近似效果。