我目前有一个数据矩阵,其列数多于行数。我正在使用psych
包中的主要功能为我的PCA。我应该能够对此执行PCA,但如果列数多于行数,则无法使其工作。错误信息是关于奇点。
使用完整矩阵时,错误消息为
Error in solve.default(r, result$Structure) :
Lapack routine dgesv: system is exactly singular: U[80,80] = 0
如果我减少#列,但仍然超过行数,则错误消息显示为:
Error in solve.default(r, result$Structure) :
system is computationally singular: reciprocal condition number =
2.00483e-19
有没有人知道是否有任何设置可以调整以使其工作?我只需要前两个组件。矩阵中没有缺失值。
如果我使用JMP
,我可以让PCA正常工作。
答案 0 :(得分:0)
首先,您的数据中是否缺少值?使用complete.cases
检查它们。函数is.na()
允许您检查NA值。这可以帮助您减少变量的数量。
关于PCA,我猜您正在使用principal
包中的psych
功能。请在?principal
的详细信息部分中注明:
Both PC and FA attempt to approximate a given correlation or covariance matrix
of rank n with matrix of lower rank (p). nRn = nFk kFn' + U2 where k is much
less than n.
继续阅读详细信息部分以获取概述。
无论如何,请注意,PCA永远不会返回比观察更多的组件。
答案 1 :(得分:0)
问题是,委托人不只是找到主要组件,而且还试图为你评分组件。这需要反转相关矩阵,此时主要抛出错误。
但是,如果您只想加载组件,请尝试以下操作。对于我的例子,我使用bfi的前25项,但仅使用24个科目。
pc <- principal (bfi[1:24,1:25], nfactors = 5,scores = FALSE)