我正在调试模拟,发现运行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
答案 0 :(得分:5)
在函数中设置参数是一个基本概念。以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)
。由于arg
的位置代表参数mean
,并且您无需另外设置sd
,因此标准偏差设置为1。因此,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)