#r #random
Вопрос:
Я пытаюсь сгенерировать случайное число от 1e-9 до 1e9. Очень наивная идея состоит в том, чтобы сгенерировать последовательность от 1 до 1e18, а затем разделить на 1e9. как показано ниже. но, похоже, это не работает.
set.seed(100)
rand <- sort(runif(10000, min =1, max= 1e18))/1e9
result <- sample(rand, 1)
min(rand)
max(rand)
# result 664426274
# min(rand) 199051.1
# max(rand) 999853646
rand %>% ecdf() %>% plot
log(rand) %>% ecdf() %>% plot
минимальное число намного больше, чем я ожидаю. Друзья, я проверил сюжет с ecdf
помощью . похоже, что числа ниже 1 довольно ограничены.
Как я могу сгенерировать однородную распределенную последовательность?
ps, что, если я сгенерирую последовательность из 2 шагов?
rand2 <- c(runif(5000)/1e9, runif(5000, min = 1, max = 1e9))
это происходит таким образом.
rand2 %>% ecdf() %>>% журнал построения(rand2) %>>>% ecdf() %>>>>% график
Пожалуйста, посоветуйте.
Комментарии:
1. Чего вы ожидали от минимального номера? не похоже, что вы ожидаете равномерного распределения. Вы ожидали бы, что почти не получите чисел меньше 1, если вы находитесь в диапазоне от ~0 до 1 000 000 000 при 10 000 розыгрышах
2. Вы имели в виду «от 1e-9 до 1e9» или «от-1e9 до 1e9» ?
3. Если вы сгенерируете случайное число от 0 до 1e9, оно почти всегда будет выше 1 (только одно из миллиарда чисел будет ниже 1). Вам нужно равномерное распределение по логарифмам, где порядок величины распределен равномерно (например, вероятность того, что он будет в (.1, 1), как в (1, 10), так и в (10, 100)?)
4. спасибо, я ожидаю от 1e-9 до 1e9. 10000 образцов приведены только для справки.
5. Вам нужно объяснить, как вы ожидаете, что нелинейная последовательность будет линейной. (Что, как я уже писал, является сутью ответа @FlightOdyssey.)
Ответ №1:
Ваш код выглядит правильно. Подумайте об этом: если вы генерируете случайное число равномерно между 1e-9 и 1e9, каковы шансы, что оно будет меньше, чем, скажем, 1? Ну, так и было бы 1/(1e9 - 1e-9)
, или примерно один на миллиард. Поэтому вполне ожидаемо, что если вы создадите только 10000 примеров, вы никогда не увидите результат, близкий к границе.
С другой стороны, возможно, на самом деле вы ищете, чтобы показатель степени был равномерно распределен между -9 и 9? (Трудно сказать, правда это или нет, это зависит от вашего варианта использования.) В этом случае вы захотите выбрать равномерный x между -9 и 9, а затем вычислить 10^x.
Комментарии:
1. спасибо, я попробовал этот подход, и я попробую еще раз.