私はvegan-packageを使用してPRCを行っていますが、結果にAnovaを実行しようとすると問題になります。shuffleSetを使用して制限付き置換(permute)が失敗し、shuffleを使用して実行します。
Error in doShuffleSet(spln[[i]], nset = nset, control) :
number of items to replace is not a multiple of replacement length
この問題は、permute-packageのshuffleSet-functionに起因しています。私は以下の再現可能な例を作りました。奇妙なことは、シャッフル機能は問題を引き起こさないが、シャッフルセット機能は問題ではないということです。
私の実験では、3匹の処置を4匹の動物に与えた。動物は異なる順序で治療を受けた。毎日、5つのサンプルを経時的に収集した。
私は動物の中で私の観察を並べ替えたいと思います。したがって、私はブロックとしてAnimalIDを使用します。
私は実際の実験で何回も同じ治療を受けた動物の日を置き換えますが、1日以内に測定をそのままにしておきたいと思います。それゆえ、私はDaysを自由に並べ替えることを選択し、Daysの中に順列を持たないようにしました。
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)
また、nset = 10を使用して失敗します。 – Nightingale
これは確認できません。試してもnset = 10で問題なく動作します。さらに、 'shuffleSet'はすべての場合に動作し、' nset = 1'でも動作します。失敗したものはその結果を画面に表示しています。エラーメッセージは 'print.permutationMatrix()'から得られ、 'p < - shuffleSet(60、nset = 1、control = ctrl) 'を使って表示せずに結果を保存すると、エラーは発生しません。 –
わかりやすく:あなたが報告したエラーメッセージ(「置換するアイテムの数は置換の長さの倍数ではありません」)がユーザーエラーのように聞こえることはありませんでした。私が得たメッセージは '次元属性が長さ2(0だった)でなければ行列を行列に設定することができませんでした。'これは 'print'から順列になります。この理由は明らかです: 'nset = 1'では、置換は1行の行列ではなくベクトルに落とされます。 'AnimalDay'ファクタで報告した2番目のケースは' print'で動作します。なぜなら、それはベクトルに落ちないからです。どちらの場合も 'shuffleSet'が動作します。 –