从Stata复制种子设置

Mic*_*ico 7 random r code-translation stata

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

他们的代码有这个片段:

set seed 123456
Run Code Online (Sandbox Code Playgroud)

不幸的是,它完全是Stata使用的算法有点模糊.这个问题表明它是一个KISS算法,但最终没有设法复制(有些链接似乎死了/过时).而手动从塔塔对于set seed没有提及任何算法.这个问题似乎也没有完成.

尝试复制Stata的随机数是愚蠢的吗?

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

Chr*_*lan 8

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

Stata作为一种专有软件,尚未发布其核心组件的所有细节,如随机数发生器.但是,文档是可用的(Stata 14的链接),最有针对性:

runiform() 是所有其他随机数函数的基础,因为所有其他随机数函数将均匀(0,1)随机数转换为指定的分布.

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

runiform()仅当用户版本小于14或随机数生成器设置为kiss32... 时才使用KISS32算法

回想一下?RandomR中的Mersenne twister:

'种子'是一组624维的32位整数加上该组中的当前位置.

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

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

library(haven)
mydata <- read_dta("mydata.dta")
Run Code Online (Sandbox Code Playgroud)