Форум врачей-аспирантов

Здравствуйте, гость ( Вход | Регистрация )

> Как реализовать точную перестановку в R?
ИНО
сообщение 29.05.2025 - 02:34
Сообщение #1





Группа: Пользователи
Сообщений: 262
Регистрация: 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





Группа: Пользователи
Сообщений: 262
Регистрация: 1.06.2022
Из: Донецк
Пользователь №: 39632



Не то, вариант для связанных не подходит, поскольку там первый член первой группы может поменяться только с первым членом второй группы и т. д. Мне же требуется, чтобы он мог поменяться также со вторым, третьим и т. д. Т. е. вариантов перестановки будет, больше чем для связанных выборок, но меньше чем при полном перемешивании. Причем это меньше выражается возможности или не возможности практической реализации начиная с определённого n. Так то полная рандомизация тоже сгодилось бы, но в итоге получится много дублей одного значения статистики. Например при разделении ряда из 6 разных чисел по двум равным группам выходит 72 дубля каждой величины межгрупповой разности средних. Если из каждого повторяющегося значения оставить только одно, то точное p-значения теста будет ровно таким же, как при сохранении всех, а вычислительные затраты сократятся в 72 раза! Сейчас большинство пакетов вычисляет полный перебор только для вектора длиной не более 7. Соответственно, при сбалансированном дизайне это будет по 3 в каждой группе. В таком случае независимо от величины различий минимальный достигаемый уровень значимости равен 0,1, что не может не печалить. Но точные тесты пакетах, например coin, обрабатывают и выборки побольше, притом шустро, думается их авторы секрет ограничения перестановки знают. Беда лишь в том, что эти тесты выдают только p, а мне требуются вся матрица перестановок.

В принципе, есть некоторые мысли как это запрограммировать с нуля: провести парные обмены как в случае связанных выборок, затем переставить значения только в второй группе и повторить, снова переставить только во второй группе и повторить, и т. д. Но есть подозрение что это будет громоздко и долго (вложенные циклы). Прежде, чем писать такое на R, хочется убедиться в отсутствии готовых более элегантных и шустрых решений.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
Игорь
сообщение 30.05.2025 - 09:15
Сообщение #3





Группа: Пользователи
Сообщений: 1141
Регистрация: 10.04.2007
Пользователь №: 4040



Цитата(ИНО @ 29.05.2025 - 12:15) *
Но точные тесты пакетах, например coin, обрабатывают и выборки побольше, притом шустро, думается их авторы секрет ограничения перестановки знают.
На больших выборках хорошо работает асимптотика.

Цитата(ИНО @ 29.05.2025 - 12:15) *
В принципе, есть некоторые мысли как это запрограммировать с нуля: провести парные обмены как в случае связанных выборок, затем переставить значения только в второй группе и повторить, снова переставить только во второй группе и повторить, и т. д. Но есть подозрение что это будет громоздко и долго (вложенные циклы). Прежде, чем писать такое на R, хочется убедиться в отсутствии готовых более элегантных и шустрых решений.
Если бы Вы точнее поставили задачу и по возможности дали ссылку на источник, возникли бы более плодотворные идеи, как это реализовать. Например, перестановки - вроде бы понятная задача. А как получить сами перестановки, особенно для большой задачи, как Вы верно отметили, с множеством вложенных циклов? Пришлось сделать новый быстрый способ (хотя и требующий много памяти - но это сейчас не проблема) на основе матрицы планирования эксперимента (не опубликовано, исходники программы открыты).

Сообщение отредактировал Игорь - 30.05.2025 - 09:24


Signature
Ebsignasnan prei wissant Deiws ainat! As gijwans! Sta ast stas arwis!
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 

Сообщений в этой теме


Добавить ответ в эту темуОткрыть тему