0

这是一个可重现的示例:

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)

产生以下输出:biplot_pca_training biplot_pca_testing

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

4

2 回答 2

1

您没有返回旋转的变量。修改后的代码如下。注意 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)

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

于 2020-12-14T12:26:58.073 回答
1

我假设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,否则下次您有温度数据时,您可能会无意中更改该值,并对您的分析造成严重破坏。

于 2020-12-14T11:40:28.353 回答