随机选择具有指定概率的两个选项之一

问题描述 投票:1回答:1

我有两个子例程要执行,一个子例程的概率为p1,另一个子例程的概率为p2s.t。 p1 + p2 = 1,我正在通过以下方法解决问题:

say p1=0.6, p2=0.4, i need to perform the selection between 2 subroutine 10 times
  1. 使用功能:out = randsrc(1,10,[1,2;0.6,0.4]);然后选择与输出矩阵中的1对应的例程1和与输出矩阵中的2对应的例程2

这里我得到输出1:2 1 2 2 1 2 1 2 1 1 1 再次执行则给出:1 1 2 2 2 2 1 2 1

期望的输出是1倍,6倍和2倍,4倍,但是输出不符合预期。

  1. 使用功能:s = randsample([1,2],10,true,[0.6,0.4]);
  2. 使用例程:

    s=[]; for i=1:10 c = rand if c<=0.6 select = 2; else select = 1; end s = [s,select]; end

方法2和3也在方法1中给出了结果,有人可以帮助我找出原因吗?还是将结果解释为遵循概率的方式?或其他解决此问题的方法。

matlab probability sampling
1个回答
0
投票

我想10个样本不足以代表您期望的60%/ 40%分布。

[抛硬币10次时,获得5个正面和5个反面的可能性不是很高。

尝试1000000个值:

out = randsrc(1, 1000000, [1,2;0.6,0.4]);

现在分布应该非常接近60%/ 40%:

[sum(out==1), sum(out==2)]
ans =

      599709      400291

您也可以使用rand

x = rand(1, 1000000);
[sum(x <= 0.6), sum(x > 0.6)]
ans =

      600261      399739
© www.soinside.com 2019 - 2024. All rights reserved.