如何在Matlab中从延迟的几何分布中采样

时间:2019-05-29 11:04:06

标签: matlab distribution sampling

在MATLAB中从延迟的几何分布(大于0的正整数的几何分布)进行采样的最佳和正确的方法是什么?

据我所知,延迟几何分布定义如下,其中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 个答案:

答案 0 :(得分:2)

您可以手动生成数字:

cdf_val = rand();

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

或者正如Luis已经使用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