Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 对于某些函数及其输入,何时以及为什么不对随机数生成器进行采样?_R_Random_Simulation_Random Seed - Fatal编程技术网

R 对于某些函数及其输入,何时以及为什么不对随机数生成器进行采样?

R 对于某些函数及其输入,何时以及为什么不对随机数生成器进行采样?,r,random,simulation,random-seed,R,Random,Simulation,Random Seed,在我之前的一篇文章中,我了解到在rbinom()函数中,当p=1或p=0时,随机数生成器不进行采样。在给定某些输入的情况下,如果没有对随机数生成器进行采样,是否还有其他功能需要注意?我询问的原因是,尽管使用了固定种子,但在与这些输出变量无关的参数发生变化后,某些变量的模拟输出在模拟之间不是恒定的 我正在使用的R版本: > R.version _ platform x86_64-w64-mingw

在我之前的一篇文章中,我了解到在
rbinom()
函数中,当
p=1
p=0
时,随机数生成器不进行采样。在给定某些输入的情况下,如果没有对随机数生成器进行采样,是否还有其他功能需要注意?我询问的原因是,尽管使用了固定种子,但在与这些输出变量无关的参数发生变化后,某些变量的模拟输出在模拟之间不是恒定的

我正在使用的R版本:

> R.version
               _                           
platform       x86_64-w64-mingw32          
arch           x86_64                      
os             mingw32                     
system         x86_64, mingw32             
status                                     
major          3                           
minor          6.1                         
year           2019                        
month          07                          
day            05                          
svn rev        76782                       
language       R                           
version.string R version 3.6.1 (2019-07-05)
nickname       Action of the Toes    

这是一个相当广泛的问题,因为在R中使用RNG有很多不同的方法。很难看出任何答案都是权威和全面的

但是,可以帮助您创建一个函数来测试是否在某个调用中调用RNG:


调用\u RNG关于R生成随机数的方法,您可能会关心的一个问题是,R使用的伪随机生成器(PRNG)是全局的,但可以重新设定种子(使用set.seed)以获得可重复的“随机性”

据我所知,
rnorm
runif
rpois
等算法的文档化程度不允许您了解每种方法在何种情况下推进R的全局PRNG的程度。要了解每种方法的精确算法,请查看R的源代码。然而,事实上,全局PRNG可以为可重复的“随机性”重新设定种子,这意味着,在某种意义上,PRNG的算法不可能在不影响向后兼容性的情况下轻易改变。另请参见与您的问题相关的答案:

即便如此,对PRNG使用全局状态也是有问题的,特别是当全局种子可以在PRNG用户背后更改时。(另请参阅。)更好的方法是R使用轻量级PRNG对象,这些对象单独播种,并传递这些对象(例如,我们将有
rnorm(rng,mean,stdev)
),不同类型的PRNG对象可以实现不同的PRNG算法和/或不同的随机变量生成算法(即,
rnorm
runif
等的不同版本)

以下是一些解决您在上一个问题中潜在问题的方法:

  • 考虑一下“”的技术,您可以在此网站上搜索它
  • 将对
    rnorm
    rpois
    等的调用替换为调用
    runif
    生成统一随机数的自定义方法,然后通过反转将该数转换为所需的分布(请参见“”)
  • 将对
    rnorm
    rpois
    等的调用替换为调用
    runif
    生成统一随机数的自定义方法,然后将该数字用作本地(非全局)的种子伪随机生成器,它反过来用于从所需的分布生成变量。JAX中使用了类似的东西,尤其是它的PRNGKey类
请注意,最后两个建议适用于您的目的,假设无论何种情况,
runif
始终绘制固定数量的随机位。

rpois(…,0)
rnorm(…,0,0)
等等。我认为,只要您的模拟遇到一些边界条件,您就可能遇到此类问题。