You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:06:02