如何从psych包的EFA结果提取观测层面因子分数用于GLM
解决psych包EFA提取观测层面因子分数的问题
问题原因
你当前获取的fa_02$r.scores和fa_02$score.cor是因子间的相关矩阵,并非每个观测样本的因子分数——这是因为调用fa()函数时未指定计算观测因子分数的参数,默认不会生成样本层面的分数。
解决方案
1. 重新运行EFA并指定分数计算方法
调用psych::fa()时必须添加scores参数,指定因子分数的估计方法(常用选项包括"regression"、"tenBerge"、"Anderson")。示例代码:
library(psych) # 假设你的原始数据集为df,包含所有用于EFA的观测变量 fa_02 <- fa(df, nfactors = 2, scores = "regression")
scores = "regression":回归法估计因子分数,最常用,默认对变量中心化scores = "tenBerge":保证因子得分正交,适用于需要因子独立的场景scores = "Anderson":极大似然法估计,符合EFA的统计假设
2. 提取观测层面的因子分数
正确的样本因子分数存储在fa_02$scores中,这是一个行数与原始数据集观测数一致、列数等于因子数的矩阵:
# 查看因子分数维度,确认与原始数据行数匹配 dim(fa_02$scores) # 查看前几行因子分数 head(fa_02$scores)
3. 合并因子分数到数据集用于GLM
将因子分数合并到原始数据后,即可作为自变量构建广义线性模型:
# 合并因子分数与原始数据 df_combined <- cbind(df, fa_02$scores) # 构建GLM示例(假设响应变量为y,其他预测变量为other_var1、other_var2) glm_fit <- glm(y ~ MR1 + MR2 + other_var1 + other_var2, data = df_combined, family = gaussian)
补充说明
fa_02$r.scores:因子得分的相关矩阵,反映提取出的因子之间的关联程度fa_02$score.cor:与fa_02$Phi等价,是EFA模型中潜在因子的相关矩阵
内容的提问来源于stack exchange,提问作者Karoline
相关产品推荐
相关产品推荐

