是否不可能对其变量#大于个体的数据进行PCA?

时间:2013-11-04 07:41:10

标签: r pca

我是R的新用户,我尝试使用R在我的数据集上进行PCA。数据的维度为20x10000,即功能数量为10000,个人数量为20.看来prcomp()不能精确处理数据,因为计算的特征向量和新数据的维数是20x20和10000x20而不是10000x10000和20x10000。我也试过了FactoMineR库,但结果看起来也失去了一些维度。有没有办法像这样对数据做PCA? :(

1 个答案:

答案 0 :(得分: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。 /我的例子使用了相关矩阵,但逻辑并不局限于这种情况./