如何在 PCoA 中为包含混合/有序变量的相异矩阵指定特征向量?

问题描述 投票:0回答:1

我有一个包含许多物种的序数变量的数据集,我想使用主坐标分析 (PCoA) 将其可视化。当我将数据视为连续(数字)时,可以直接使用

vegan::vegdist
创建 Gower 差异指数,
ape::pcoa
计算主坐标分解,以及
biplot
可视化变量:

library(ape)
library(vegan)
library(FD)

df <- data.frame(a = sample.int(4, 20, replace=TRUE),
b = sample.int(4, 20, replace=TRUE),
c = sample.int(4, 20, replace=TRUE),
d = sample.int(4, 20, replace=TRUE),
e = sample.int(4, 20, replace=TRUE))
rownames(df) <- paste0("species_", letters[1:20])

df.distance <- vegdist(df, "bray")
res <- pcoa(df.distance)
#biplot(res)
biplot(res, df)

但是,因为变量是有序的,vegdist 无法解释这一点,所以我使用

FD::gowdis
来计算混合变量的 Gowers 相异度。

df.ordinal <- df
df.ordinal$a <- factor(df.ordinal$a,levels=1:4,labels = c("low","medium","high","veryhigh"),ordered=T)
df.ordinal$b <- factor(df.ordinal$b,levels=1:4,labels = c("low","medium","high","veryhigh"),ordered=T)
df.ordinal$c <- factor(df.ordinal$c,levels=1:4,labels = c("low","medium","high","veryhigh"),ordered=T)
df.ordinal$d <- factor(df.ordinal$d,levels=1:4,labels = c("low","medium","high","veryhigh"),ordered=T)
df.ordinal$e <- factor(df.ordinal$e,levels=1:4,labels = c("low","medium","high","veryhigh"),ordered=T)

df.distance.gower <- gowdis(df.ordinal, ord="podani")
res <- pcoa(df.distance.gower)
biplot(res)

毫不奇怪,在考虑序数数据时排序是不同的,但我无法将叠加变量可视化为特征向量:

> biplot(res.ordinal, df.ordinal)
Error in cov(Y, points.stand) : 
  is.numeric(x) || is.logical(x) is not TRUE```

大概这是因为变量现在是序数数据,不像 vegdist 示例中那样连续。

是否有一种方法可以使用混合数据集可视化特征向量/载荷,或者是否存在无法应用于 PCoA 的理论原因?

r pca vegan
1个回答
0
投票

我不太确定你问的是什么。您确实在 PCoA 中获得了特征向量,但这些特征向量仅涉及采样单位(行)。 PCoA 基于采样单元之间的差异(被视为距离),这些差异没有关于产生差异的变量(列)的信息。对于 SU 之间的任何差异矩阵,有无限数量的可能列变量会产生这些差异(我们甚至不能说有多少列变量——也不知道它们是什么)。这意味着基本上您无法根据采样单元(行)的差异获得 PCoA 中列的信息。

仍然有时您会从软件中获取此列信息。这是基于在计算差异之前访问数据,然后将这些差异视为与这些数据的欧几里德距离(它们通常不是)。好吧,如果它们真的碰巧是欧几里得距离,你不应该使用 PCoA,而应该使用 PCA(主成分分析)。但是,如果您在 PCoA Euclidean 中的差异,那么您可以同时拥有行和列特征向量分数/载荷。这样做的结果是,如果您的差异可以表示为 transformed 数据的欧几里得距离,那么转换后的数据将为您提供列特征向量解(“加载”)。

在 PCoA 应用程序中,我们通常会忽略这种不相容性、不一致性和不可能性,并假设输入数据可用于将观察到的变量投影到采样单元(行)的特征向量解上,即使存在半度量或非度量差异。这不是严格正确的,但通常效果很好,我们希望这将使我们摆脱罪恶。它不会,但交叉你的手指。所以关键是要找到一个尽可能类似于相异指数中隐式转换的数据转换。对于序数数据,您应该有相应的连续数值转换,其中序数水平不是等距的,而是在该转换定义的值处。如果你不能得到那些(我不知道你的软件:这些值可以得到,但软件可能不会给出值),

请注意,我写了关于adding column scores (eigenvector loadings),因为PCoA不知道这些,也不能知道这些,但你必须在分析后添加它们。如果您在 PCoA 中有欧几里德距离,或者如果您的距离可以表示为转换数据的欧几里得距离,并且这些转换数据用于添加变量(列)的信息,则此添加将是严格正确的。在这种情况下,您最初应该使用转换数据的 PCA。一般来说,在 PCoA 中,列分数 never 完全正确,但它们只是辅助信息,在许多情况下可能不会太糟糕,并且通常可以提供有用的信息(即使在严格不正确的情况下)。

© www.soinside.com 2019 - 2024. All rights reserved.