Статистика "Обратный": генерирование данных на основе среднего и стандартного отклонения
Наличие набора данных и вычисление статистики из него легко. Как насчет другого пути?
Скажем, я знаю, что какая-то переменная имеет среднее 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, а затем добавить среднее значение.