Статистика "Обратный": генерирование данных на основе среднего и стандартного отклонения

Наличие набора данных и вычисление статистики из него легко. Как насчет другого пути?

Скажем, я знаю, что какая-то переменная имеет среднее X, стандартное отклонение Y и предполагает, что оно имеет нормальное (гауссовское) распределение. Каким будет лучший способ создания "случайного" набора данных (произвольного размера), который будет соответствовать распределению?

EDIT: этот вид развивается из этого вопроса; Я мог бы сделать что-то на основе этого метода, но мне интересно, есть ли более эффективный способ сделать это.

Ответ 1

С помощью метода Box-Mueller можно создать стандартные стандартные случайные переменные. Затем, чтобы преобразовать это, чтобы иметь значение mu и сигма стандартного отклонения, умножьте свои образцы на сигму и добавьте mu. То есть для каждого z из стандартной нормы вернем mu + sigma * z.

Ответ 2

Это действительно легко сделать в Excel с помощью функции norminv(). Пример:

= norminv (rand(), 100, 15)

будет генерировать значение из нормального распределения со средним значением 100 и stdev из 15 (человеческие IQ). Перетащите эту формулу вниз по столбцу, и у вас будет столько значений, сколько хотите.

Ответ 3

Существует несколько методов генерации гауссовских случайных величин. Стандартным методом является Box-Meuller, о котором упоминалось ранее. Немного более быстрая версия:

http://en.wikipedia.org/wiki/Ziggurat_algorithm

Здесь ссылка на wikipedia для генерации гауссовых переменных

http://en.wikipedia.org/wiki/Normal_distribution#Generating_values_from_normal_distribution

Ответ 4

Я приведу пример, используя R и второй алгоритм в списке здесь.

X<-4; Y<-2 # mean and std
z <- sapply(rep(0,100000), function(x) (sum(runif(12)) - 6) * Y + X)

plot(density(z))
> mean(z)
[1] 4.002347

> sd(z)
[1] 2.005114

> library(fUtilities)

> skewness(z,method ="moment")
[1] -0.003924771
attr(,"method")
[1] "moment"

> kurtosis(z,method ="moment")
[1] 2.882696
attr(,"method")
[1] "moment"

Ответ 5

Я нашел страницу, на которой эта проблема решается на нескольких языках программирования:

http://rosettacode.org/wiki/Random_numbers

Ответ 6

Вы можете сделать это своего рода моделирование методом Монте-Карло. Начните с широкого случайного "допустимого диапазона" и создайте несколько действительно случайных значений. Проверьте свою статистику и посмотрите, отключены ли среднее значение и отклонение. Отрегулируйте "допустимый диапазон" для случайных значений и добавьте еще несколько значений. Повторяйте, пока не нажмете как ваши требования, так и размер выборки населения.

Просто с головы, дайте мне знать, что вы думаете.: -)

Ответ 7

Функция MATLAB normrnd из панели инструментов статистики может генерировать нормально распределенные случайные числа с заданными mu и sigma.

Ответ 8

Легко создать набор данных с нормальным распределением (см. http://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform).
Помните, что сгенерированный образец не будет иметь точного распределения N (0,1)! Вам нужно его стандартизировать - вычесть среднее значение, а затем делить на std отклонение. Затем вы можете преобразовать этот образец в нормальное распределение с заданными параметрами: умножить на отклонение std, а затем добавить среднее значение.