【问题标题】:Extract 3D coordinates from R PCA从 R PCA 中提取 3D 坐标
【发布时间】:2012-06-02 00:31:01
【问题描述】:

我正在尝试找到一种方法,使 R 中的 3D PCA 可视化更便携; 我已经使用prcomp() 在 2D 矩阵上运行 PCA。

  1. 如何导出数据点的 3D 坐标以及与之相关的标签和颜色 (RGB)?
  2. princomp()prcomp() 的实际区别是什么?
  3. 关于如何使用 HTML5 和画布以最佳方式查看 3D PCA 图的任何想法?

谢谢!

【问题讨论】:

  • 您最好将这些作为单独的问题提出(尤其是问题 3)。
  • 您必须提供更多信息。你的数据是什么,你的二维矩阵是cov矩阵吗,RGB是什么意思?在您的领域中,这种分析可能很明显,但 PCA 已应用于大量学科领域。

标签: html r canvas pca


【解决方案1】:

下面是一个例子:

pc <- prcomp(~ . - Species, data = iris, scale = TRUE)
  1. 轴分数是从组件x中提取的;因此,您可以使用以下方式将(您没有说要如何导出)作为 CSV 写出:

    write.csv(pc$x[, 1:3], "my_pc_scores.csv")
    

    如果您想为这些分数分配信息(颜色和标签,它们与 PCA 无关,而是您自己分配的东西),请将它们添加到分数矩阵中,然后导出。在上面的示例中,有 3 个物种,每个物种有 50 个观测值。如果我们希望将这些信息与分数一起导出,那么这样的方法就可以了

    scrs <- data.frame(pc$x[, 1:3], Species = iris$Species,
                       Colour = rep(c("red","green","black"), each = 50))
    write.csv(scrs, "my_pc_scores2.csv")
    

    scrs 看起来像这样:

    > head(scrs)
            PC1        PC2         PC3 Species Colour
    1 -2.257141 -0.4784238  0.12727962  setosa    red
    2 -2.074013  0.6718827  0.23382552  setosa    red
    3 -2.356335  0.3407664 -0.04405390  setosa    red
    4 -2.291707  0.5953999 -0.09098530  setosa    red
    5 -2.381863 -0.6446757 -0.01568565  setosa    red
    6 -2.068701 -1.4842053 -0.02687825  setosa    red
    

    更新错过了关于 RGB 的要点。请参阅?rgb 以了解在 R 中指定它的方法,但如果您想要的只是 RGB 字符串,则将上面的内容更改为使用类似

                       Colour = rep(c("#FF0000","#00FF00","#000000"), each = 50)
    

    相反,您可以在其中指定所需的 RGB 字符串。

  2. princomp()prcomp() 的本质区别在于用于计算 PCA 的算法。 princomp() 使用协方差或相关矩阵的特征分解,而 prcomp() 使用原始数据矩阵的奇异值分解 (SVD)。 princomp() 只处理数据中至少有同样多的样本(行)和变量(列)的数据集。 prcomp() 可以处理那种类型的数据列多于行的数据集。此外,可能更重要的是,取决于您所考虑的用途,SVD 优于特征分解,因为它具有更好的数值精度。

  3. 我已经用 标记了Q,希望这些专家可以提供帮助。如果您没有收到任何回复,请从您的 Q 中删除第 3 点,并专门针对使用画布显示 PC 的主题开始一个新的问题,详细信息请参考此问题。

【讨论】:

    【解决方案2】:

    您可以通过str(object_name) 了解任何 R 对象。在这种情况下:

    m <- matrix(rnorm(50), nrow = 10)
    res <- prcomp(m)
    str(m)
    

    如果您通过执行?prcomp 查看prcomp 的帮助页面,您会发现分数在res$x 中,而负载在res$rotation 中。这些已由 PC 标记。没有颜色,除非您决定在绘图过程中分配一些颜色。请参阅相应的帮助页面以比较 princompprcomp 以了解这两个函数之间的比较。基本上,它们之间的区别与幕后使用的方法有关。你最后一个问题我没法帮你。

    【讨论】:

      【解决方案3】:

      您声明您在 2D 矩阵上执行 PCA。如果这是您的数据矩阵,则无法获得 3D PCA。当然,您的二维矩阵可能是数据的协方差矩阵,在这种情况下,您需要使用princomp(不是prcomp!)并像这样明确传递协方差矩阵m

      princomp(covmat = m)
      

      像这样传递协方差矩阵:

      princomp(m)
      

      不会产生正确的结果。

      【讨论】:

      • 您是从字面上看数据的描述吗?考虑mat &lt;- matrix(rnorm(100), ncol = 10);这是一个二维数据集,因为length(dim(mat)) 是 2。但是,由此类数据表示的空间是 10-d。
      猜你喜欢
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 2017-01-16
      • 2016-12-24
      • 2016-10-04
      • 1970-01-01
      相关资源
      最近更新 更多