随机:随机数生成

随机R文件

随机数生成

说明

.随机.种子是一个整数向量,包含随机数发电机状态用于在中生成随机数R(右).它可以保存和恢复,但用户不应更改。

RNG种类是更友好的查询或设置类型的界面使用中的RNG。

RNG版本可以用来设置随机生成器在更早的时候R(右)版本(用于再现性)。

设置种子是指定种子的推荐方式。

用法

.随机种子<-c(rng.kind,n1,n2,…)RNGkind(kind=NULL,normal.kind=NULL,sample.kind=NULL)RNG版本(vstr)set.seed(seed,kind=NULL,normal.kind=NULL,sample.kind=NULL)

论据

友善的

字符或无效的.如果友善的是一个字符字符串,集合R(右)的RNG达到所需类型。使用“默认”返回到R(右)违约。请参阅“详细信息”以了解解释无效的.

正常.kind

字符串或无效的.如果它是一个字符字符串,设置Normal生成的方法。使用“默认”返回到R(右)违约。无效的没有改变。

样品.种类

字符串或无效的.如果它是一个字符字符串,设置离散均匀生成方法(用于样品例如)。使用“默认”返回到这个R(右)违约。无效的没有任何改变。

种子

单个值,解释为整数,或无效的(请参阅“详细信息”)。

电压互感器

包含版本号的字符串,例如。,"1.6.2"当前的默认RNG配置R(右)如果电压互感器大于当前版本。

rng.种类

整数代码0:k个对于上述内容友善的.

n1、n2。。。

整数。查看所需数量的详细信息(这取决于rng.种类).

细节

下面给出了当前可用的RNG类型。友善的与此列表部分匹配。默认值为“梅森扭转器”.

“Wichmann-Hill”

种子,.随机.seed[-1]==r[1:3]是的整数向量长度3,其中每个r(i)在中1:(p[i]-1),其中第页是素数的长度3向量,p=(3026930307,30323).Wichmann–Hill发电机的循环长度为6.9536e12(=触头(p-1)/4,请参阅应用统计学(1984)33,123修正了原始文章)。它显示了TestU01 Crush套件中的12个明显故障和22个在BigCrush套房(欧库耶, 2007).

“Marsaglia-Multicarry”:

一个乘法运算按照George的建议,使用RNGMarsaglia在他的邮件列表中科学.统计.马赫’.它的周期超过2^60.

它展示了L'Ecuyer的TestU01 Crush套件中的40个明显故障。结合Ahrens-Dieter或Kinderman-Ramage展出单变量分布与正态分布的偏差生成。有关讨论,请参见\Sexpr[results=rd]{tools:::rd_expr_PR(18168)}。

种子是两个整数(允许所有值)。

“超级超级”:

Marsaglia 70年代著名的Super-Duper具有以下功能的版本通过Diehard的MTUPLE测试蓄电池。它有一个周期关于4.6*10^18对于大多数初始种子。种子是两个整数(全部第一个种子允许的值:第二个种子必须是奇数)。

我们使用Reeds的实现(1982–84).

这两个种子是Tausworks和同余长整数,分别是。S的一对一映射.随机.种子[1:12]是可能的,但我们不会发布一个,尤其是作为此生成器与最近版本的S-PLUS完全相同。

