【问题标题】:Plot a plane in R: PCA在 R 中绘制平面:PCA
【发布时间】:2021-12-08 14:16:48
【问题描述】:

我正在处理一个 PCA 问题,其中我有 3 个变量,我通过执行 PCA 将它们减少到 2 个。我已经使用 scatter3D 绘制了 3D 中的所有点。我的问题是,如何在 R 中绘制由两个向量(采样协方差矩阵的前两个特征向量)确定的平面?

这是我目前所拥有的

library(plot3D)
X <- matrix(c(55, 75, 110,
          47, 69, 108,
          42, 71, 110,
          48, 74, 114,
          47, 75, 114,
          52, 73, 104,
          49, 72, 106,
          44, 67, 107,
          52, 73, 108,
          45, 73, 111,
          50, 80, 117,
          50, 71, 110,
          48, 75, 114,
          51, 73, 106,
          44, 66, 102,
          42, 71, 112,
          50, 68, 107,
          48, 70, 108,
          51, 72, 108,
          52, 73, 109,
          49, 72, 112,
          49, 73, 108,
          46, 70, 105,
          39, 66, 100,
          50, 76, 108,
          52, 71, 108,
          56, 75, 108,
          53, 70, 112,
          53, 72, 110,
          49, 74, 113,
          51, 72, 109,
          55, 74, 110,
          56, 75, 110,
          62, 79, 118,
          58, 77, 115,
          50, 71, 105,
          52, 67, 104,
          52, 73, 107,
          56, 73, 106,
          55, 78, 118,
          53, 68, 103), ncol = 3,nrow = 41,byrow = TRUE)
S <- cov(X)
Gamma <- eigen(S)$vectors
scatter3D(X[,1], X[,2], X[,3], pch = 18, bty = "u", colkey = FALSE, 
      main ="bty= 'u'", col.panel ="gray", expand =0.4, 
      col.grid = "white",ticktype = "detailed",
      phi = 25,theta = 45)
pc <- scale(X,center=TRUE,scale=FALSE) %*% Gamma[,c(1,2)]

现在我想使用 scatter3D 绘制平面

【问题讨论】:

    标签: r plot 3d plane


    【解决方案1】:

    也许这样就可以了。使用iris 数据。它使用 car 包中的 scatter3d 可以将回归曲面添加到 3d 图:

    library(car)
    data(iris)
    iris.pr <- prcomp(iris[, 1:3], scale.=TRUE)
    # Draw 3d plot with surface and color points by species
    scatter3d(PC3~PC1+PC2, iris.pr$x, point.col=c(rep(2, 50), rep(3, 50), rep(4, 50)))
    

    这绘制了一个回归曲面,从 PC1 和 PC2 预测 PC3。根据定义,任何两个主成分之间的相关性为零,因此对于 PC1 和 PC2 的任何值,表面应该是 PC3=0,但我看不到精确生成该表面的方法。不过也差不多了。

    【讨论】:

    • 谢谢你的回答,我已经编辑了我的问题,你能看一下吗?我正在“手动”做 pca,在这个例子中我没有不同的组
    • 您的结果与prcomp(X) 完全匹配,但问题是pc 定义的平面未在第三维中定义,因此没有明显的位置将其放在3d 散点图中,除非可能在垂直轴的平均值。其次,平面由居中值(值 - 平均值)定义,因此它不适合 3D 空间中的任何位置。您可以使用scale 与列手段将其放回与您的 3D 绘图相同的比例。
    • 我最初错过了scatter3D() 中的surf= 参数,但要使用它,您需要具有第三维的值。
    猜你喜欢
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多