set.seed在此Monte Carlo Simulation(R)中的功能

时间:2018-08-13 06:22:04

标签: r montecarlo

我对这段代码的工作方式有疑问。它既是统计信息又是编码问题,所以请让我知道是否应该将其用于堆栈交换的统计信息部分。我知道该写什么代码来获得答案,但是返回的代码对我来说却没有意义。这是问题

问:假设您正在测试20种饮食对小鼠体重的有效性。对于20种饮食中的每一种,您都要对10只对照小鼠和10只经治疗的小鼠进行实验。假设零假设对所有20种饮食均无影响,并且小鼠的体重遵循正态分布,平均为30克,标准偏差为2克,请对其中一项研究进行Monte Carlo模拟:

cases = rnorm(10,30,2)
controls = rnorm(10,30,2)
t.test(cases,controls)

现在运行Monte Carlo模拟,以模拟所有20种饮食的实验结果。如果将种子设置为100,请设置set.seed(100),并在调用中使用与上面相同的代码来复制有多少个p值(数字而不是比例)低于0.05?”

这是我写的代码

set.seed(100)
pvals <- replicate(20,{
  cases = rnorm(10,30,2)
  controls = rnorm(10,30,2)
  t.test(cases,controls)$p.val
})
sum(pvals<.05)

首先,我的编码问题是为什么我需要set.seed(100)部分?难道不是在这里为我做一切吗?当我在注释掉set.seed部分的同时重新运行代码时,答案为1并没有改变,所以我对set.seed在这里的用途感到困惑。

第二,这个问题听起来与统计数据有关,但我认为它与代码有关。 sum(pvals<.o5)部分返回的答案即使多次运行也始终为1,这令人困惑,因为我认为p值是随机的,并且在多次随机比较中p值会变化。为什么每次运行该模拟时,总是总是只有低于1.05的1 p值?

0 个答案:

没有答案