Должно работать ОК, чтобы минимизировать сумму квадратов отклонений от целевых значений.В этом подходе есть подводные камни (см., Например, Числовые рецепты от Press et al.), Но он должен быть в порядке для простых задач.Следующий код появляется для получения правильных ответов для вашего случая:
f <- function(p,seed=7,target=c(20,6)) {
mu <- log(p[1])
sd <- log(p[2])
set.seed(seed)
r <- rlnorm(1e4,mu,sd)
sum((c(mean(r),sd(r))-target)^2)
}
Выбор некоторых нелепых начальных значений ({15,2}):
optim(par=c(15,2), fn=f)
На основеПри ответе @ Коула я бы подумал, что это сработает отлично: нарисуйте нормальные отклонения, преобразуйте их так, чтобы они имели среднее значение и sd точно , равные значениям логарифмической шкалы, а затем возвели в степень.Но это работает только в среднем или асимптотически (т. Е. Большая выборка сходится к желаемому среднему значению), не совсем для конечных выборок.Точно не продумал, почему это так.
rlnorm_exact <- function(n, m, sd) {
m2 <- log(m^2 / sqrt(sd^2 + m^2))
sd2 <- sqrt(log(1 + (sd^2 / m^2)))
r <- c(scale(rnorm(n)))
return(exp(sd2*r+m2))
}