Здравствуйте, гость ( Вход | Регистрация )
29.05.2025 - 02:34
Сообщение
#1
|
|
|
Группа: Пользователи Сообщений: 290 Регистрация: 1.06.2022 Из: Донецк Пользователь №: 39632 |
Как посредством R случайным образом разделить ряд чисел на две группы заданных объемов с перебором всех возможных вариантов? Просто перемешивать исходный ряд и разделять в произвольной точке оказалось плохой идеей, так как порождаются в том числе и лишние варианты, когда состав обеих групп одинаков, но последовательность внутри них разная, например в итерации i в группе А оказываются 1, 2, 3, в группе Б - 4, 5, 6, а в итерации i+1 - соответственно 2, 1, 3 и 4, 5, 6. Если мы считаем статистику, инвариантную к порядку чисел, то эти паразитические псевдовыборки никак не сказываются на выводе, но сильно жрут вычислительные ресурсы. В общем, надо чтобы в каждой итерации группа А менялась с группой Б парой чисел.
Беглый поиск готовых решений ничего не дал. Например, в широко известном пакете permute, кажется, реализованы все мыслимые планы перестановок, кроме нужного мне. Или же я просто не допер, как его на это запрограммировать. |
|
|
![]() |
![]() |
![]() |
29.05.2025 - 11:15
Сообщение
#2
|
|
|
Группа: Пользователи Сообщений: 290 Регистрация: 1.06.2022 Из: Донецк Пользователь №: 39632 |
Не то, вариант для связанных не подходит, поскольку там первый член первой группы может поменяться только с первым членом второй группы и т. д. Мне же требуется, чтобы он мог поменяться также со вторым, третьим и т. д. Т. е. вариантов перестановки будет, больше чем для связанных выборок, но меньше чем при полном перемешивании. Причем это меньше выражается возможности или не возможности практической реализации начиная с определённого n. Так то полная рандомизация тоже сгодилось бы, но в итоге получится много дублей одного значения статистики. Например при разделении ряда из 6 разных чисел по двум равным группам выходит 72 дубля каждой величины межгрупповой разности средних. Если из каждого повторяющегося значения оставить только одно, то точное p-значения теста будет ровно таким же, как при сохранении всех, а вычислительные затраты сократятся в 72 раза! Сейчас большинство пакетов вычисляет полный перебор только для вектора длиной не более 7. Соответственно, при сбалансированном дизайне это будет по 3 в каждой группе. В таком случае независимо от величины различий минимальный достигаемый уровень значимости равен 0,1, что не может не печалить. Но точные тесты пакетах, например coin, обрабатывают и выборки побольше, притом шустро, думается их авторы секрет ограничения перестановки знают. Беда лишь в том, что эти тесты выдают только p, а мне требуются вся матрица перестановок.
В принципе, есть некоторые мысли как это запрограммировать с нуля: провести парные обмены как в случае связанных выборок, затем переставить значения только в второй группе и повторить, снова переставить только во второй группе и повторить, и т. д. Но есть подозрение что это будет громоздко и долго (вложенные циклы). Прежде, чем писать такое на R, хочется убедиться в отсутствии готовых более элегантных и шустрых решений. |
|
|
![]() |
![]() |
ИНО Как реализовать точную перестановку в R? 29.05.2025 - 02:34
Игорь Напоминает критерий рандомизации Фишера-Питмана дл... 29.05.2025 - 08:41
Игорь Цитата(ИНО @ 29.05.2025 - 12:15) Но ... 30.05.2025 - 09:15
ИНО Ссылку на источник чего? На идею, что при простой ... 30.05.2025 - 12:37
Игорь Цитата(ИНО @ 30.05.2025 - 13:37) Ссы... 31.05.2025 - 08:44
ИНО Да, это именно сочетания и есть. Просто моя термин... 31.05.2025 - 12:28
ИНО Сделал! И даже пакетов дополнительных не понад... 31.05.2025 - 22:48
ИНО Итак, другая история: это работает в тестировании ... 1.06.2025 - 02:15
ИНО При неравных объемах выборок обнаружился баг - чув... 1.06.2025 - 17:30![]() ![]() |