如何在排序空间绘制NMDS变化轨迹?ecotraj包运行报错如何解决?
报错原因分析
这个报错的根本原因是你给trajectoryPCoA()传入的第一个参数不符合函数要求:
trajectoryPCoA()的第一个入参要求是所有样本两两之间的相异度矩阵(比如你做NMDS分析前基于物种丰度计算的Bray-Curtis距离矩阵等),但你当前传入的是metaMDS输出的2维NMDS坐标,参数类型完全不匹配。- 函数内部调用
cmdscale()做主坐标分析时,会把你传入的2列坐标错误识别为相异度矩阵处理,计算得到的有效维度n过小,要求的降维维数k超出了{1,2,...,n-1}的合法范围,最终触发该报错。
另外你提取sites和time时使用了单括号[c(1)],提取得到的是单列数据框而非向量,也可能引发参数匹配异常。
解决方案
你可以根据需求选择两种修复方案:
- 方案1:基于已有的NMDS坐标绘制轨迹
如果你不需要重新做PCoA,只想用已经算好的NMDS坐标绘制生态轨迹,直接换用trajectoryPlot()函数即可,这个函数专门接收已降维的坐标作为输入,修改后代码如下:library(ecotraj) # 用双括号提取为向量,避免单括号保留数据框结构 sites <- NMDS_coords[[1]] time <- NMDS_coords[[2]] # 提取两列NMDS坐标 nmds_axes <- NMDS_coords[, c(3,4)] trajectoryPlot(nmds_axes, sites, time, survey.labels = TRUE) - 方案2:基于相异度矩阵做PCoA后绘制轨迹
如果你确实需要在PCoA的排序空间中绘制轨迹,将第一个参数替换为你当初做NMDS分析时使用的相异度矩阵即可,示例代码如下:# 假设你之前计算的相异度矩阵为bray_dist trajectoryPCoA(bray_dist, sites, time, survey.labels = TRUE)
内容的提问来源于stack exchange,提问作者Nichola
相关产品推荐
相关产品推荐

