【发布时间】: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矩阵。结果很好。