Bioconductor's sva package을 사용하여 대리 변수 분석을 적용하려고합니다. the vignette의 예는 잘 작동하지만 실제 데이터를하려고 할 때, 나는 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
시도가 debug()
이 fast.svd
가 호출되는 것으로 나타났다로 범위를 좁힐 모든 0의 453 x 100 행렬에 (453 x 100 치수는 훈련 세트와 동일합니다.) V
은 100 x 0입니다. 에 irwsva.build
의 색인을 작성하려고 시도하기 때문에 "subscript out of bounds"오류가 발생합니다. 이 문제를 일으키는 내 데이터에 대해 뭔가가 있어야합니다.하지만 무엇을해야합니까?
method="two-step"
와
sva
를 호출 시도 : 일,하지만 난 이후
fsva
를 호출 할 필요가
> trainSv <- sva(trainData, trainMod, trainMod0, method='two-step')
Number of significant surrogate variables is: 8
. 이는
sva
을
method="two-step"
으로 지정하면
trainSv$pprob.b
이 NULL이 되었기 때문에 실패했습니다.
내 데이터는 비 네트의 데이터와 어떻게 다릅니 까? 교육 및 테스트 데이터는 두 경우 모두 매트릭스입니다. 비 네트에서 훈련 행렬은 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를 제한하는 경우가 완료 될 때까지 실행 할 수 있습니다, 나는 결과를 신뢰할 수 있다면 나도 몰라 :
> trainSv <- sva(trainData, trainMod, trainMod0, B=1)
Number of significant surrogate variables is: 11
Iteration (out of 1):1 >
사람이 이런 일이 왜 말을 충분히 irwsva
을 이해 하는가? 내 데이터가 작동하도록하기 위해 할 수있는 일이 있습니까?
글쎄, 확실한 질문은 : 비 네트 데이터와 데이터 세트 간에는 어떤 차이가 있습니까? Matrix 대 dataframe ?, 행렬 차원이 일치하지 않습니까? 등등. 디버그 작업이 완료되지 않았습니다. 즉 0으로 채워진 행렬은 해당 0이 사용되지 않는 한 "subscript out of bounds"오류를 발생시키지 않습니다. as * 일부 함수 호출 (또는 첨자 값의 일부 계산)에서 * 첨자. 따라서 매트릭스의 내용이 무엇인지 알아 내려고, 왜 올바르지 않은지 (실제로는 아직 확실하지 않은 문제라고 가정). –
@CarlWitthoft, 좀 더 디버깅을하고 질문에 추가했습니다. –