我是R的新用户,我尝试使用R在我的数据集上进行PCA。数据的维度为20x10000,即功能数量为10000,个人数量为20.看来prcomp()不能精确处理数据,因为计算的特征向量和新数据的维数是20x20和10000x20而不是10000x10000和20x10000。我也试过了FactoMineR库,但结果看起来也失去了一些维度。有没有办法像这样对数据做PCA? :(
答案 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可能会发生类似情况。
如果您只想完全重建数据矩阵(无论出于何种原因),您可以直接轻松使用svd
或eigen
。 /我的例子使用了相关矩阵,但逻辑并不局限于这种情况./