它在TestU01 Crush套件中显示了25个明显的故障(L'Ecuyer公司, 2007).

“梅森扭转器”:

摘自松本和西村(1998);代码于2002年更新。具有周期的扭曲GFSR2^19937 - 1和623年的均布连续维度(整个期间)。“种子”是624维32位整数集加上中的当前位置那套。

由于B.D.Ripley的原因,R使用了自己的初始化方法,并且不受1998年代码中初始化问题的影响松本和西村在2002年的更新中进行了讨论。

它显示了TestU01破碎和BigCrush套房(L'Ecuyer公司, 2007).

“Knuth-TAOCP-2002”:

使用滞后斐波那契序列的32位整数GFSR减法。也就是说,使用的循环是

X[j]=(X[j-100]-X[j-37])修改版2^30

“种子”是最后100个数字的集合(实际上记录为101个数字,最后一个是缓冲器)。这段时间已经过去了2^129.

“Knuth-TAOCP”:

Knuth(1997)的早期版本。

2002版与早期版本不向后兼容版本:种子对GFSR的初始化发生了更改。R(右)报道称,不允许你选择连续种子“软弱”,已经把种子炒了。否则,该算法与Knuth-TAOCP-2002相同滞后斐波那契递推公式。

此生成器的初始化在解释中完成R(右)代码因此需要很短但值得注意的时间。

它在TestU01 Crush套件中显示出3个明显的故障BigCrush套件中的4个明显故障(L'Ecuyer公司, 2007).

“L'Ecuyer-CMRG”:

来自L'Ecuyer的“组合多递归生成器”(1999),其中每个元素都是一个反馈乘法具有三个整数元素的生成器:因此种子是一个(有符号)长度为6的整数向量。这段时间已经过去了2^191.

种子的6个元素在内部被视为32位无符号整数。前三个和后三个都没有应全部为零,并且限制为小于42949670874294944443分别是。

这本身并不特别有趣,但提供了包中使用的多个流的基础平行.

它显示了TestU01破碎和BigCrush套房(L'Ecuyer公司, 2007).

“用户提供”:

使用用户提供的生成器。请参见随机.user对于细节。

正常.kind可以是“Kinderman-Ramage”,“Buggy Kinderman Ramage”(不适用于设置种子),“Ahrens Dieter”,“拉箱子”,“反转”默认),或“用户提供”.(有关反转,请参见中的引用q范数Kinderman Ramage发电机用于1.7.0之前的版本(现在称为“车”)有几个近似误差,只能用于复制旧的结果。这个“拉箱子”生成器是有状态的法线是按顺序生成和返回的。状态重置无论何时选择它(即使它是当前正常发电机)以及何时友善的已更改。

样品.种类可以是“舍入”“拒绝”,或部分匹配。前者是版本中的默认值3.6.0之前:样品明显不均匀并且只应用于老年人的繁殖结果。有关讨论,请参见\Sexpr[results=rd]{tools:::rd_expr_PR(17494)}。

设置种子使用单个整数参数设置尽可能多的种子根据需要。这是一种简单的方式,可以让你变得与众不同通过指定小整数参数来种子,也可以作为获取对于更复杂的方法(尤其是“梅森扭转器”“Knuth-TAOCP”). 没有保证不同的值种子将为RNG播种不同的是,尽管任何例外都极为罕见。如果用呼叫种子=空它会重新初始化(请参阅“注释”)好像还没有下过种子。

使用kind=空,normal.kind=空sample.kind=空在里面RNG种类设置种子选择当前使用的生成器(包括上一个会话中使用的生成器,如果工作区已恢复):如果未使用生成器,则选择“默认”.

价值

.随机.种子是一个整数向量,其第一个要素代码RNG和普通发电机的类型。最低的两个十进制数字在0:(k-1)哪里k个是可用RNG的数量。数百人表示正常发电机的类型(从0)、和万表示离散均匀采样器的类型。

在基础C中,.随机.种子[-1]未签名的;因此在R(右) .随机.种子[-1]可以是负数,因为用有符号整数表示无符号整数。

RNG种类返回RNG的三元素字符向量,选择的常规和样本类型之前呼叫,如果两个参数都不是无效的。类型作为默认设置,通过调用选择RNG种类或通过设置.随机.种子在工作区中。(注意:之前R(右)3.6.0第一次在一个双元素字符向量中返回了两种类型。)

RNG版本返回与相同的信息RNG种类关于特定中的默认值R(右)版本。

设置种子收益无效的,无形中。

注释

最初,没有种子;从当前的时间和进程ID(如果需要)。因此不同默认情况下,会话将提供不同的模拟结果。然而,如果以前的已保存的工作空间将被恢复。

.随机.种子保存统一随机数的种子集发电机,至少用于系统发电机。它没有必须保存其他发电机的状态,尤其是不保存Box–Muller法线生成器的状态。如果你愿意稍后要复制工作,请致电设置种子(最好与的显式值友善的正常.kind)而不是设置.随机.种子.

对象.随机.种子仅在用户的工作区。

不要依赖RNG中低阶位的随机性。大多数提供的统一生成器返回32位整数值转换为双打,所以他们最多只能拿2^32不同的值和长时间运行将返回重复值(Wichmann-Hill为异常,并且都给出了至少30个不同的位。)

作者

RNGkind:Martin Maechler。当前实施,B.D.Ripley由邓肯·默多克修改。

工具书类

Ahrens,J.H.和Dieter,U.(1973年)。Forsythe方法在正态随机抽样中的推广分配。计算数学,27, 927–937.

Becker,R.A.、Chambers,J.M.和Wilks,A.R.(1988)。新S语言.沃兹沃思和布鲁克斯/科尔。(设置种子,存储在中.随机.种子.)

Box,G.E.P.和Muller,M.E.(1958年)。关于生成正态随机偏差的注记。数理统计年报,29, 610–611.\Sexpr[results=rd,stage=build]{tools:::rd_expr_doi(“10.1214/aoms/11770706645”)}。

De Matteis,A.和Pagnutti,S.(1993年)。Wichmann-Hill随机数的长程相关分析发电机。统计与计算,, 67–70.\Sexpr[results=rd,stage=build]{tools:::rd_expr_doi(“10.1007/BF00153065”)}。

Kinderman,A.J.和Ramage,J.G.(1976年)。正态随机变量的计算机生成。美国统计协会杂志,71,893–896.\Sexpr[results=rd,stage=build]{tools:::rd_expr_doi(“10.2307/2286857”)}。

Knuth,D.E.(1997)。计算机编程的艺术.第二卷,第三版。
源代码位于https://www-cs-学院.stanford.edu/~knuth/taocp.html.

Knuth,D.E.(2002)。计算机编程的艺术.第二卷,第三版,第九次印刷。

L'Ecuyer,P.(1999)。组合多重递归的良好参数和实现随机数生成器。运筹学,47, 159–164.\Sexpr[results=rd,stage=build]{tools:::rd_expr_doi(“10.1287/opre.47.1159”)}。

L'Ecuyer,P.和Simard,R.(2007)。TestU01:随机数生成器经验测试的C库ACM数学软件汇刊,33,第22条。\Sexpr[results=rd,stage=build]{tools:::rd_expr_doi(“10.1145/126877.1268777”)}。
TestU01 C库可从http://simul.iro.umontreal.ca/testu01/tu01.html或者也可以https://github.com/umontreal-simul/TestU01-2009.

Marsaglia,G.(1997年)。C语言的随机数生成器.讨论稿,发布在Usenet新闻组科学.统计.马赫1997年9月29日。

Marsaglia,G.和Zaman,A.(1994年)。一些便携式超长周期随机数生成器。物理学中的计算机,8, 117–121.\Sexpr[results=rd,stage=build]{tools:::rd_expr_doi(“10.1063/1.168514”)}。

Matsumoto,M.和Nishimura,T.(1998年)。梅森捻线器:623维均匀分布伪随机数发生器,美国计算机学会模型和计算机仿真汇刊,8, 3–30.
源代码以前位于http://www.math.keio.ac.jp/~matumoto/emt.html.
现在看看http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/C-LANG/C-LANG.html.

Reeds,J.、Hubert,S.和Abrahams,M.(1982–4)。加州大学伯克利分校SuperDuper的C实现。(吉姆·里兹与罗斯·伊哈卡的私人交流。)

Wichmann,B.A.和Hill,I.D.(1982年)。算法AS 183:一种高效可移植的伪随机数发电机。应用统计学,31, 188–190; 评论:34、198和35, 89.\Sexpr[results=rd,stage=build]{tools:::rd_expr_doi(“10.2307/2347988”)}。

另请参阅

样品用于随机抽样,包括更换和不更换。

随机变量生成函数的分布标准分布。

示例

需要(统计)##为当前RNG设定种子,即设置RNG状态结实种子(42);u1<-runif(30)结实种子(42);u2<-runif(30)#由于相同的RNG状态而相同:stopifnot(相同(u1,u2))##默认的随机种子是626个整数,所以只打印几个runif(1)。随机种子[1:6];运行(1)。随机种子[1:6]##如果没有种子,则会创建一个“随机”新种子:rm(.Random.seed);运行(1)。随机种子[1:6]确定<-RNGkind()RNGkind(“Wich”)#(“kind”上的部分字符串匹配)##这显示了“runif(.)”如何用于Wichmann-Hill,##仅使用R函数:p.WH<-c(30269、30307、30323)a.WH<-c(171、172、170)下一步。WHseed<-函数(i.seed=.Random.seed[-1]){(a.WH*i.seed)%%p.WH}my.runif1<-函数(i.seed=.Random.seed){ns<-next.WHseed(i.seed[-1]);总和(ns/p.WH)%%1}set.seed(1998-12-04)#(当下一行添加到souRce时)rs<-。随机种子(WHs<-下一个.WHseed(rs[-1]))u<-运行(1)斯托皮夫诺(下一步。WHeed(rs[-1])==。随机种子[-1],all.equal(u,my.runif1(rs)))## ----.随机.种子RNGkind(“Super”)#匹配“Super Duper”RNGkind().Random.seed#new,对应于Super-Duper##重置:RNGkind(合格[1])RNGversion(getRversion())#此R版本的默认版本## ----sum(duplicated(runif(1e6))#对于默认生成器大约为110##我们预计几乎肯定会有重复qbirthday(1-1e-6,classes=2e9)#235000