生成具有给定几何平均值的随机数字向量

时间:2015-01-21 07:55:31

标签: r

我有许多元素n和几何平均μ。使用R,我想生成n个元素的向量,以便实现的向量具有精确的几何平均μ,用方法/参数来控制向量中数字的分散。我不需要以任何特定方式分发矢量元素。

到目前为止,我有以下内容:

generateNoiseAroundReturns <- function(n, desired, sd){
  vec <- 0
  gm <- 0
  while (abs(gm - desired) > .00001){
    vec <- rnorm(n, mean = desired, sd = sd)
    gm <- geometricMean(vec)
  }
  return(vec)
}

有效,但我想知道我能做得更好/更聪明/更快。

感谢。

1 个答案:

答案 0 :(得分:3)

以对数标度工作:

set.seed(42)
x <- rnorm(1e2, mean = log(5), sd = 2) #draw random sample
x <- (scale(x) * 2) + log(5) #to make it the exact mean
x <- exp(x) 

#geometric mean
prod(x)^(1/length(x))
#[1] 5

如果您不需要“精确几何平均数”,而是需要预期值,则可以使用rlnorm