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

如何用ggplot2的geom_smooth结合自启动函数绘制nls非线性回归曲线

如何用geom_smooth()绘制多条nls拟合曲线(在函数调用中获取模型参数)

你尝试用ggplot2结合nls和自启动函数绘制非线性回归曲线时出现报错,核心问题是geom_smooth调用nls时,公式需要匹配内部的x/y映射,同时要正确传递自启动函数的参数逻辑。

正确实现代码

先保留你的原始数据:

df <- structure(list(iv = c(1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 
2, 3, 4, 5, 6), dv = c(9.2, 8.5, 13.5, 15.8, 18.3, 17.7, 8.7, 
10.8, 14.3, 15, 18, 15.3, 8.7, 14.6, 14.8, 16.8, 15.8, 15.8)), row.names = c(NA, 
-18L), class = c("tbl_df", "tbl", "data.frame"))

先完成nls拟合(验证参数):

nls_asymp <- nls(
  dv ~ SSasympOrig(iv, Asym, lrc),
  data = df
)

然后用geom_smooth绘制曲线的正确写法:

ggplot(data = df, aes(x = iv, y = dv)) +
  geom_point() +  # 加上原始数据点更直观
  geom_smooth(
    method = "nls",
    se = FALSE,
    formula = y ~ SSasympOrig(x, Asym, lrc),  # 用y/x对应aes里的映射,而非实际变量名
    # 自启动函数SSasympOrig会自动生成初始值,也可以手动指定已拟合的参数:
    # start = list(Asym = coef(nls_asymp)[["Asym"]], lrc = coef(nls_asymp)[["lrc"]])
  )

报错原因解释

  • 第一种无formula的写法:geom_smooth默认使用线性公式y ~ x,和nls的非线性拟合逻辑不兼容,导致无法解析公式结构。
  • 第二种指定formula但用实际变量名的写法:geom_smooth内部会将aes中的x/y作为拟合的变量名,直接写dv ~ SSasympOrig(iv, Asym, lrc)会让nls找不到对应变量,同时参数初始化逻辑也会出错。

这样就能得到和drm方法类似的拟合曲线。

内容的提问来源于stack exchange,提问作者myfatson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:55:14