我是 R 的新用户,我尝试使用 R 对我的数据集进行 PCA。数据的维度为 20x10000,即特征数为 10000,个体数为 20。似乎 prcomp() 无法处理数据确切地说,因为计算出的特征向量和新数据的维度是 20x20 和 10000x20,而不是 10000x10000 和 20x10000。我也尝试了 FactoMineR 库,但结果看起来它也失去了一些维度。有没有办法对这样的数据进行 PCA 分析?:(
问问题
2115 次
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 可能会发生类似的情况。
如果您只想准确地重建数据矩阵(无论出于何种原因),您可以轻松使用svd
或eigen
直接使用。/我的例子使用了相关矩阵,但逻辑并不局限于这种情况。/
于 2013-11-04T08:46:25.567 回答