ошибка в R: ошибка несоответствующих массивов в factor.score () - PullRequest
1 голос
/ 05 мая 2020

Я застрял на последнем этапе своего анализа, когда я пытаюсь вычислить факторные оценки из моего факторного анализа.

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

Error in e$vectors %*% diag(inv.sqrt.ev) : non-conformable argument

Вот мой тестовый набор данных :

library(dplyr)
library(pysch)
library(polycor)

dat_x = data.frame(fp_energy = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.07, 0.07)),
               fp_gripstrength = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.21, 0.21)),
               fp_walktime = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.2, 0.2)),
               fp_metmins = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.18, 0.18)),
               fp_weightloss = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.07, 0.07))
               )
x = dat_x %>% mutate_all(as.factor)

dat_y = data.frame(fi_fl025_01 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.02, 0.02)),
               fi_fl025_02 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.05, 0.05)),
               fi_fl025_03 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.04, 0.04)),
               fi_ph102 = sample(c(0, 0.25, 0.5, 0.75, 1), size=5000, replace=TRUE, prob=c(0.19, 0.37, 0.33, 0.08, 0.02)),
               fi_ph108 = sample(c(0, 0.25, 0.5, 0.75, 1), size=5000, replace=TRUE, prob=c(0.28, 0.30, 0.28, 0.11, 0.02)),
               fi_ph201_01 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.36, 0.36)),
               fi_ph201_02 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.05, 0.05)),
               fi_ph201_03 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.04, 0.04)),
               fi_ph201_08 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.37, 0.37)),
               fi_ph201_10 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.07, 0.07)),
               fi_ph201_11 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.03, 0.03)),
               fi_ph301_03 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.27, 0.27)),
               fi_ph502 = sample(c(0, 0.33, 0.66, 1), size=5000, replace=TRUE, prob=c(0.65, 0.10, 0.16, 0.09)),
               fi_ph503_03 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.07, 0.07)),
               fi_fl001_01 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.07, 0.07)),
               fi_fl001_05 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.3, 0.3)),
               fi_fl001_06 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.07, 0.07)), 
               fi_fl001_08 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.08, 0.08)),
               fi_fl001_09 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.12, 0.12)),
               fi_fl001_10 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.18, 0.18)), 
               fi_fl001_11 = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.4, 0.4)),
               fi_DISconverse1 = sample(c(0, 0.5, 1), size=5000, replace=TRUE, prob=c(0.93, 0.06, 0.01)),
               fi_MDpolypharmacy = sample(0:1, size=5000, replace=TRUE, prob=c(1-0.2, 0.2))
)
y = dat_y %>% mutate_all(as.factor)

И мои коды:

# Compute correlations
pc_x = hetcor(x)
pc_y = hetcor(y)

# EFA to obtain first-order solutions
efa_x = fa(pc_x$correlations, nfactors=2, n.obs=nrow(x), fm="wls", rotate="promax")
efa_y = fa(pc_y$correlations, nfactors=4, n.obs=nrow(y), fm="wls", rotate="promax")

# Factor the first-order solutions to obtain second-order solutions
efa2_x = fa(efa_x$Phi, nfactors=1, rotate="varimax", fm="pa")
efa2_y = fa(efa_y$Phi, nfactors=1, rotate="varimax", fm="pa") 

# Compute the second-order product matrix, i.e. the general factor loadings
efa2_x.g = efa_x$loadings %*% efa2_x$loadings
efa2_y.g = efa_y$loadings %*% efa2_y$loadings

# Compute factor scores using these general factor loadings
fctscores_x = factor.scores(dat_x, efa2_x.g, method="tenBerge")$scores
fctscores_y = factor.scores(dat_y, efa2_y.g, method="tenBerge")$scores
 ## this is where I get the error

Чтобы дать вам общее представление о том, что я пытаюсь сделать: у меня есть 2 инструмента для измерения слабости пожилых людей (X и Y ). X имеет 5 двоичных элементов, а Y - 23 элемента (смесь двоичных и порядковых номеров). Я провел исследовательский факторный анализ с ротацией promax и нашел двухфакторное решение для X и четырехфакторное решение Y. Для каждого из этих инструментов я хотел бы вычислить единую составную факторную оценку, применив факторное решение второго порядка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...