2016-06-29 23 views
1

Ich mache PRC mit dem vegan-Paket, aber in Schwierigkeiten geraten, wenn ich versuche, eine Anova auf die Ergebnisse durchzuführen. Ich erhalte die folgende Fehlermeldung:Eingeschränkte Permutation (permutieren) scheitert mit shuffleSet und läuft mit shuffle

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

Das Problem entsteht in der shuffleSet-Funktion des permute-Pakets. Ich habe unten ein reproduzierbares Beispiel erstellt. Das Seltsame ist, dass die Shuffle-Funktion keine Probleme verursacht, sondern die ShuffleSet-Funktion.

In meinem Experiment wurden 3 Behandlungen an 4 Tiere gegeben. Die Tiere erhielten die Behandlungen in unterschiedlicher Reihenfolge. An jedem Tag wurden 5 Proben im Laufe der Zeit gesammelt.

Ich möchte meine Beobachtungen innerhalb von Tieren und nicht zwischen ihnen permutieren. Daher benutze ich AnimalID als Block.

Ich möchte Tage permutieren (in meinen tatsächlichen Experimenten erhielten Tiere die gleiche Behandlung mehrmals), aber behalten Sie die Maße innerhalb eines Tages intakt. Daher habe ich beschlossen, Tage frei zu vertauschen und habe keine Permutationen innerhalb von Tagen.

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) 

Das Problem scheint in dem Block zu sein. Da diese

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) 

Antwort

1

Das Hauptproblem scheint funktioniert nset = 1 zu sein: die Permutation erzeugt und shuffleSet funktioniert, aber das Drucken des fehlschlägt, weil ein Satz auf einen Vektor fallen gelassen wird und print erwartet eine Matrix. Sie können die Permutation bekommen, können Sie die Permutation verwenden, aber Sie können nicht print es.

Wir müssen das beheben.

+0

Es scheitert auch mit nset = 10 – Nightingale

+0

Ich kann dies nicht bestätigen: es funktioniert OK mit nset = 10, wenn ich es versuche. Außerdem funktioniert 'shuffleSet' in allen Fällen auch mit' nset = 1'. Die Sache, die fehlschlägt, zeigt ihr Ergebnis auf dem Bildschirm an. Die Fehlermeldung kommt von 'print.permutationMatrix()', und wenn Sie das Ergebnis ohne Anzeige mit 'p <- shuffleSet (60, nset = 1, control = ctrl) speichern, erhalten Sie keinen Fehler. –

+0

Nur um klar zu sein: Ich habe nie die Fehlermeldung, die Sie gemeldet haben ('Anzahl der zu ersetzenden Elemente ist kein Vielfaches der Ersatzlänge'), die wie ein Benutzerfehler klingt. Die Nachricht, die ich erhielt, war "ungültig, um die Klasse auf eine Matrix zu setzen, es sei denn, das Dimensionsattribut hat die Länge 2 (war 0)", was durch das Ausdrucken der Permutationen entsteht. Der Grund dafür liegt auf der Hand: Mit 'nset = 1' werden die Permutationen auf einen Vektor anstatt auf eine einzeilige Matrix reduziert. Der zweite Fall, den Sie mit "AnimalDay" -Faktor gemeldet haben, funktioniert in "print", da er nicht auf einen Vektor fällt. In beiden Fällen funktioniert 'shuffleSet'. –