将 PCA 应用于协方差矩阵

Applying PCA to a covariance matrix

我在理解过程中的某些步骤时遇到一些困难。他们获取坐标数据,找到协方差矩阵,应用 PCA,然后简而言之从每个特征值的平方根中提取标准差。我正在尝试重现这个过程,但我卡在了步骤上。

采取的步骤

数据集由一个矩阵 R 组成,其中包含巴黎坐标 (x(i),y(i)),i=1,..., N 的 N 是记录的实例总数。我们将PCA应用于R输入数据集的协方差矩阵,得到如下变量:

a) 新坐标系的主成分,特征向量u和v,以及

b) 对应于每个主成分解释的总可变性的特征值(λ1 和 λ2)。

使用这些变量,为每个项目创建了图形表示。两个正交段以坐标数据的平均值为中心。段的方向由 PCA 的特征向量驱动,每个段的长度定义为均值附近的一个标准偏差(σ1 和 σ2),通过提取每个特征值 λ1 和 λ2 的平方根计算得出。

我的脚步

#reproducable data
set.seed(1)
x<-rnorm(10,50,4)
y<-rnorm(10,50,7)
# Note my data is not perfectly distirbuted in this fashion
df<-data.frame(x,y) # this is my R matrix

covar.df<-cov(df,use="all.obs",method='pearson') # this is my covariance matrix
pca.results<-prcomp(covar.df) # this applies PCA to the covariance matrix
pca.results$sdev # these are the standard deviations of the principal components
                 # which is what I believe I am looking for. 

这是我卡住的地方,因为我不确定我是在尝试获取 sdev 输出形式 prcomp() 还是应该先缩放我的数据。它们的规模都相同,所以我看不出有什么问题。

我的第二个问题是如何提取 xy 方向的标准偏差?

您不将 prcomp 应用于协方差矩阵,而是对数据本身进行。

result= prcomp(df) 

如果缩放是指规范化或标准化,那会在执行 prcomp() 之前发生。有关该过程的更多信息,请参阅该过程的介绍 link:pca on R。这可以引导您了解基础知识。要获取 sdev,请使用结果对象上的摘要

summary(result)
result$sdev

您没有将 prcomp 应用于协方差矩阵。 scale=T 将 PCA 基于相关矩阵,将 F 基于协方差矩阵

df.cor = prcomp(df, scale=TRUE)
df.cov = prcomp(df, scale=FALSE)