如何在 ggplot 中使用 hellinger 变换绘制 PCA?

How to plot PCA using hellinger transformation in ggplot?

我正在尝试在我的数据集上使用 Hellinger 变换来绘制 ggplot。它适用于常规 prcomp 函数,但不适用于 Hellingers。我如何使用 ggplot 绘制来自 Hellinger 转换数据的数据?

library(ggfortify)
library(vegan)
df <- iris[1:4]
pca_res <- prcomp(df, scale. = TRUE)
autoplot(pca_res, data = iris, colour = 
'Species',
     loadings = TRUE, loadings.colour = 'blue',
     loadings.label = TRUE, loadings.label.size = 3)

##Hellinger Transformation
df.hell <- decostand(df, method = "hellinger")
df.hell <- rda(df.hell)

ggplot2::autoplot(df.hell)

autoplot(df.hell, data = iris, colour = 
 'Species',
 loadings = TRUE, loadings.colour = 'blue',
 loadings.label = TRUE, loadings.label.size = 3)

Error: Objects of type rda/cca not supported by autoplot.

Error: Objects of type rda/cca not supported by autoplot.

编辑 1:即使可以在 ggplot2 中手动计算第一个图,其余的图(如加载或省略号等)又如何呢? base plot 在使用 Hellingers 时允许叠加,但 ggplot2 似乎不会直接允许它。

prcomp returns class prcomp 的对象,可以用 autoplot 绘制。正如错误消息所说,rda function returns an object of class "rda" "cca",无法使用 autoplot 绘制。因此,您必须手动提取您需要的位:

data.frame(PC = df.hell$CA$u, species = iris$Species) %>% 
    ggplot(aes(x=PC.PC1, y=PC.PC2)) + 
    geom_point(aes(colour=species))

您可以通过 str(df.hell):

找到对象的相关部分
List of 10
 $ colsum        : Named num [1:4] 0.037 0.0746 0.086 0.0854
  ..- attr(*, "names")= chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
 $ tot.chi       : num 0.0216
 $ Ybar          : num [1:150, 1:4] 0.0042 0.00511 0.0042 0.00359 0.00363 ...
  ..- attr(*, "scaled:center")= Named num [1:4] 0.656 0.479 0.498 0.267
  .. ..- attr(*, "names")= chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
  ..- attr(*, "METHOD")= chr "PCA"
 $ method        : chr "rda"
 $ call          : language rda(X = df.hell)
 $ pCCA          : NULL
 $ CCA           : NULL
 $ CA            :List of 7
  ..$ eig    : Named num [1:4] 0.0208691 0.0005348 0.0001951 0.0000205
  .. ..- attr(*, "names")= chr [1:4] "PC1" "PC2" "PC3" "PC4"
  ..$ poseig : NULL
  ..$ u      : num [1:150, 1:4] -0.122 -0.11 -0.119 -0.106 -0.123 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : NULL
  .. .. ..$ : chr [1:4] "PC1" "PC2" "PC3" "PC4"
  ..$ v      : num [1:4, 1:4] -0.241 -0.508 0.589 0.58 0.375 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
  .. .. ..$ : chr [1:4] "PC1" "PC2" "PC3" "PC4"
  ..$ rank   : int 4
  ..$ tot.chi: num 0.0216
  ..$ Xbar   : num [1:150, 1:4] 0.0042 0.00511 0.0042 0.00359 0.00363 ...
  .. ..- attr(*, "scaled:center")= Named num [1:4] 0.656 0.479 0.498 0.267
  .. .. ..- attr(*, "names")= chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : NULL
  .. .. ..$ : chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
  .. ..- attr(*, "METHOD")= chr "PCA"
 $ inertia       : chr "variance"
 $ regularization: chr "this is a vegan::rda result object"
 - attr(*, "class")= chr [1:2] "rda" "cca"