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 度?
我假设 autoplot
是 ggfortify
包中的函数。可能有两种方法可以做到这一点。最简单的方法是通过编写
来要求反转 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)
它产生了以下用于训练和测试的输出。
这是一个可重现的例子:
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 度?
我假设 autoplot
是 ggfortify
包中的函数。可能有两种方法可以做到这一点。最简单的方法是通过编写
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)
它产生了以下用于训练和测试的输出。