现有 PCA 模型的新数据点

New data points for existing PCA model

我已按照 this 教程创建和可视化 PCA。我特别感兴趣的部分是向现有模型添加新数据点。

正如教程所建议的,可以使用 predict (ir.pca, newdata=tail(log.ir, 2)) 来预测新的 PC。但是如何将这些新观察结果添加到现有图中?它看起来不像预测函数 returns 与 ggplot 函数中使用的 ir.pca 相同的对象。

我发现了类似的问题 here and here 但这些是计算新的 PCA 分数并将它们添加到方差图中(如果我理解正确的话)。

最终我要做的是使用初始数据集查看新点是否落在置信椭圆内defined/derived。

我在教程中使用的代码:

 # log transform 
    log.ir <- log(iris[, 1:4])
    ir.species <- iris[, 5]

 
# apply PCA - scale. = TRUE is highly 
# advisable, but default is FALSE. 
ir.pca <- prcomp(log.ir,
                 center = TRUE,
                 scale. = TRUE) 

library(devtools)
install_github("ggbiplot", "vqv")
 
library(ggbiplot)
g <- ggbiplot(ir.pca, obs.scale = 1, var.scale = 1, 
              groups = ir.species, ellipse = TRUE, 
              circle = TRUE)
g <- g + scale_color_discrete(name = '')
g <- g + theme(legend.direction = 'horizontal', 
               legend.position = 'top')
print(g)

并且正如教程所建议的那样,我想将新数据添加到使用 ggplot 可视化的现有绘图中

谢谢

当我们检查 ggplot 对象时,我们看到它有一个名为 data:

的元素
str(g)
# List of 9
#  $ data       :'data.frame':  150 obs. of  3 variables:
#   ..$ xvar  : num [1:150] -2.41 -2.22 -2.58 -2.45 -2.54 ...
#   ..$ yvar  : num [1:150] -0.397 0.69 0.428 0.686 -0.508 ...
#   ..$ groups: Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
#  $ layers     :List of 5
#  <snip>

因此我们可以将新数据点添加到 data 数据框。假设来自 iris 的这 10 个观测值是我们的 "new" 观测值,我们预测它们的 PC 值:

set.seed(123)
x <- sample(seq_len(nrow(iris)), 10)
predicted <- predict(ir.pca, newdata = log.ir[x, ])

我们可以将这些预测值添加到 data 数据框

g$data <- rbind(g$data, 
  data.frame(
    xvar = predicted[, "PC1"],
    yvar = predicted[, "PC2"],
    groups = "new"
  )
)

所以 print(g) 产量