«Обратная» статистика: генерирование данных на основе среднего и стандартного отклонения - PullRequest
13 голосов
/ 09 июля 2010

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

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

РЕДАКТИРОВАТЬ: Этот вид развивается из этот вопрос ; Я мог бы сделать что-то на основе этого метода, но мне интересно, есть ли более эффективный способ сделать это.

Ответы [ 8 ]

12 голосов
/ 09 июля 2010

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

8 голосов
/ 10 июля 2010

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

= norminv (rand (), 100, 15)

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

2 голосов
/ 25 марта 2014

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

http://rosettacode.org/wiki/Random_numbers

2 голосов
/ 09 июля 2010

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

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"
2 голосов
/ 09 июля 2010

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

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

Вот ссылка на википедию о генерации гауссовых переменных

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

1 голос
/ 11 января 2013

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

1 голос
/ 09 июля 2010

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

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

0 голосов
/ 09 июля 2010

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

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