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

У меня есть 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. Смоделированная популяция должна попадать в этот диапазон.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
207
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это действительно больше вопрос для 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")

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

Большое спасибо, @jay.sf. Есть небольшая проблема с масштабированным кодом: y.scaled <- (mr[1] - mr[2]) * (y - min(y)) / (max(y) - min(y)) + mr[2] Как только я поместил его таким образом, он работал отлично.

David Wright 29.01.2019 12:21

Добро пожаловать. Просто опечатка, спасибо, поправил. Пожалуйста, отметить вопрос как отвеченный, это не позволит людям тратить время на ответы на вопрос, на который уже был дан ответ, спасибо.

jay.sf 29.01.2019 12:26

Другие вопросы по теме