使用envfit函数时缺失向量值的技术求助
解决envfit()无向量输出的问题
问题原因
你传给envfit()的type、location、year都是分类变量(因子类型),这类变量在envfit中不会生成向量,只会计算分组的中心点(Centroids),所以输出里看不到向量相关结果。向量是envfit专门针对连续环境变量生成的结果。
查看分类变量的envfit结果
直接打印data.envfit.nmds,会看到分类变量的中心点统计信息,示例输出如下:
> data.envfit.nmds ***VECTORS*** # 这部分为空,因为无连续变量输入 ***CENTROIDS*** NMDS1 NMDS2 Pr(>r) type:Hrast 0.123 -0.456 0.021 * type:Bor -0.345 0.678 0.015 * location:B 0.234 -0.123 0.032 * ...
提取中心点的具体坐标数据可以用:
centroids_data <- data.envfit.nmds$centroids
绘图方法
1. 绘制分类变量中心点
先画出NMDS样本点图,再叠加中心点:
# 绘制NMDS样本点,按type分组上色 plot(veganNMDS, type = "points", pch = 19, col = as.factor(mapping$type)) # 添加分类变量的中心点,用不同形状区分 plot(data.envfit.nmds, pch = 17, col = "darkred", cex = 1.5, add = TRUE) # 加图例说明 legend("topright", legend = levels(as.factor(mapping$type)), pch = c(19,19), col = unique(as.factor(mapping$type)))
2. 生成向量的方法
如果需要得到向量,必须传入连续环境变量(比如pH、温度、湿度这类数值型变量)。假设你的mapping数据里有一个连续变量soil_ph,可以这样操作:
# 针对连续变量运行envfit data.envfit_continuous <- envfit(veganNMDS, mapping$soil_ph, permutations = 999) # 查看向量的坐标和显著性 print(data.envfit_continuous) # 绘制NMDS图并叠加向量 plot(veganNMDS) plot(data.envfit_continuous, arrow = TRUE, col = "blue", lwd = 2, add = TRUE)
补充检查
可以用str(mapping)查看变量类型,确认哪些是分类(Factor)、哪些是连续(numeric/integer)类型,避免传错变量类型导致无向量输出。
内容的提问来源于stack exchange,提问作者Olivera
相关产品推荐
相关产品推荐

