使用drm拟合Gompertz方程遇parse错误,求解决方案
解决Gompertz曲线拟合错误及模型评估方案
错误原因
你碰到的Error in parse(text = bodyStr2)错误,主要是drc包部分版本中预设的G.4模型存在字符串解析bug,导致代码执行时语法解析失败。
修正后的拟合代码
方案一:自定义Gompertz模型函数
绕过预设的G.4,直接定义模型函数避免解析问题:
library(drc) # 定义4参数Gompertz模型:Asym(渐近值), b(速率), c(下限), d(拐点) gompertz_fct <- function(fixed = c(NA, NA, NA, NA), names = c("Asym", "b", "c", "d")) { function(x, parm) { parm[3] + (parm[1] - parm[3]) * exp(-exp(parm[2] * (x - parm[4]))) } } # 拟合模型,初始值根据数据特征设置 ajuste <- drm(Y ~ X, data = Gomp_D1, fct = gompertz_fct(), start = c(Asym = max(Gomp_D1$Y), b = 0.1, c = min(Gomp_D1$Y), d = median(Gomp_D1$X)))
方案二:升级drc包至最新版本
如果想用预设的G.4模型,先更新包修复版本bug:
install.packages("drc") library(drc) # 重新拟合,注意G.4的参数顺序与初始值对应 ajuste <- drm(Y ~ X, data = Gomp_D1, fct = G.4(), start = c(Asym = max(Gomp_D1$Y), b = 0.1, c = min(Gomp_D1$Y), d = median(Gomp_D1$X)))
绘制Gompertz拟合曲线
拟合完成后,可视化观测数据与拟合曲线:
plot(ajuste, type = "all", main = "树木生长Gompertz拟合曲线", xlab = "生长指标(X)", ylab = "生长量(Y)", col = "darkblue", pch = 16)
模型预测精度评估
通过以下指标评估模型拟合效果:
- R²:反映模型对数据变异的解释能力
- RMSE:衡量预测值与观测值的平均偏差程度
- MAE:衡量预测误差的绝对值均值
# 生成预测值 pred_vals <- predict(ajuste, newdata = Gomp_D1) # 计算评估指标 r_sq <- cor(Gomp_D1$Y, pred_vals)^2 rmse <- sqrt(mean((Gomp_D1$Y - pred_vals)^2)) mae <- mean(abs(Gomp_D1$Y - pred_vals)) # 输出结果 cat("模型评估结果:\n") cat(sprintf("R² = %.4f\n", r_sq)) cat(sprintf("RMSE = %.4f\n", rmse)) cat(sprintf("MAE = %.4f\n", mae))
关键注意点
- 初始值
start的设置直接影响非线性拟合的成功率:Asym设为Y的最大值,对应生长的渐近上限c设为Y的最小值,对应生长的初始下限d设为X的中位数,对应生长拐点的大致位置b设为0.1左右的正数,可根据数据趋势微调
- 若数据存在异常值,建议先通过
boxplot(Gomp_D1$Y)排查并处理,避免干扰拟合结果
内容的提问来源于stack exchange,提问作者Martina
相关产品推荐
相关产品推荐

