Ограниченная перестановка (перестановка) не выполняется с использованием shuffleSet и запускается с использованием перемешивания

Я делаю PRC, используя веганский пакет, но сталкиваюсь с проблемами, когда пытаюсь выполнить Anova по результатам. Я получаю следующее сообщение об ошибке:

Error in doShuffleSet(spln[[i]], nset = nset, control) : 
  number of items to replace is not a multiple of replacement length

Проблема возникает в функции shuffleSet пакета перестановки. Я создал воспроизводимый пример ниже. Странно то, что shuffle-функция не вызывает проблем, а shuffleSet-функция вызывает.

В моем эксперименте было проведено 3 обработки 4 животным. Животные получали лечение в разной последовательности. Ежедневно отбирали по 5 проб с течением времени.

Я хотел бы переставить свои наблюдения внутри животных, а не между ними. Поэтому я использую AnimalID как блок.

Я хотел бы переставить дни (в моих реальных экспериментах животные получали одно и то же лечение несколько раз), но сохранить измерения в течение дня без изменений. Поэтому я решил свободно переставлять дни и не иметь никаких перестановок внутри дней.

require(permute)    
TreatmentLevels=3
Animals=4
TimeSteps=5
AnimalID=rep(letters[1:Animals],each=TreatmentLevels*TimeSteps)
Time=rep(1:TimeSteps,Animals=TreatmentLevels)
#treatments were given in different order per animal. 
Day=rep(c(1,2,3,2,3,1,3,2,1,2,3,1),each=TimeSteps) 
Treatment=rep(rep(LETTERS[1:TreatmentLevels],each=TimeSteps),Animals)
dataset=as.data.frame(cbind(AnimalID,Treatment,Day,Time))

ctrl=how(blocks = dataset$AnimalID,plots = Plots(strata=dataset$Day,type = "free"),
          within=Within(type="none"), nperm = 999)

#this works
shuffle(60,control=ctrl)
#this giveas an error
shuffleSet(60,nset=1,control=ctrl)
shuffleSet(60,nset=10,control=ctrl)

Проблема похоже в блоке. Потому что это работает

dataset$AnimalDay=factor(paste0(dataset$AnimalID,dataset$Day))
ctrl=how(plots = Plots(strata=dataset$AnimalDay,type = "free"),
          within=Within(type="none"), nperm = 999)

#this works
shuffle(60,control=ctrl)
shuffleSet(60,nset=1,control=ctrl)
shuffleSet(60,nset=10,control=ctrl)

person Nightingale    schedule 29.06.2016    source источник


Ответы (1)


Ключевая проблема, по-видимому, заключается в nset = 1: перестановка генерируется и shuffleSet работает, но распечатать результат не удается, потому что один набор отбрасывается в вектор, а print ожидает матрицу. Вы можете получить перестановку, вы можете использовать перестановку, но вы не можете ее print.

Мы должны исправить это.

person Jari Oksanen    schedule 30.06.2016
comment
Это также не работает, используя nset=10 - person Nightingale; 30.06.2016
comment
Я не могу это подтвердить: он работает нормально с nset=10, когда я пытаюсь. Далее, shuffleSet работает во всех случаях, в том числе и с nset=1. То, что терпит неудачу, показывает его результат на экране. Сообщение об ошибке исходит от print.permutationMatrix(), и если вы сохраните результат без отображения с помощью p <- shuffleSet(60,nset=1,control=ctrl), вы не получите никакой ошибки. - person Jari Oksanen; 01.07.2016
comment
Просто для ясности: я никогда не получал сообщение об ошибке, о котором вы сообщили (number of items to replace is not a multiple of replacement length), которое звучит как ошибка пользователя. Сообщение, которое я получил, было invalid to set the class to matrix unless the dimension attribute is of length 2 (was 0), которое исходит от print изменения перестановок. Причина этого очевидна: с nset=1 перестановки сбрасываются в вектор, а не в матрицу с одной строкой. Второй случай, о котором вы сообщили с фактором AnimalDay, работает в print, потому что он не переходит в вектор. В обоих случаях shuffleSet работает. - person Jari Oksanen; 02.07.2016
comment
Я правильно понимаю, что код запускается, когда вы пытаетесь его выполнить? - person Nightingale; 02.07.2016
comment
Когда я вырезаю и вставляю код и запускаю его в R, он терпит неудачу. Пробовал в R 3.3 (как напрямую, так и через Rstudio) и в R 3.1. Все это приводит к тому же сообщению об ошибке. Я использую перестановку версии 0.8-4A. Любые предложения о том, что попробовать? - person Nightingale; 02.07.2016
comment
@Nightingale Да, код работает, но при печати появляется ошибка. Проблема, о которой вы сообщаете, может быть связана с несколькими ошибками, исправленными в версии 0.9-0 или более ранней версии, которая находится в CRAN. - person Gavin Simpson; 03.07.2016
comment
Существует несоответствие между поведением и документацией; ?shuffleSet утверждает, что возвращает матрицу, а в случае nset = 1 это явно не так. Я бы предпочел, чтобы такие функции всегда возвращали объект одного и того же типа. В этом случае я бы посоветовал ?shuffleSet вернуть матрицу с nset строками и n столбцами. Вместо изменения метода print я предлагаю изменить саму функцию, чтобы она всегда возвращала матрицу. - person Gavin Simpson; 03.07.2016
comment
И это связано с тем, что allPerms вызывается с текущим примером, но не shuffleSet(10, nset = 1) - person Gavin Simpson; 03.07.2016
comment
Это исправлено на github github.com/gavinsimpson/permute/issues/19 и будет быть на CRAN как 0.9-1 на следующей неделе, когда у меня будет возможность упаковать это и просмотреть политики CRAN. - person Gavin Simpson; 03.07.2016
comment
Спасибо! Обновление до версии 0.9 помогло. Я предполагал, что использую последнюю версию, потому что кнопка обновления пакетов в Rstudio не нашла доступных обновлений. Не могли бы вы опубликовать это как ответ, чтобы я мог принять? И здорово, что я помог вам обнаружить еще одну проблему - person Nightingale; 03.07.2016