![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 262 Регистрация: 1.06.2022 Из: Донецк Пользователь №: 39632 ![]() |
Как посредством R случайным образом разделить ряд чисел на две группы заданных объемов с перебором всех возможных вариантов? Просто перемешивать исходный ряд и разделять в произвольной точке оказалось плохой идеей, так как порождаются в том числе и лишние варианты, когда состав обеих групп одинаков, но последовательность внутри них разная, например в итерации i в группе А оказываются 1, 2, 3, в группе Б - 4, 5, 6, а в итерации i+1 - соответственно 2, 1, 3 и 4, 5, 6. Если мы считаем статистику, инвариантную к порядку чисел, то эти паразитические псевдовыборки никак не сказываются на выводе, но сильно жрут вычислительные ресурсы. В общем, надо чтобы в каждой итерации группа А менялась с группой Б парой чисел.
Беглый поиск готовых решений ничего не дал. Например, в широко известном пакете permute, кажется, реализованы все мыслимые планы перестановок, кроме нужного мне. Или же я просто не допер, как его на это запрограммировать. |
|
![]() |
![]() |
![]() |
![]()
Сообщение
#2
|
|
Группа: Пользователи Сообщений: 262 Регистрация: 1.06.2022 Из: Донецк Пользователь №: 39632 ![]() |
Не то, вариант для связанных не подходит, поскольку там первый член первой группы может поменяться только с первым членом второй группы и т. д. Мне же требуется, чтобы он мог поменяться также со вторым, третьим и т. д. Т. е. вариантов перестановки будет, больше чем для связанных выборок, но меньше чем при полном перемешивании. Причем это меньше выражается возможности или не возможности практической реализации начиная с определённого n. Так то полная рандомизация тоже сгодилось бы, но в итоге получится много дублей одного значения статистики. Например при разделении ряда из 6 разных чисел по двум равным группам выходит 72 дубля каждой величины межгрупповой разности средних. Если из каждого повторяющегося значения оставить только одно, то точное p-значения теста будет ровно таким же, как при сохранении всех, а вычислительные затраты сократятся в 72 раза! Сейчас большинство пакетов вычисляет полный перебор только для вектора длиной не более 7. Соответственно, при сбалансированном дизайне это будет по 3 в каждой группе. В таком случае независимо от величины различий минимальный достигаемый уровень значимости равен 0,1, что не может не печалить. Но точные тесты пакетах, например coin, обрабатывают и выборки побольше, притом шустро, думается их авторы секрет ограничения перестановки знают. Беда лишь в том, что эти тесты выдают только p, а мне требуются вся матрица перестановок.
В принципе, есть некоторые мысли как это запрограммировать с нуля: провести парные обмены как в случае связанных выборок, затем переставить значения только в второй группе и повторить, снова переставить только во второй группе и повторить, и т. д. Но есть подозрение что это будет громоздко и долго (вложенные циклы). Прежде, чем писать такое на R, хочется убедиться в отсутствии готовых более элегантных и шустрых решений. |
|
![]() |
![]() |
![]() ![]() |