我很难理解过程中的某些步骤。他们获取坐标数据,找到协方差矩阵,应用 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.
这就是我陷入困境的地方,因为我不确定我是否试图prcomp()
获取sdev
输出表单,或者我是否应该先缩放数据。它们的规模都相同,所以我看不出有什么问题。
我的第二个问题是我如何提取x
和y
二元中的标准差?
您不会将 prcomp 应用于协方差矩阵,而是在数据本身上执行此操作。
result= prcomp(df)
如果缩放的意思是规范化或标准化,则在执行prcomp()之前就会发生这种情况。有关该过程的更多信息,请参阅此链接,该链接是该过程的介绍性:R上的PCA。这可以引导您完成基础知识。若要获取 sdev,请使用结果对象上的摘要
summary(result)
result$sdev
不要将 prcomp 应用于协方差矩阵。 scale=T 将 PCA 基于相关矩阵,F 基于协方差矩阵
df.cor = prcomp(df, scale=TRUE)
df.cov = prcomp(df, scale=FALSE)