如何用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
相关产品推荐
相关产品推荐

