来自R

时间:2018-11-10 16:32:37

标签: r statistics psych factor-analysis

我在对有序分类数据进行探索性因素分析时无法计算出因素得分。我已经设法评估了绘制多少个因子,并使用心理软件包进行了因子分析,但无法弄清楚如何获得单个参与者的因子得分,也没有在网上找到太多帮助。这是我被困住的地方:

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 :(得分:0)

这是一个有趣的问题。常规因素分析假设您的输入量度是比率或区间比例的。对于序数变量,您有几种选择。您既可以使用基于IRT的方法(在这种情况下,您将使用“分级响应模型”之类的方法),也可以按照示例中的方法进行操作,并使用多元相关矩阵作为因素分析的输入。您可以看到有关此问题的更多讨论here

大多数因素分析软件包都有一种获取因素得分的方法,但是根据您选择用作输入的内容,它将为您提供不同的输出。例如,通常仅使用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确定的因素上,并且那里的负荷已经考虑到了变量的序数性质(因为您使用了多色矩阵作为输入到FA中)。但是,上面链接的文章警告不要使用这种方法,并提出了一些替代方法,但这并不是一个容易解决的简单问题