r - 此蒙特卡洛模拟 (R) 中的 set.seed 函数
问题描述
我对这段代码的工作方式有一些疑问。这既是统计数据又是编码问题,所以请让我知道我是否应该将其带到堆栈交换的统计数据部分。我知道要编写什么代码来获得答案,但是返回的代码对我来说没有意义。这是问题
问:假设您正在测试 20 种饮食对小鼠体重的影响。对于 20 种饮食中的每一种,您都用 10 只对照小鼠和 10 只治疗小鼠进行了实验。假设饮食对所有 20 种饮食都没有影响的零假设是正确的,并且小鼠体重遵循平均 30 克和标准偏差为 2 克的正态分布,对其中一项研究运行蒙特卡罗模拟:
cases = rnorm(10,30,2)
controls = rnorm(10,30,2)
t.test(cases,controls)
现在运行蒙特卡罗模拟,模拟所有 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 个低于 0.05 的 p 值?
解决方案
推荐阅读
- cplex - CPLEX:如何获得 >0 的 dvar 值
- powershell - 有没有办法从预定时间使用 Powershell 秒表作为计数器?
- tensorboard - 在 TensorFlow 2.0 中修改 TensorBoard
- reactjs - 在 Jest 中获取 setCustomValidity 的值
- reactjs - React js在按钮单击时获取表格数据
- java - 如何使用 Hibernate 处理 PostgreSQL XML 字段?
- elasticsearch - 重复数据 - Elasticsearch
- android - 天文台空对象参考
- excel - 数据透视表的内容格式
- html - Safari 中的 CSS 透视图/translateZ 问题