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

How to sample from delayed geometric distribution in matlab

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

根据我的理解,延迟几何分布定义如下,其中 f 是概率质量函数:

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

我目前从该分布中抽样的方法是首先求解 k 并定义一个 returns 随机值的函数:

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

但是,这个 returns 是一个连续值,有时是负数,我只需要返回正整数。

概率质量函数反演有明显错误吗?以及如何将随机值限制为正整数?

您可以手动生成号码:

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')