【问题标题】:What is difference between replicate n times and generate n directly in sampling of R?复制 n 次和直接在 R 的采样中生成 n 有什么区别?
【发布时间】:2016-04-05 13:54:22
【问题描述】:

我被要求“将 x 模拟为一个独立的同分布 (iid) 正态变量,平均值 = 0,标准 = 1.5,样本长度为 500”

我正在通过以下两种方式进行采样:

set.seed(8402)
X <- rnorm(500, 0, 1.5)
head(X)

我得到了

-1.8297969 -0.1862884 1.4219400 -1.0841421 -1.5276701 1.6159368

但是,如果我这样做了

X <- replicate(500, rnorm(1,0,1.5))
head(X)

我得到了

-0.04032755 0.92002552 -2.28001943 -1.36840869 1.49820718 0.06205003

我的问题是生成 iid 正常变量的正确方法是什么?这两种方式有什么区别?

非常感谢!

【问题讨论】:

  • 运行你的代码我得到了两种方式相同的结果(如预期的那样)。如果我第二次不设置随机种子,我会得到你的第二个结果。第一种方式效率更高,因此推荐。
  • @Roland 你能解释一下“第二次设置随机种子”是什么意思吗?
  • 如果您完全按照问题中提供的方式运行代码,则不会得到显示的输出。
  • 计算机不太擅长随机数,因为它们实际上不会生成随机数。要对此进行测试,请设置一个随机种子,如 set.seed(42),然后运行 ​​rnorm(1) 5 次(不使用复制)。它们看起来像随机数。现在,再次运行set.seed(42) 并再运行rnorm(1) 5 次。您会注意到它们与您之前得到的数字完全相同。通过第二次运行set.seed,您“重新启动”了 R 从中提取的数字列表。这就是为什么如果您只使用一次set.seed,您的结果会有所不同。

标签: r statistics


【解决方案1】:

R 内部

在 R 内部,来自&lt;Rmath.h&gt;: double rnorm (double mean, double sd) 函数的 C 函数一次生成一个随机数。当你调用它的 R 包装函数 rnorm(n, mean, sd) 时,它会调用 C 级函数 n 次。

这与您使用 n = 1 仅调用一次 R 级函数相同,但使用 replicate 复制它 n 次。

第一种方法要快得多(当n 真的很大时可能会看到差异),因为一切都是在C 级别完成的。然而,replicatesapply 的包装器,因此它并不是真正的矢量化函数(请阅读 Is the "*apply" family really not vectorized?)。

此外,如果您为两者设置相同的随机种子,您将获得相同的随机数集。


更具说明性的实验

在我下面的评论中,我说随机种子只在输入时设置一次。为了帮助人们理解这一点,我提供了这个例子。无需使用大的nn = 4 就足够了。

首先,我们将种子设置为 0,同时生成 4 个标准正态样本:

set.seed(0); rnorm(4, 0, 1)
## we get
[1]  1.2629543 -0.3262334  1.3297993  1.2724293

请注意,在这种情况下,所有 4 个数字都是从条目种子 0 中获得的。

现在,让我们这样做:

set.seed(0)
rnorm(2, 0, 1)
## we get
[1]  1.2629543 -0.3262334
## do not reset seed, but continue with the previous seed
replicate(2, rnorm(1, 0, 1))
## we get
[1] 1.329799 1.272429

看到了吗?

但是如果我们在中间重置种子,例如,将其设置回0

set.seed(0)
rnorm(2, 0, 1)
## we get
[1]  1.2629543 -0.3262334
## reset seed
set.seed(0)
replicate(2, rnorm(1, 0, 1))
## we get
[1] 1.2629543 -0.3262334

这就是我所说的“入口”。

【讨论】:

    猜你喜欢
    • 2013-03-04
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2017-08-10
    • 2010-11-19
    • 2017-09-22
    相关资源
    最近更新 更多