Это интересная проблема. Регулярный факторный анализ предполагает, что ваши входные показатели масштабируются по соотношению или интервалу. В случае порядковых переменных у вас есть несколько вариантов. Вы можете либо использовать подход, основанный на 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, а нагрузки там уже учитывают порядковый характер ваших переменных (поскольку вы использовали полихорическую матрицу как вход в ФА). Тем не менее, публикация, приведенная выше, предостерегает от такого подхода и предлагает некоторые альтернативы, но это не простая задача, которую нужно решить