как сделать выборку из перевернутой кривой колокола - PullRequest
3 голосов
/ 23 января 2020

Я могу генерировать числа с равномерным распределением, используя код ниже:

runif(1,min=10,max=20)

Как я могу выбрать случайно сгенерированные числа, которые чаще падают ближе к границам минимума и максимума? (Ака "перевернутая кривая колокола")

Ответы [ 3 ]

6 голосов
/ 23 января 2020

Ну, кривая колокола, как правило, гауссова, то есть она не имеет мин и макс. Вы можете попробовать Бета-распределение и сопоставить его с желаемым интервалом. Вдоль линий

min <- 1
max <- 20
q <- min + (max-min)*rbeta(10000, 0.5, 0.5)

Как отмечает @ Gregor-reinstateMonica, бета-распределение ограничено на обоих концах, [0 ... 1], поэтому его можно легко отобразить в любом ограниченном интервале просто по шкале и сдвигу , Он имеет два параметра и симметрию c, если эти параметры равны. Выше 1 параметра делают это своего рода распределением звонка, но ниже 1 параметра превращают его в обратный звонок, что вы ищете. Вы можете поиграть с ними, поставить разные значения вместо 0,5 и посмотреть, как идут дела. Параметры, равные 1, делают его равномерным.

1 голос
/ 24 января 2020

Выборка из бета-дистрибутива - хорошая идея. Другим способом является выборка нескольких одинаковых чисел, а затем взять их минимальное или максимальное.

В соответствии с теорией статистики порядка, кумулятивная функция распределения для максимума равна F(x)^n, где F - это файл cdf, из которого взята выборка, а n - количество выборок, а cdf для минимума 1 - (1 - F(x))^n. Для равномерного распределения, cdf является прямой линией от 0 до 1, то есть F(x) = x, и поэтому cdf максимума равен x^n, а cdf минимума равен 1 - (1 - x)^n. По мере увеличения n они становятся все более изогнутыми, причем большая часть массы приближается к концам.

Поиск в Интернете "статистики заказов" приведет к увеличению ресурсов.

0 голосов
/ 24 января 2020

Если вам не нужны десятичные разряды, хакерский способ - создать большую выборку нормально распределенных точек данных, используя rnorm(), а затем посчитать, сколько раз каждое данное округленное значение появляется (n), и затем вычтите n из максимального значения n (max(n)), чтобы получить обратные значения.

Затем можно использовать обратное значение для создания нового вектора (из которого вы можете производить выборку), то есть:


library(tidyverse)

x <- rnorm(100000, 100, 15)

x_tib <- round(x) %>%
  tibble(x = .) %>%
  count(x) %>%
  mutate(new_n = max(n) - n)

new_x <- rep(x_tib$x, x_tib$new_n)

qplot(new_x, binwidth = 1)


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