2010-07-08 2 views
12

Наличие набора данных и вычисление статистики из него легко. Как насчет другого пути?Статистика «Обратный»: генерация данных на основе среднего и стандартного отклонения

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

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

ответ

12

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

1

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

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

0

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

2

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

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

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

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

2

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

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" 
8

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

= НОРМОБРЫ (RAND(), 100, 15)

будет генерировать значение от нормального распределения со средним 100 и СТАНДОТКЛОНОМ 15 (человек IQs). Перетащите эту формулу вниз по столбцу, и вы получите столько значений, сколько хотите.

+0

+1 для без необходимости программирования – quantumSoup

1

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

Смежные вопросы