【问题标题】:Error in incorrect number of subscripts on matrix矩阵上不正确的下标数量错误
【发布时间】:2021-01-05 18:03:58
【问题描述】:

我正在尝试对矩阵 Y 进行简单的参数引导。

str(Y)

num [1:10, 1:7] 2333 2815 2326 3097 2813 ...
 - attr(*, "dimnames")=List of 2
 ..$ : chr [1:10] "A77" "A86" "C87" "C88" ...
 ..$ : chr [1:7] "CHIP" "CORS" "EVAN" "HODG" ...

B = 100000 
I = nrow(Y)
J = ncol(Y)
M = min(I-1,J-1)
D =I-1
MaxK = M-2

一些矩阵的初始化

T <{ matrix(NA, nrow = MaxK + 1, ncol = 1)
ProbT <{ matrix(NA, nrow = MaxK + 1, ncol = 1)
Star <{ matrix(NA, nrow = M, ncol = B)

奇异值分解

RowMeans =matrix(rowMeans(Y), nrow = I, ncol = J)
ColMeans= t(matrix(colMeans(Y), nrow = J, ncol = I))
Mean = matrix(mean(Y), nrow = I, ncol = J)
E=Y-RowMeans-ColMeans+Mean
lambda = svd(E)$d ; lambda

检验统计量

K <- 0
while(K <= MaxK){
  Term <- K + 1
  if(K > 0) lambda[K] <- 0
  T[Term, 1] <- lambda[Term]^2/(t(lambda)%*%lambda)


boot <- 1
while(boot <= B){
Eb<-matrix(rnorm((D-K)*(J-1-K)), nrow=I-1-K, ncol=J-1-K)
lambdab <- svd(Eb)$d
Tb <-lambdab[1]^2/(t(lambdab)%*%lambdab)
      
ifelse(Tb > T[Term,1], Star[Term, boot] <- 1, Star[Term, boot] <- 0)
boot = boot + 1}
    
ProbT[Term, 1] <- rowMeans(Star)[Term]
K <- K+1}

但是我遇到了这样的错误

Error in T[Term, 1] <- lambda[Term]^2/(t(lambda) %*% lambda) :    incorrect number of subscripts on matrix

错在哪里?

谢谢。

【问题讨论】:

  • 您没有告诉我们T 的定义位置。你不能假设 R 会创建一个矩阵,因为你总是把它当作一个矩阵来使用:你需要先明确地创建它。
  • 感谢您的指出。我定义了TProbTStar 矩阵。结果很好。

标签: r matrix svd


【解决方案1】:

解决了。

必须定义T ProbT Star 矩阵。

T <{ matrix(NA, nrow = MaxK + 1, ncol = 1)
ProbT <{ matrix(NA, nrow = MaxK + 1, ncol = 1)
Star <{ matrix(NA, nrow = M, ncol = B)

【讨论】:

    猜你喜欢
    • 2017-02-20
    • 2020-03-05
    • 1970-01-01
    • 2016-10-11
    • 2020-03-04
    • 1970-01-01
    • 2016-04-27
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多