r - rnorm 正在生成非随机的实现
问题描述
我正在调试我的模拟,我发现当我运行时rnorm()
,我的随机正常值在我看来根本不是随机的。ccc
是参数给出的平均 sd 向量。我怎样才能得到真正随机的正常实现?由于我最初的模拟很长,我不想进入 Gibbs 抽样......你知道为什么我得到正常随机变量的非随机实现吗?
> ccc
# [1] 144.66667 52.52671
> rnorm(20, ccc)
# [1] 144.72325 52.31605 144.44628 53.07380 144.64438 53.87741 144.91300 54.06928 144.76440
# [10] 52.09181 144.61817 52.17339 145.01374 53.38597 145.51335 52.37353 143.02516 52.49332
# [19] 144.27616 54.22477
> rnorm(20, ccc)
# [1] 143.88539 52.42435 145.24666 50.94785 146.10255 51.59644 144.04244 51.78682 144.70936
# [10] 53.51048 143.63903 51.25484 143.83508 52.94973 145.53776 51.93892 144.14925 52.35716
# [19] 144.08803 53.34002
解决方案
在函数中设置参数是一个基本概念。举个rnorm()
例子:
它的结构是rnorm(n, mean = 0, sd = 1)
。显然,mean
和sd
是两个不同的参数,因此您需要为它们输入各自的值。这是您可能会遇到的令人困惑的情况:
arg <- c(5, 10)
rnorm(1000, arg)
这实际上意味着rnorm(n = 1000, mean = c(5, 10), sd = 1)
。标准差设置为 1,因为 的位置arg
代表参数mean
,您无需sd
额外设置。因此,rnorm()
将采用默认值 1 到sd
。然而,是什么mean = c(5, 10)
意思?让我们检查:
x <- rnorm(1000, arg)
hist(x, breaks = 50, prob = T)
# lines(density(x), col = 2, lwd = 2)
您可以观察到随机样本是一个双峰正态分布,均值出现在5 和 10处(实际上整体不再是正态的)。至于你的问题,应该是:
arg <- c(5, 10)
rnorm(1000, arg[1], arg[2])
这意味着rnorm(n = 1000, mean = 5, sd = 10)
。mean = 5
再检查一次,你会得到一个带有和的正态分布sd = 10
。
x <- rnorm(1000, arg[1], arg[2])
hist(x, breaks = 50, prob = T)
# curve(dnorm(x, arg[1], arg[2]), col = 2, lwd = 2, add = T)
推荐阅读
- python - 想让 Python 判断一个随机猜测的字母在计算机生成的单词中的位置
- laravel - 在 Laravel 中使用数组重定向
- mysql - Laravel eloquent hasOne 选择特定字段
- javascript - 我收到“TypeError:无法读取 null 的属性‘标签’”,但仅在我的 discord.js 机器人的打包版本中
- python - python mysql数据库日期时间
- json - Angular Schema 验证失败并出现以下错误:数据路径“”不应具有其他属性(rebaseRootRelativeCssUrls)
- java - 如何打包 maven jar 并将生成的 JAR 文件的多个副本输出到不同的文件夹?
- list - 用 DCG 解析项目列表?
- angular - 如何为两个不同的测试从模拟服务返回不同的值?
- php - preg_match() 不匹配 img src