Как сделать выборку из отложенного геометрического распределения в Matlab - PullRequest
0 голосов
/ 29 мая 2019

Каков наилучший и правильный способ выборки из отложенного геометрического распределения (геометрическое распределение для натуральных чисел, больших 0) в matlab?

Насколько я понимаю, геометрическое распределение с задержкой определяется следующим образом, где f - функция вероятности массы:

f(k)= (1-p)*p^(k-1) for k=1,2,3... and 0<p<1

Мой текущий подход к выборке из этого распределения - сначала найти k и определить функцию, которая возвращает случайное значение:

function k = georndDel(p)
    f = rand;
    k = log(-(f*p)./(p-1))./log(p); %for log(p)<>0, 0<p<1
end

Однако, это возвращает непрерывное значение, иногда отрицательное, где мне требуется, чтобы возвращались только положительные целые числа

Есть ли очевидная ошибка в обращении функции вероятности массы? И как я могу ограничить случайные значения положительными потребителями?

1 Ответ

2 голосов
/ 29 мая 2019

Вы можете сгенерировать числа вручную:

cdf_val = rand();

k = log(1-cdf_val)/log(1-p);
k = round(k+0.5);

Или, как уже упоминал Луис, используя geornd () плюс 1.

Вот пример:

p = 0.1;

n = 20000;

arr1=zeros(n, 1);
arr2=zeros(n, 1);

for i=1:n
    % manual approach
    cdf_val = rand();

    k = log(1-cdf_val)/log(1-p);
    arr1(i) = round(k+0.5);

    % using geornd
    arr2(i) = geornd(p)+1;
end

histogram(arr1, 0:60);
hold on;
histogram(arr2, 0:60);
hold off;
legend('manual', 'geornd+1')

generating delayed geometric distribution manually

...