R语言vegan包CCA排序后,如何投影添加被动物种?
错误原因解析
你调用predict()时传入了物种数据给newdata参数,但你的CCA模型是基于环境变量(dune.env)拟合的,predict(..., type="response")的作用是用新的环境变量数据预测物种丰度,因此R会在你传入的passive_data中寻找环境变量(比如A1),自然找不到对应对象,导致报错。
正确实现方法:事后添加被动物种
要在不改动原模型的前提下添加被动物种,需手动计算被动物种在原CCA排序轴上的投影得分,具体代码如下:
library(vegan) data("dune") data("dune.env") # 1. 运行原CCA模型(仅用前27个物种) cca_model <- cca(dune[, 1:27] ~ ., data = dune.env) # 2. 提取被动物种数据 passive_sp <- dune[, 28:30] # 3. 计算被动物种在原CCA约束轴上的投影得分 # 逻辑与vegan内置物种得分计算一致:物种与样方排序轴的协方差 / 样方轴标准差 passive_scores <- cov(passive_sp, cca_model$CCA$u) / apply(cca_model$CCA$u, 2, sd) # 4. 绘制排序图并添加被动物种 plot(cca_model, display = c("sp", "env"), main = "CCA with Passive Species") # 用红色三角标记被动物种位置 points(passive_scores, pch = 2, col = "red", cex = 1.2) # 添加被动物种名称 text(passive_scores, labels = colnames(passive_sp), col = "red", pos = 3)
可选方案:建模时直接指定被动物种
如果允许在建模阶段就设定补充物种,可使用Condition()函数一次性完成:
# 建模时将后3个物种设为补充(被动)变量 cca_model_with_passive <- cca(dune ~ ., data = dune.env, Condition = dune[,28:30]) # 绘图时指定显示补充变量(默认蓝色空心点) plot(cca_model_with_passive, display = c("sp", "cn", "env"))
内容的提问来源于stack exchange,提问作者Chloe Payne
相关产品推荐
相关产品推荐

