【问题标题】:PCA : Can I reverse the axis of the first principal component in R?PCA:我可以反转 R 中第一个主成分的轴吗?
【发布时间】:2020-12-14 11:13:38
【问题描述】:

这是一个可重现的例子:

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 上的 pca 会产生非常相似的双图,但第一个主成分已反转其符号,它们是镜像的。是否可以强制两个组件旋转 180 度?

【问题讨论】:

    标签: r pca cross-validation ggbiplot


    【解决方案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)
    

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

    【讨论】:

    • retx=TRUE 是默认值,请参阅?prcomp。不知道为什么你的 PC1 轴与我的和 OP 的不同,但帮助页面确实警告这是一种可能性。
    • @user2554330 你是对的。现在它也让我思考。
    • 感谢您的回答!
    【解决方案2】:

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

    【讨论】:

    • 感谢您的回答,非常感谢。
    猜你喜欢
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 2021-07-19
    • 1970-01-01
    • 2012-07-24
    • 2019-09-16
    相关资源
    最近更新 更多