R 对变量数量大于个体数量的数据进行主成分分析是不可能的吗?

R 对变量数量大于个体数量的数据进行主成分分析是不可能的吗?,r,pca,R,Pca,我是R的新用户,我尝试使用R对我的数据集进行PCA。数据的维数为20x10000,即特征的维数为10000,个体的维数为20。似乎prcomp()无法准确处理数据,因为计算出的特征向量和新数据的维数是20x20和10000x20,而不是10000x1000和20x10000。我也尝试了FactoMineR库,但结果看起来它也放松了一些维度。有没有办法对这样的数据进行主成分分析(通过阅读手册,默认情况下似乎没有忽略任何组件,但请检查tol参数。问题在于,当您的案例数少于单个案例时,负特征值可能会下

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

通过阅读手册,默认情况下似乎没有忽略任何组件,但请检查
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
   }

PCA
prcomp
可以处理比观测值更具特征的数据集,我自己已经做过几次了。你能添加一个失败代码的虚拟示例来帮助我们定位问题吗?可能是因为缺少值吗?这是编程还是统计问题?如果是后者,我建议将其移至crossvalidated.com.@Backlin实际上,我想做的是减少数据集的维数,删除优先级较低的功能。为此,我只尝试了“prcomp(X)”,没有任何选项,其中dim(X)=20x10000。我可以找到dim(prcomp(X)$rot)=10000x20和dim(prcomp(X)$X)=20x20。dim(prcomp(X)$rot)=10000x1000和dim(prcomp(X)对吗$x)=20x10000???我也尝试手动查找特征向量,但输出中有许多NaN。
prcomp
似乎工作正常。由于
x
(行)中有20个观测值,PCA投影的维数将为20。
prcomp()$x
是新空间中
x
的坐标(20个观测值作为行,20个新基向量上的坐标又称为列)。
prcomp()$rot
持有以原始空间(行)坐标表示的新基向量/分量(列)的定义。@Backlin我应该认为prcomp()从奇异值分解(SVD)的角度,我只是想找到维数为10000x1000的协方差矩阵的特征向量。由于你的解释,事情更清楚了。谢谢。)正如你所说,你的函数PCA用我的数据集生成了NaN。我试图用
eigen
找到特征向量,输出中有许多NaN。无论如何,谢谢你的建议。