Речь пойдет о двух библиотеках для создания рандомизационных последовательностей. В чем суть проблемы? – Может показаться, что для составления рандомизационных последовательностей подойдет любой способ случайного распределение в группы. Однако, прежде всего необходимо ответить на вопрос: каковы критерии “правильной” рандомизационной последовательности? Попробуем их сформулировать:
- Рандомизационная последовательность не должна быть привычной, т.е. одной и той же или с минимальными изменениями для разных исследований;
- Рандомизационная последовательность должна быть, генерируемой случайно или псевдо-случайно;
- Рандомизационная последовательность должна быть случайной;
- Рандомизационная последовательность должна быть воспроизводимой и/или идентифицируемой.
Пункт 1. носит декларативный характер и выполняется при выполнении пункта 2 и 4.
Пункт 2. Выполняется при использовании генераторов случайных чисел (True Random Number Generator), к примеру – Quantis RNG, или при помощи алгоритмов генерации псевдо-случайных чисел (Mersenne twister, PCG32,Xoroshiro128+ и т.д.).
Пункт 3. Даже последовательность сгенерированная случайно может быть неслучайной сама по себе – могут быть длинные цепочки одних и тех же значений, существенный дисбаланс в распределении и т.д. Таким образом случайная последовательность должна быть проверена статистическими методами на предмет – случайна ли она?
Пункт 4. Последоватльености генерируемые с помощью TRNG не могут быть воспроизводимы, но последовательности генерируемые псевдо-случайно могут должны быть воспроизводимы, для чего должен быть сохранен seed каждой последовательности и при генерации следующих последовательностей недопустимо использование одного и того же seed, что необходимо для соблюдения Пункта 1. Для TRNG необходимо определить идентификатор последовательности к примеру хеш функцию (MD5, SHA256 и т.д.), что также позволит сопоставить последовательности генерируемые в разные периоды времени.
Получение seed также должно быть случайным. При неимении технических возможностей можно воспользоваться ресурсами типа https://www.random.org/
Итак для R Project доступно не менее 2х библиотек для генерации случайных чисел.
randomizeBE | Описание
Использовать очень просто:
1 2 3 | library(randomizeBE) rl <- RL4(nsubj=24, blocksize=4, seqs=c("TR","RT"), seed=123) print(rl, sumry=TRUE) |
где nsubj – количество субъектов,
blocksize – размер блока (для того что бы распределение было равномерным на малых выборках лучше ставить размер блока 2-6 субъектов, меньший размер блока гарантирует отсутствие длинных цепочек одинаковых значений),
seqs – количество последовательностей в виде вектора с из кодами,
значение seed надо указывать самостоятельно или с помощью sample(1:100000000, 1).
Это можно выполнить в одну команду:
1 | print(RL4(nsubj=24, blocksize=4, seqs=c("TR","RT"), seed=sample(1:1000000, 1)), sumry=TRUE) |
Тест на случайность выполняется по методу Уалда-Вольфовица, параметром pmethod можно задать метод вычисления p.
randomizeR | Описание
Пакет более сложный. Дает возможность генерации с помощью различных методов и для разных дизайнов. Подробное описание пакета заняло бы отдельную большую статью. Поэтому подробное описание пакета не привожу, оно доступно по ссылкам:
Приведем три наиболее распространенных примера генерации.
Random Allocation Rule:
1 2 3 4 5 | library(randomizeR) rar <- rarPar(24) seq <- genSeq(rar, r = 1, seed = 123) result <- getRandList(seq) t(result) |
Permuted Block Randomization:
1 2 3 4 5 | library(randomizeR) pbr <- pbrPar(rep(4, 24/4)) seq <- genSeq(pbr, r = 1, seed = 123) result <- getRandList(seq) t(result) |
Big Stick Design:
1 2 3 4 5 | library(randomizeR) bsd <- bsdPar(24, 2) seq <- genSeq(bsd, r = 1, seed = 123) result <- getRandList(seq) t(result) |