如何 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
}
我目前正在尝试了解 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
}