使用rnorm
(或runif
等)在 R 中生成随机数时,它们很少与从中采样的分布具有相同的均值和标准差。是否有简单的一两行代码可以帮我实现这个功能?作为初步解决方案,我创建了这个函数,但它似乎应该是 R 或某个软件包本身就具有的功能。
# Draw sample from normal distribution with guaranteed fixed mean and sd
rnorm_fixed = function(n, mu=0, sigma=1) {
x = rnorm(n) # from standard normal distribution
x = sigma * x / sd(x) # scale to desired SD
x = x - mean(x) + mu # center around desired mean
return(x)
}
举个例子:
x = rnorm(n=20, mean=5, sd=10)
mean(x) # is e.g. 6.813...
sd(x) # is e.g. 10.222...
x = rnorm_fixed(n=20, mean=5, sd=10)
mean(x) # is 5
sd(x) # is 10
我希望你能担任翻译,因为我在将分析应用于真实数据之前需要对模拟数据进行调整。这是有好处的,因为使用模拟数据时,我知道确切的属性(均值、标准差等),并且可以避免p值膨胀,因为我正在进行推论统计。我想问是否存在像“...”这样简单的东西。
rnorm(n=20, mean=5, sd=10, fixed=TRUE)
scale
来实现这个...但这不正是说明样本和总体统计之间的差异吗?随着你的n
变大,sd(x)
和mean(x)
将接近你提供的值,但仅有 20 个样本,你不能期望完美的分布... - JustinMASS::mvrnorm
确实有类似的功能(但对于多元情况来说稍微棘手一些,这可能是为什么它被内置的原因)。同意@Justin的看法,你可以使用mu+sigma*scale(rnorm(n))
作为一行代码。 - Ben Bolker