Наличие набора данных и вычисление статистики от него легки. Как насчет наоборот?
Скажем, я знаю, что некоторая переменная имеет среднее число X, стандартное отклонение Y, и предположите, что это имеет нормальное (Гауссово) распределение. Каков был бы лучший способ генерировать "случайный" набор данных (произвольного размера), который будет соответствовать распределению?
Править: Это отчасти разрабатывает из этого вопроса; я мог сделать что-то на основе того метода, но я задаюсь вопросом, существует ли более эффективный способ сделать это.
Вы можете сгенерировать стандартные нормальные случайные величины с помощью метода Бокса-Мюллера . Затем, чтобы преобразовать это, чтобы получить среднюю мю и сигму стандартного отклонения, умножьте ваши выборки на сигму и добавьте мю. Т.е. для каждого z из стандартной нормали вернуть mu + sigma * z.
Вы могли бы сделать это своего рода симуляцией Монте-Карло. Начните с широкого случайного «допустимого диапазона» и создайте несколько действительно случайных значений. Проверьте свою статистику и убедитесь, что среднее значение и дисперсия отключены. Отрегулируйте «допустимый диапазон» для случайных значений и добавьте еще несколько значений. Повторяйте до тех пор, пока не будете удовлетворены и ваши требования, и размер вашей выборки населения.
Просто подумайте, дайте мне знать, что вы думаете. : -)
Приведу пример с использованием 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"
Это очень легко сделать в Excel с помощью функции norminv(). Пример:
=norminv(rand(), 100, 15)
создаст значение из нормального распределения со средним значением 100 и среднеквадратичным значением 15 (IQ человека). Перетащите эту формулу вниз по столбцу, и у вас будет столько значений, сколько вы захотите.
Существует несколько методов генерации гауссовских случайных величин. Стандартный метод - Box-Meuller, о котором упоминалось ранее. Немного более быстрая версия находится здесь:
http://en.wikipedia.org/wiki/Ziggurat_algorithm
Вот ссылка в Википедии по генерации гауссовских переменных
http://en.wikipedia.org/wiki/Normal_distribution #Generating_values_from_normal_distribution
Легко создать набор данных с нормальным распределением (см. http://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform ).
Помните, что сгенерированный образец не будет иметь точного распределения N (0,1)! Вам нужно стандартизировать его - вычтите среднее значение, а затем разделите на стандартное отклонение. Затем вы можете преобразовать этот образец в нормальное распределение с заданными параметрами: умножить на стандартное отклонение, а затем добавить среднее значение.