Bioconductor の sva パッケージを使用して代理変数分析を適用しようとしています。ビネットの例は正常に動作しますが、実際のデータで試してみると、次のように「範囲外の添え字」エラーが発生しirwsva.build
ます。
$ R
R version 2.15.0 (2012-03-30)
…
> trainData <- read.table('http://www.broadinstitute.org/~ljosa/svaproblem/trainData.txt')
> trainpheno <- read.table('http://www.broadinstitute.org/~ljosa/svaproblem/trainpheno.txt')
> testData <- read.table('http://www.broadinstitute.org/~ljosa/svaproblem/testData.txt')
> trainData <- as.matrix(trainData)
> testData <- as.matrix(testData)
> library(sva)
> trainMod <- model.matrix(~as.factor(label), trainpheno)
> num.sv(trainData, trainMod)
[1] 8
> trainMod0 <- model.matrix(~1, trainpheno)
> trainSv <- sva(trainData, trainMod, trainMod0)
Number of significant surrogate variables is: 8
Iteration (out of 5 ):1 2 3 4 5 Error in irwsva.build(dat = dat, mod = mod, mod0 = mod0, n.sv = n.sv, :
subscript out of bounds
すべてゼロの 453 x 100 マトリックスで呼び出されているdebug()
明らかにされたそれを絞り込む試み。fast.svd
(寸法 453 x 100 は、私のトレーニング セットと同じです。) これにより、V
100 x 0 の a が得られます。「添え字が範囲外」エラーは、irwsva.build
にインデックスを付けようとするためV
です。この動作を引き起こす何かがデータにあるはずですが、何が原因でしょうか?
考えられる回避策として、次のように呼び出しsva
てみましたmethod="two-step"
。
> trainSv <- sva(trainData, trainMod, trainMod0, method='two-step')
Number of significant surrogate variables is: 8
それはうまくいきましたが、後で呼び出す必要がありますfsva
。sva
with を呼び出すとNULLになるため、これは失敗しmethod="two-step"
ました。trainSv$pprob.b
では、私のデータはビネットのデータとどう違うのでしょうか? どちらの場合も、トレーニング データとテスト データは行列です。ビネットでは、トレーニング マトリックスは 22283 x 30 です。私の場合、それは 453 x 100 です。ビネットでは、関心のある変数 (癌) はバイナリです。私の場合、従属変数は 12 の異なる値を取ることができます。
最後の違いは重要なようです。範囲を [0, 7] に減らすとうまくいきます。
> trainMod <- model.matrix(~as.factor(label), trainpheno %% 8)
> trainSv <- sva(trainData, trainMod, trainMod0)
Number of significant surrogate variables is: 9
Iteration (out of 5 ):1 2 3 4 5 >
おそらく 100 個のサンプル (列) では 12 個のクラスには不十分であると考えて、293 個の列を持つ同様のデータセットを試しました。(データは同じ実験からのものですが、100 の処理ではなく 293 の個々のサンプルをプロファイルしています。)それは役に立ちませんでした:
> trainData <- read.table('http://www.broadinstitute.org/~ljosa/svaproblem/trainData3.txt')
> trainpheno <- read.table('http://www.broadinstitute.org/~ljosa/svaproblem/trainpheno.txt')
> trainData <- as.matrix(trainData)
> trainMod <- model.matrix(~as.factor(label), trainpheno)
> trainMod0 <- model.matrix(~1, trainpheno)
> trainSv <- sva(trainData, trainMod, trainMod0)
Number of significant surrogate variables is: 11
Iteration (out of 5 ):1 2 3 4 5 Error in irwsva.build(dat = dat, mod = mod, mod0 = mod0, n.sv = n.sv, :
subscript out of bounds
sva を 1 回の繰り返しに制限すると、最後まで実行できますが、結果を信頼できるかどうかはわかりません。
> trainSv <- sva(trainData, trainMod, trainMod0, B=1)
Number of significant surrogate variables is: 11
Iteration (out of 1 ):1 >
irwsva
なぜこれが起こっているのかを十分に理解している人はいますか?自分のデータで機能させるためにできることはありますか?