0

我是 R 的新用户,我尝试使用 R 对我的数据集进行 PCA。数据的维度为 20x10000,即特征数为 10000,个体数为 20。似乎 prcomp() 无法处理数据确切地说,因为计算出的特征向量和新数据的维度是 20x20 和 10000x20,而不是 10000x10000 和 20x10000。我也尝试了 FactoMineR 库,但结果看起来它也失去了一些维度。有没有办法对这样的数据进行 PCA 分析?:(

4

1 回答 1

2

通过阅读手册,默认情况下似乎没有省略任何组件,但请检查tol参数。问题在于,当您的案例少于个人时,可能会(而且经常是)负特征值。(我认为对于 10000 个案例和 20 个个体,您将始终有许多负特征值。)请参阅我有时使用的 PCA 的简化版本,它以通常在心理学中使用的方式计算“PC 负载”。

PCA <- function(X, cut=NULL, USE="complete.obs") {
   if(is.null(cut)) cut<- ncol(X)
   E<-eigen(cor(X,use=USE))
   vec<-E$vectors
   val<-E$values
   P<-sweep(vec,2,sqrt(val),"*")[,1:cut]
   P
   }

“载荷”基本上是特征向量乘以特征值的平方根——但如果你有负特征值,这里就会出现问题。prcomp 可能会发生类似的情况。

如果您只想准确地重建数据矩阵(无论出于何种原因),您可以轻松使用svdeigen直接使用。/我的例子使用了相关矩阵,但逻辑并不局限于这种情况。/

于 2013-11-04T08:46:25.567 回答