Как создать популяцию случайных чисел в определенном экспоненциально увеличивающемся диапазоне - PullRequest
0 голосов
/ 29 января 2019

У меня 16068 точек данных со значениями в диапазоне от 150 до 54850 (mean = 3034.22).Каким будет R-код для генерации набора случайных чисел, экспоненциально растущих по частоте между 54850 и 150?

Я пытался использовать функцию rexp() в R, но не могу понять, как установить диапазон между 150 и 54850. В моей фактической совокупности данных значение лямбды равно 25.

set.seed(123)
myrange <- c(54850, 150)
rexp(16068, 1/25, myrange)

При вызове выдается ошибка.

Error in rexp(16068, 1/25, myrange) : unused argument (myrange)

Предполагаемое население должно экспоненциально увеличиваться по мере приближения значений данных к 150. У меня 25 точек данных со значением 150 и только одинсо значением 54850. Моделируемая популяция должна попадать в этот диапазон.

1 Ответ

0 голосов
/ 29 января 2019

Это действительно больше вопрос для math.stackexchange , но из любопытства я предоставляю это решение.Возможно, этого достаточно для ваших нужд.

Во-первых, ?rexp говорит нам, что у него есть только два аргумента, поэтому мы генерируем случайное экспоненциальное распределение с желаемой длиной.

set.seed(42)         # for sake of reproducibility
n <- 16068
mr <- c(54850, 150)  # your 'myrange' with less typing

y0 <- rexp(n, 1/25)  # simulate exp. dist.
y <- y0[order(-y0)]  # sort

Теперьнам нужен математический подход для изменения масштаба.

# f(x) = (b-a)(x - min(x))/(max(x)-min(x)) + a
y.scaled <- (mr[1] - mr[2]) * (y - min(y)) / (max(y) - min(y)) + mr[2]

Доказательство:

> range(y.scaled)
[1]   150.312 54850.312

Это не так уж и плохо.

Сюжет:

plot(y.scaled, type="l")

enter image description here

Примечание: Возможны некоторые математические проблемы, см., Например, этот ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...