R语言中基于Spearman相关性用principal()做因子分析及报错解决
解决因子分析中Spearman相关与Varimax旋转的参数冲突问题
我明白你遇到的困扰了——当用psych包的principal函数做基于Spearman相关的因子分析,且设置nfactors>1时,因为参数传递错误触发了varimax函数的报错。让我一步步帮你搞定这个问题:
报错原因
你设置的spearman="cor"并不是principal函数的合法参数,当函数执行到Varimax旋转步骤时,会把这个多余参数传递给stats::varimax,但varimax根本不支持这个参数,因此就出现了unused argument的错误提示。
正确解决方案
最稳妥的方式是先手动计算Spearman相关矩阵,再将这个矩阵传入principal函数,这样能彻底避免参数传递的冲突。如果需要计算因子得分,记得同时传入原始数据集。
具体代码示例(以mtcars数据集为例)
# 第一步:预计算Spearman相关矩阵 spearman_corr <- cor(mtcars, method = "spearman", use = "all.obs") # 第二步:执行因子分析,传入相关矩阵与原始数据(用于生成因子得分) root.fa2 <- principal( mtcars, nfactors = 3, rotate = 'varimax', scores = TRUE, residuals = TRUE, oblique.scores = TRUE, method = "regression", cor = spearman_corr # 指定使用预计算的Spearman相关矩阵 )
为什么原来的写法行不通?
principal函数本身没有spearman这个参数,你试图用它指定相关计算方法是无效的。虽然principal允许通过...传递参数给内部的cor函数,但principal自己的method参数是用来指定因子得分的计算方式(比如你用的"regression"),直接传递method="spearman"会造成参数名冲突,反而容易出错。手动预计算相关矩阵是最清晰、最不容易踩坑的方式。
内容的提问来源于stack exchange,提问作者cnauber
相关产品推荐
相关产品推荐

