При использовании factanal
функция от Статистика пакет для анализа факторов.Подкатегория из связанной ошибки в R
Я попробовал следующее.
library(mirt)
library(ltm)
library(psych)
library(stats)
data(SAT12)
data=SAT12
cor_mat=polychoric(data, ML=TRUE, global=F)
fit <- factanal(factors=2, n.obs=nrow(data), covmat=cor_mat$rho)
Divide_item_Factor_Loading(fit)
, когда я пытаюсь запустить Divide_item_Factor_Loading (подходит) ошибка называется
Error in a[[i]][[2]] : subscript out of bounds
выскочит.
мой полный код Divide_item_Factor_Loading:
Divide_item_Factor_Loading=function(fit)
{
a=list()
items=NULL
for(i in 1:nrow(fit$loadings)) ######corresponding to rows of loading matrix
{
k=which(fit$loadings[i,]==max(abs(fit$loadings[i,])))
a[[i]]=c(i,as.numeric(k))
}
fact_item_mat=matrix(, nrow=nrow(fit$loadings), ncol=ncol(fit$loadings))
for(j in 1:(ncol(fit$loadings)))
{
for(i in 1:(nrow(fit$loadings)))
{
if(a[[i]][[2]]==j) {fact_item_mat[i,j]=a[[i]][[1]]}
}
}
nam=names(fit$loadings[,1])
factor=list()
for(i in 1:ncol(fit$loadings))
{
factor[[i]]=sort(fact_item_mat[,i], decreasing = FALSE, na.last = NA)
fac=factor[[i]]
fac=nam[fac]
factor[[i]]=fac
}
names(factor)=paste("factor", 1:ncol(fit$loadings), sep="")
return(factor)
}
Какие шаги я должен предпринять сейчас, чтобы избежать этой ошибки?
Как Андрей говорит, что это просто метод печати - все значения находятся в матрице нагрузок. Посмотрите на 'loadings (fit)' и 'loadings (fit) []'. Они выглядят по-разному из-за метода печати, но матрицы нагрузок одинаковы. Проверьте 'str (загрузки (fit))' и 'str (loadings (fit) [])'. Другая проверка 'loadings (fit) [] == loadings (fit)' – user20650
@Irri, передача вашего кода из данных LSAT не дает мне никакой ошибки (просто предупреждение, хотя «опция ML была удалена из полихрической функции в пакете psych. Исправьте вызов ") и выполните' Divide_item_Factor_Loading (fit) ', я получаю' $ factor1 [1] "Пункт 5" $ factor2 [1] "Пункт 1" "Пункт 2" "Пункт 3 «Пункт 4». Итак, извините, но я не очень понимаю ваш вопрос ... – Cath
@CathG, можете ли вы предоставить мне свой адрес электронной почты i.d. так что я могу дать вам набор проблемных данных. –