首页 > 解决方案 > 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 

标签: r

解决方案


在函数中设置参数是一个基本概念。举个rnorm()例子:

它的结构是rnorm(n, mean = 0, sd = 1)。显然,meansd是两个不同的参数,因此您需要为它们输入各自的值。这是您可能会遇到的令人困惑的情况:

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)

在此处输入图像描述


推荐阅读