如何 compute/extract R 中 Isomap [vegan] 模型的残差

How to compute/extract the residual variance from an Isomap [vegan] model in R

我目前正在尝试了解 Isomap 结果与 PCA 和 MDS 有何不同,以及它们是否更适合我的数据。为此,我开始使用 R 中的 vegan 提供的 isomap 函数,使用 BCI 数据集及其基本示例 https://www.rdocumentation.org/packages/vegan/versions/2.4-2/topics/isomap(代码如下)。一些出版物将残差方差作为一个很好的衡量标准进行比较(例如“Tenenbaum 于 2002 年发表的“原始论文”,第 2321 页) https://web.mit.edu/cocosci/Papers/sci_reprint.pdf 但是,到目前为止,我未能从示例中的对象 "ord" 中提取此信息。有一个元素 ord[["eig"]],可能与它有关,但到目前为止我很困惑。 非常感谢您的帮助!

> data(BCI)
dis <- vegdist(BCI)
tr <- spantree(dis)
pl <- ordiplot(cmdscale(dis), main="cmdscale")
lines(tr, pl, col="red")
ord <- isomap(dis, k=3)
ord 

plot(ord[["eig"]])  # plot of the eig values, index represents sample number (?)

所以我对这个话题做了一些进一步的调查。

本质上,数据集中的特征值与变量一样多。 Eigenvals 将根据其解释力覆盖在新的组件或维度中,第一个组件或维度通常将解释得最多,即具有最大的 Eigenvalue。 1 的特征值只解释一个变量,这很无聊。从数学上讲,特征值是 平方 因子载荷的总和。

对于上面示例中的 Isomap,可以如下所示:

gram<-(ord[["eig"]]) # extracts the  values of the gram matrix aka Eigenvalues
sum(gram) # close to ~55 (number of variables) the Isomap procedure can alter the maximum variance in the dataset by compression and expansion unlike Principal Component Analysis

variance_covered <-0

for (i in gram) {
  print(variance_covered)
  variance_covered<-variance_covered+(i/sum(gram))  # this prints the amount of variance covered per dimension
}

下面使用 [prcomp] 的 PCA 给出了一个更直接的例子

data(mtcars)
head(mtcars)

cars.autoscale <- prcomp(mtcars,
             center = TRUE,
             scale. = TRUE) 

pca_factorload<-summary(cars.autoscale)[1] 
factors<-unlist(pca_factorload, use.names=FALSE) # extracts the factor loadings aka. standard deviation
eigenvals <-factors^2   #squared factor loadings = Eigenvalues
total_eigenvals<-sum(eigenvals) #This sum is 11 which is the number of variables in mtcars

var_sum <-0

for (i in eigenvals) {
   print(var_sum)
   var_sum<-var_sum+(i/sum(eigenvals)) ))  # this prints the amount of variance covered per component

 }