我对从分布于2个区间的均匀分布中抽取随机样本感兴趣:从-2到-1和从1到2。属于这些区间的任何值都应该具有相等的被采样概率,而其它值(例如从-1到1)应该具有0被采样概率。runif
函数只接受单个数字作为上限和下限的参数,因此,不可能使该函数从两个区间采样。
另一种选择是运行两个runif
函数,一个在-2到-1的区间上,另一个在1到2的区间上。但是,在本例中,我明确地使它在每次绘制中从每个区间中绘制的数字数量相等。
我想允许这个变化,虽然平均来说,将有大约相同数量的正数和负数,我仍然需要看到一些随机变化,例如,从正区间抽取更多的数字,反之亦然。
4条答案
按热度按时间rqqzpn5f1#
编辑:由于我的第一个答案导致了数量完全相等的正值和负值,下面是另一种执行
runif
3次的方法:似乎没有记录,但实验使我:
示例:
91zkwejq2#
因为它是关于0对称的,所以你可以模拟一个随机符号,并将它赋给[1,2]中的一个统一值:
rm5edbpk3#
可能会在之后添加差距,如:
作为功能:
或者,如果存在多个间隙:
基准
在这个例子中,GKi的方法是最快的,而Stéphane Laurent的方法使用的内存最少。
4szc88ey4#
我编写了一个小函数来概括多个区间的均匀抽样。它使用两阶段抽样。首先,从多项式分布中提取每个区间的单位数,并根据相应的区间宽度进行加权。其次,将
runif
应用于具有指定区间参数的那些提取。适用于您的案例:
适用于多个不同大小的间隔:
创建于2023年2月13日,使用reprex v2.0.2