随机数生成
说明
.随机.种子
是一个整数向量,包含随机数发电机状态用于在中生成随机数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位无符号整数。前三个和后三个都没有应全部为零,并且限制为小于4294967087
和4294944443
分别是。
这本身并不特别有趣,但提供了包中使用的多个流的基础平行.
它显示了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