如何在ggplot2中绘制frair包输出的mle2拟合功能反应曲线
你遇到的predict报错是因为frair包返回的frfit类对象没有公开的predict方法,需要手动提取系数计算预测值后再导入ggplot2,具体操作步骤如下:
步骤1:加载所需包
library(frair) library(ggplot2)
步骤2:计算主拟合曲线的预测值
先构造连续的密度序列(让拟合线更平滑),再用罗杰斯II型响应函数计算对应预测值:
# 构造连续的密度序列,范围覆盖原始数据的密度区间 new_dat <- data.frame(density = seq(min(FRAM18$density), max(FRAM18$density), length.out = 200)) # 提取拟合得到的系数 fit_coef <- coef(FRAM18.fitII) # 计算每个密度对应的预测被捕食数量 new_dat$pred_eaten <- rogersII( N = new_dat$density, a = fit_coef["a"], h = fit_coef["h"], T = fit_coef["T"] )
步骤3:基于bootstrap结果计算95%置信区间(可选)
如果需要添加置信区间,用bootstrap得到的系数批量计算预测值,再取分位数得到置信区间上下限:
# 提取bootstrap得到的所有系数 boot_coef <- as.data.frame(FRAM18.bootII$bootcoefs) # 批量计算每组bootstrap系数对应的预测值 boot_pred <- apply(boot_coef, 1, function(params) { rogersII( N = new_dat$density, a = params["a"], h = params["h"], T = params["T"] ) }) # 计算每个密度对应的95%置信区间上下限,移除bootstrap失败的无效值 new_dat$ci_lwr <- apply(boot_pred, 1, quantile, 0.025, na.rm = TRUE) new_dat$ci_upr <- apply(boot_pred, 1, quantile, 0.975, na.rm = TRUE)
步骤4:ggplot2可视化
ggplot() + # 原始观测点 geom_point(data = FRAM18, aes(x = density, y = eaten), color = "skyblue2", size = 2) + # 拟合主曲线 geom_line(data = new_dat, aes(x = density, y = pred_eaten), color = "skyblue3", linewidth = 1) + # 95%置信区间(不需要可以删除这一行) geom_ribbon(data = new_dat, aes(x = density, ymin = ci_lwr, ymax = ci_upr), fill = "skyblue2", alpha = 0.3) + # 坐标轴与主题调整 labs(x = "猎物密度", y = "被捕食数量") + xlim(c(0, 300)) + theme_bw()
内容的提问来源于stack exchange,提问作者N.Shepp
相关产品推荐
相关产品推荐

