Ошибка отладки при создании списка воспроизводимых корреляционных матриц

#r #matrix #correlation

Вопрос:

Я вычисляю метасему по факторной структуре анкеты из 36 пунктов. Когда я пытаюсь преобразовать векторы в список корреляционных матриц, все работает спокойно,

 gt;fmat2 lt;- list() for (i in 1:nrow (dat2)) {  nf lt;- dat2$nfac[i]  L lt;- matrix(as.numeric(dat2[i, c(paste0("F1.", 1:36), paste0("F2.", 1:36),  paste0("F3.", 1:36), paste0("F4.", 1:36),  paste0("F5.", 1:36), paste0("F6.", 1:36))]),  nrow = 36, ncol = 6)    rownames(L) lt;- paste0("I", 1:36)  colnames(L) lt;- paste0("F", 1:6)  L lt;- L[, seq_len(nf), drop = FALSE]  r lt;- diag(nf)  if (nf == 2) {  r[1,2] lt;- r[2,1] lt;- unlist(dat2[i, "R1.2"])  }  if (nf == 3) {  r[1,2] lt;- r[2,1] lt;- unlist(dat2[i, "R1.2"])  r[1,3] lt;- r[3,1] lt;- unlist(dat2[i, "R1.3"])  r[2,3] lt;- r[3,2] lt;- unlist(dat2[i, "R2.3"])  }  if (nf == 4) {  r[1,2] lt;- r[2,1] lt;- unlist(dat2[i, "R1.2"])  r[1,3] lt;- r[3,1] lt;- unlist(dat2[i, "R1.3"])  r[1,4] lt;- r[4,1] lt;- unlist(dat2[i, "R1.4"])  r[2,3] lt;- r[3,2] lt;- unlist(dat2[i, "R2.3"])  r[2,4] lt;- r[4,2] lt;- unlist(dat2[i, "R2.4"])  r[3,4] lt;- r[4,3] lt;- unlist(dat2[i, "R3.4"])  }  if (nf == 5) {  r[1,2] lt;- r[2,1] lt;- unlist(dat2[i, "R1.2"])  r[1,3] lt;- r[3,1] lt;- unlist(dat2[i, "R1.3"])  r[1,4] lt;- r[4,1] lt;- unlist(dat2[i, "R1.4"])  r[1,5] lt;- r[5,1] lt;- unlist(dat2[i, "R1.5"])  r[2,3] lt;- r[3,2] lt;- unlist(dat2[i, "R2.3"])  r[2,4] lt;- r[4,2] lt;- unlist(dat2[i, "R2.4"])  r[2,5] lt;- r[5,2] lt;- unlist(dat2[i, "R2.5"])  r[3,4] lt;- r[4,3] lt;- unlist(dat2[i, "R3.4"])  r[3,5] lt;- r[5,3] lt;- unlist(dat2[i, "R3.5"])  r[4,5] lt;- r[5,4] lt;- unlist(dat2[i, "R4.5"])  }   if (nf == 6) {  r[1,2] lt;- r[2,1] lt;- unlist(dat2[i, "R1.2"])  r[1,3] lt;- r[3,1] lt;- unlist(dat2[i, "R1.3"])  r[1,4] lt;- r[4,1] lt;- unlist(dat2[i, "R1.4"])  r[1,5] lt;- r[5,1] lt;- unlist(dat2[i, "R1.5"])  r[1,6] lt;- r[6,1] lt;- unlist(dat2[i, "R1.6"])  r[2,3] lt;- r[3,2] lt;- unlist(dat2[i, "R2.3"])  r[2,4] lt;- r[4,2] lt;- unlist(dat2[i, "R2.4"])  r[2,5] lt;- r[5,2] lt;- unlist(dat2[i, "R2.5"])  r[2,6] lt;- r[6,2] lt;- unlist(dat2[i, "R2.6"])  r[3,4] lt;- r[4,3] lt;- unlist(dat2[i, "R3.4"])  r[3,5] lt;- r[5,3] lt;- unlist(dat2[i, "R3.5"])  r[3,6] lt;- r[6,3] lt;- unlist(dat2[i, "R3.6"])  r[4,5] lt;- r[5,4] lt;- unlist(dat2[i, "R4.5"])   r[4,6] lt;- r[6,4] lt;- unlist(dat2[i, "R4.6"])  r[5,6] lt;- r[6,5] lt;- unlist(dat2[i, "R5.6"])  }  dat2$NALDS[i] lt;- sum(is.na(L))  dat2$NAPHI[i] lt;- sum(is.na(r[lower.tri(r)]))  fmat2[[dat2$study[i]]] lt;- list(fm = L, fr = r) }  

но когда я пытаюсь создать список всех воспроизведенных корреляционных матриц, я продолжаю получать эту ошибку

 "Error in if (!metaSEM::is.pd(mm)) mm lt;- as.matrix(Matrix::nearPD(mm, corr = TRUE,: missing value where TRUE/FALSE needed  

Вот синтаксис:

 gt;rmat lt;- function(L, R) {  L[is.na(L)] lt;- 0 # impute missing factor loadings  mm lt;- L %*% R %*% t(L) # reproduced correlations  diag(mm) lt;- 1  if (!metaSEM::is.pd(mm)) # try to derive positive definite matrices  mm lt;- as.matrix(Matrix::nearPD(mm, corr = TRUE, posd.tol = 1e-05, maxit = 150)$fmat2)  mm[lower.tri(mm)] lt;- t(mm)[lower.tri(mm)] # in case of rounding errors  colnames(mm) lt;- rownames(mm) lt;- paste0("I", seq(1, ncol(mm)))  mm }  gt;cmat lt;- lapply(fmat2, function(x) {  if (!is.null(x$rm)) {  x$rm  } else if (!is.null(x$fm)) {  rmat(x$fm, x$fr) #calculate reproduced correlation matrix  } })  

Кто — нибудь знает, где я ошибся? Я искал везде, но не нашел решения. Не могли бы вы, пожалуйста, помочь мне? Большое вам спасибо!