具有数据矩阵的PCA,其列数多于行数

时间:2017-06-14 06:47:32

标签: r pca psych

我目前有一个数据矩阵,其列数多于行数。我正在使用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正常工作。

2 个答案:

答案 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)
相关问题