PCA:我可以反转 R 中第一主成分的轴吗?

PCA : Can I reverse the axis of the first principal component in R?

这是一个可重现的例子:

set.seed(10)
pick <- sample(nrow(iris),nrow(iris)/2)
iris.training <- iris[pick,] 
iris.testing <- iris[-pick,]
pca.training <- prcomp(iris.training[-5])
pca.testing <- prcomp(iris.testing[-5])
autoplot(pca.training,loadings.label=T,loadings=T)
autoplot(pca.testing,loadings.label=T,loadings=T)

产生以下输出:

正如你所看到的,data.training 和 data.testing 上的主成分分析产生了非常相似的双标图,但第一主成分的符号颠倒了,它们是镜像的。是否可以强制两个组件旋转 180 度?

我假设 autoplotggfortify 包中的函数。可能有两种方法可以做到这一点。最简单的方法是通过编写

来要求反转 x 轴
autoplot(pca.testing,loadings.label=TRUE,loadings=TRUE) + scale_x_reverse()

请注意,这并没有改变任何值:X 轴现在从正到负而不是通常的方向。

第二个是修改pca.testing对象以交换x轴上的符号。 这在统计上是有效的:PCA 不会确定任何分量的符号,但这有点棘手,因为符号出现在两个地方:分量 x 用于数据点,分量 rotation 用于箭头:

pca.testing$x[,1] <- - pca.testing$x[,1]
pca.testing$rotation[,1] <- -pca.testing$rotation[,1]
autoplot(pca.testing,loadings.label=TRUE,loadings=TRUE)

与你的问题无关,但有一些建议:不要使用T,使用TRUE,否则下次有温度数据时,可能会不小心更改值,并导致破坏你的分析。

您没有返回旋转后的变量。更改后的代码如下。注意 retx=TRUE

set.seed(10)
pick <- sample(nrow(iris),nrow(iris)/2)
iris.training <- iris[pick,] 
iris.testing <- iris[-pick,]
pca.training <- prcomp(iris.training[-5], retx=TRUE)
pca.testing <- prcomp(iris.testing[-5], retx=TRUE)
autoplot(pca.training,loadings.label=TRUE,loadings=TRUE)
autoplot(pca.testing,loadings.label=TRUE,loadings=TRUE)

它产生了以下用于训练和测试的输出。