В практике статистического анализа данных часто приходится иметь дело с необходимостью генерации случайных чисел, подчинящихся тому или иному закону распределения вероятностей (например, при необходимости случайным образом отобрать небольшую выборку из массивной таблицы данных, при использовании бутстреп-методов, методов Монте-Карло, и т.п.).
В системе R реализован целый ряд алгоритмов, позволящих генерировать случайные числа (см. ?RNGkind; по умолчанию используется один из наиболее быстрых генераторов - т.н. "Вихрь Мерсенна" (Mersenne twister)). Очень важно понимать, что практически все эти алгоритмы детерминированы, и поэтому генерируемые с их помощью числа правильно называть "псевдослучайными".
Генератор псевдослучайных чисел (ГПСЧ) начинает свою работу с определенной точки в пространстве возможных чисел. Эта точка называется начальным числом (англ. seed). В R имеется возможность зафиксировать это число так, что при повторном использовании ГПСЧ будет генерироваться точно та же последовательность чисел, что и в первый раз. Это может оказаться полезным в случаях, когда исследователь (по тем или иным причам) желает иметь точную воспроизводимость результатов, получаемых с задействованием ГПСЧ.
В качестве примера создадим таблицу example с двумя столбцами. В первом столбце будут храниться коды уровней гипотетического фактора Factor (три уровня, A, B, и C). Для каждого из этих уровней сгенерируем (псевдо-)случайным образом по 300 нормально распределенных значений с разными средними и стандартными отклонениями:
example = data.frame( Factor = rep(c("A", "B", "C"), each = 300), Variable = c(rnorm(300, 5, 2), rnorm(300, 4, 3), rnorm(300, 2, 1)) ) tapply(example$Variable, example$Factor, summary) $A Min. 1st Qu. Median Mean 3rd Qu. Max. -0.9135 3.5950 5.0190 4.8520 6.2250 10.4900 $B Min. 1st Qu. Median Mean 3rd Qu. Max. -4.407 2.194 4.226 4.028 5.962 13.750 $C Min. 1st Qu. Median Mean 3rd Qu. Max. -0.517 1.365 1.997 1.975 2.582 4.458
Изобразим на одном графике кривые плотности вероятности для каждой из трех групп А, В, и С (для построения графика испозован ggplot2 - графический пакет для R):
Если бы мы повторили создание таблицы example описанным выше способом еще несколько раз, мы получили бы очень похожие, но все-таки несколько различающиеся распределения для групп А, В и С. На следующем рисунке приведен пример для четырех таких таблиц, созданных при помощи ГПСЧ:
Для того, чтобы каждый раз при использовании ГПСЧ в R получать идентичные последовательности чисел, используется функция set.seed() (от set - задать, установить, и seed - начальное число). Как следует из названия, эта функция фиксирует число, служащее начальной точкой для запуска алгоритма генерации (псевдо-)случайных чисел. В качестве аргумента функции указывают любое целое число (не важно, какое именно). Так, при повторном выполнении следующего кода мы будем всегда получать одинаковые последовательности значений для групп А, В и С:
Повторив приведенный код четыре раза, мы получили бы четыре идентичные таблицы и, соответственно, четыре идентичных рисунка, изображающих распределения плотностей вероятности:
Отправить комментарий