gpt4 book ai didi

基于相同的种子,在 R 中复制 SAS (rancor) 中生成的随机正态分布?

转载 作者:行者123 更新时间:2023-12-02 07:37:04 28 4
gpt4 key购买 nike

给定相同的种子,有没有办法在 R 中使用 rannor 函数生成在 SAS 中生成的完全相同的随机正态数?

最佳答案

要使这些匹配,您需要两件事:

  • 用于生成随机数的种子
  • 用于生成随机数的公式

SAS 用于 rannor (我认为也用于 rand,但我还没有看到这一点的确认),以下算法(在 Psuedo-Random Numbers: Out of Uniform 中找到,作者:罗伯特·约翰逊和刘辉):

rannor_result = (−2* log(U1))**.5*cos(2*constant('pi')*U2)

其中 U1 和 U2 是来自统一号码流的两个号码。 (也可以获得第二个数字,但据我所知,该数字已被丢弃。)

请参阅以下 SAS 数据步骤:

data test1;
U1 = ranuni(7);
U2 = ranuni(7);
X1 = (−2* log(U1))**.5*cos(2*constant('pi')*U2);
U1 = ranuni(7);
U2 = ranuni(7);
X2 = (−2* log(U1))**.5*cos(2*constant('pi')*U2);
run;
data test2;
x1 = rannor(7);
x2 = rannor(7);
run;

test1test2 的随机数具有相同的值。

我怀疑 R 和 SAS 是否共享通用的 PRNG 算法,特别是 rannor 使用的算法不是很好(您应该使用 rand ,它要好得多,使用梅森旋转器)。但是,您可以轻松地要求 SAS 输出它使用的种子 - 只要您输出 RANUNI 结果即可。

您可以要求 SAS 按以下方式执行此操作:

data rands_uni;
seed=7;
do _i_=1 to 10;
seed1 = seed;
call ranuni(seed,x1);
seed2=seed;
call ranuni(seed,x2);
output;
end;
run;

据此,您可以在 R 中计算 rannor 结果(即,根据 x1 和 x2)。我在那里提供了种子以供引用 - 也许 R 确实有能力使用它们。上面的论文确实引用了用于 ranuni 的 SAS 算法,但它也指出,由于使用了一些修正(或者可能是由于浮点精度问题?),您无法完美地复制它。

关于基于相同的种子,在 R 中复制 SAS (rancor) 中生成的随机正态分布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30763582/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com