从Stata复制种子设置

时间:2016-03-23 17:33:16

标签: r random stata code-translation

我试图在R中复制别人在Stata写的一些代码,并试图预测他们的p-RNG的行为。

他们的代码有这个片段:

set seed 123456

不幸的是,Stata使用的算法确实有点模糊。 This问题表明它是一个KISS算法,但最终没有设法复制(有些链接似乎死了/过时)。来自Stata set seed的{​​{3}}并未提及有关算法的任何内容。 the manual问题似乎也没有完成。

尝试复制Stata的随机数是不是傻瓜?

我不知道使用哪个版本的Stata来创建它。

1 个答案:

答案 0 :(得分:8)

简而言之:是的,这是一个傻瓜的差事。

作为专有软件的Stata尚未发布其核心组件的所有细节,如随机数发生器。但是,{{3}}(Stata 14的链接),最有针对性:

  

runiform()是所有其他随机数函数的基础,因为所有其他随机数 -   数字函数将统一(0,1)随机数转换为指定的分布。

     

runiform()实现了Mersenne Twister 64位(MT64)和“保持简单愚蠢”   用于生成均匀(0,1)随机数的32位(KISS32)算法。 runiform()使用MT64   默认情况下算法

     

runiform()仅在用户版本低于14 时使用KISS32算法   随机数生成器已设置为kiss32 ...

回想一下来自R的?Random,对于Mersenne twister:

  

'seed'是一组624维的32位整数加上该集合中的当前位置。

Stata内部控制着624维集合,这几乎是不可能猜到的。

我建议您从Stata导出这些随机数并将它们读入矢量/矩阵/等。在R中使用

library(haven)
mydata <- read_dta("mydata.dta")