Факторные оценки из факторного анализа по порядковым категориальным данным в R - PullRequest
0 голосов
/ 10 ноября 2018

У меня проблемы с вычислением коэффициентов из разведочного анализа по упорядоченным категориальным данным. Мне удалось оценить, сколько факторов нужно нарисовать, и провести анализ факторов с помощью пакета психологии, но я не могу понять, как получить оценки факторов для отдельных участников, и я не нашел большой помощи онлайн. Вот где я застрял:

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 Ответ

0 голосов
/ 11 ноября 2018

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

По сути, то, что вы делаете:

  1. Рассчитать полихорическую корреляционную матрицу
  2. Используйте эту матрицу для проведения факторного анализа и извлечения 2 факторов и связанных с ними нагрузок
  3. Используйте загрузки из FA и необработанные (числовые) данные, чтобы получить ваши коэффициенты фактора

И этот метод, и метод, который вы используете при редактировании, рассматривают исходные данные как числовые, а не как множители. Я думаю, что все должно быть в порядке, потому что вы просто берете свои необработанные данные и проецируете их на факторы, определенные FA, а нагрузки там уже учитывают порядковый характер ваших переменных (поскольку вы использовали полихорическую матрицу как вход в ФА). Тем не менее, публикация, приведенная выше, предостерегает от такого подхода и предлагает некоторые альтернативы, но это не простая задача, которую нужно решить

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