Факторные оценки из факторного анализа по порядковым категориальным данным в R
У меня возникли проблемы с вычислением факторных баллов из поискового факторного анализа упорядоченных категориальных данных. Мне удалось оценить, сколько факторов нужно нарисовать, и провести анализ факторов с помощью пакета "психолог", но я не могу понять, как получить оценки факторов для отдельных участников, и не нашел большой помощи онлайн. Вот где я застрял:
library(polycor)
library(nFactors)
library(psych)
# load data
dat <- read.csv("https://raw.githubusercontent.com/paulrconnor/datasets/master/data.csv")
# convert to ordered factors
for(i in 1:length(dat)){
dat[,i] <- as.factor(dat[,i])
}
# compute polychoric correlations
pc <- hetcor(dat,ML=T)
# 2. choose number of factors
ev <- eigen(pc)
ap <- parallel(subject = nrow(dat),
var=ncol(dat),rep=100,cent=.05)
nS <- nScree(x = ev$values, aparallel = ap$eigen$qevpea)
dev.new(height=4,width=6,noRStudioGD = T)
plotnScree(nS) # 2 factors, maybe 1
# run FA
faPC <- fa(r=pc$correlations, nfactors = 2, rotate="varimax",fm="ml")
faPC$loadings
Изменить: я нашел способ получить оценки с помощью irt.fa() и ScoreIrt(), но он включал преобразование моих упорядоченных категорий в числовые, поэтому я не уверен, что это правильно. Любые советы будут высоко ценится!
x = as.matrix(dat)
fairt <- irt.fa(x = x,nfactors=2,correct=TRUE,plot=TRUE,n.obs=NULL,rotate="varimax",fm="ml",sort=FALSE)
for(i in 1:length(dat)){dat[,i] <- as.numeric(dat[,i])}
scoreIrt(stats = fairt, items = dat, cut = 0.2, mod="logistic")
1 ответ
Это интересная проблема. Регулярный факторный анализ предполагает, что ваши входные показатели масштабируются по соотношению или интервалу. В случае порядковых переменных у вас есть несколько вариантов. Вы можете либо использовать подход, основанный на IRT (в этом случае вы будете использовать что-то вроде Graded Response Model), либо сделать то же самое, что и в своем примере, и использовать матрицу полихорической корреляции в качестве входных данных для факторного анализа. Вы можете увидеть больше обсуждения этого вопроса здесь
Большинство пакетов факторного анализа имеют метод для получения факторных оценок, но они будут давать разные результаты в зависимости от того, что вы решите использовать в качестве входных данных. Например, обычно вы можете просто использовать factor.scores()
чтобы получить ожидаемые оценки факторов, но только если вы введете исходные исходные данные оценки. Проблема здесь заключается в требовании использовать полихорическую матрицу в качестве входных данных.
Я не уверен на 100% (и кто-то, пожалуйста, поправьте меня, если я ошибаюсь), но я думаю, что в вашей ситуации должно быть нормально:
dat <- read.csv("https://raw.githubusercontent.com/paulrconnor/datasets/master/data.csv")
dat_orig <- dat
#convert to ordered factors
for(i in 1:length(dat)){
dat[,i] <- as.factor(dat[,i])
}
# compute polychoric correlations
pc <- hetcor(dat,ML=T)
# run FA
faPC <- fa(r=pc$correlations, nfactors = 2, rotate="varimax",fm="ml")
factor.scores(dat_orig, faPC)
По сути, то, что вы делаете, это:
- Рассчитать полихорическую корреляционную матрицу
- Используйте эту матрицу для проведения факторного анализа и извлечения 2 факторов и связанных с ними нагрузок
- Используйте загрузки из FA и необработанные (числовые) данные, чтобы получить ваши факторные оценки
И этот метод, и метод, который вы используете при редактировании, рассматривают исходные данные как числовые, а не как множители. Я думаю, что все должно быть в порядке, потому что вы просто берете свои необработанные данные и проецируете их на факторы, определенные FA, а нагрузки там уже учитывают порядковый характер ваших переменных (так как вы использовали полихорическую матрицу как вход в ФА). Пост, связанный выше, предостерегает против этого подхода, однако, и предлагает некоторые альтернативы, но это не простая проблема, которую нужно решить