#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 } })
Кто — нибудь знает, где я ошибся? Я искал везде, но не нашел решения. Не могли бы вы, пожалуйста, помочь мне? Большое вам спасибо!