r语言 - 是否不可能对变量 # 大于个人变量的数据进行 PCA



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

通过阅读手册,看起来默认情况下没有省略任何组件,但请检查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。/我的例子使用了相关矩阵,但逻辑不限于这种情况。

最新更新