如何从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')
在 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')