在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
但是,这将返回一个连续值,有时为负数,其中我只需要返回正整数。
在反转概率质量函数时是否存在明显的误差?以及如何将随机值限制为正整数?
答案 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')