我有许多元素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)
}
有效,但我想知道我能做得更好/更聪明/更快。
感谢。
答案 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
。