Случайный выбор одного из двух вариантов с заданной вероятностью - PullRequest
1 голос
/ 08 апреля 2020

Мне нужно выполнить две подпрограммы, одну с вероятностью p1, а другую с вероятностью p2 st 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 2 2 2 2 1 2 1

ожидаемый результат был номер 1, 6 раз и номер 2, 4 раза, но результат не такой, как ожидалось.

использовать функцию: s = randsample([1,2],10,true,[0.6,0.4]);

использовать процедуру:

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

метод 2 и 3 также дают результаты по методу 1, кто-нибудь может мне помочь выяснить причину? или интерпретировать результаты как то, как они следуют вероятности? или другой возможный способ решить эту проблему.

1 Ответ

0 голосов
/ 08 апреля 2020

Полагаю, 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
...