r - 使用 ggplot2 拟合 nls - 类型为 'symbol' 的错误对象不是可子集化的

标签 r ggplot2 curve-fitting data-fitting nls

我正在尝试使用以下数据对 ggplot 进行 nls 拟合: df <- data.frame(t = 0:30, m = c(125.000000, 100.248858, 70.000000, 83.470795, 100.000000, 65.907870, 66.533715, 53.588087, 61.332351, 43.927435, 40.295448, 44.713459, 32.533143, 36.640336, 40.154711, 23.080295, 39.867928, 22.849786, 35.014645, 17.977267, 21.159180, 27.998273, 21.885735, 14.273962, 13.665969, 11.816435, 25.189016, 8.195644, 17.191337, 24.283354, 17.722776)

我到目前为止(有点简化)的代码是

ggplot(df, aes(x = t, y = m)) +
geom_point() +
geom_smooth(method = "nls", formula=log(y)~x)

但是我得到以下错误

Error in cll[[1L]] : object of type 'symbol' is not subsettable

我浏览了stackoverflow,也发现了类似的问题,但是一直没能解决问题。我真的很想在不变换轴的情况下绘制数据。

非常感谢任何帮助。

最佳答案

对于 nls,您必须更仔细地指定参数。此外,您可能不想使用 log(y),因为那样会绘制对数而不是 y。我的猜测是您想使用类似 y ~ exp(a + b * x) 的东西。请参阅下面的示例。

ggplot(df, aes(x = t, y = m))+
  geom_point()+
  geom_smooth(method = "nls", formula = y  ~ exp(a + b * x), start=list(a=0, b=1), se=FALSE)

您也可以使用 glm 代替 nls。例如,以下内容为您提供了相同的解决方案。

ggplot(df, aes(x = t, y = m))+
  geom_point()+
  geom_smooth(method = "glm", formula = y  ~ x, family=gaussian(link = "log"), se=FALSE)

关于r - 使用 ggplot2 拟合 nls - 类型为 'symbol' 的错误对象不是可子集化的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27315056/

相关文章:

R: tmap 图例格式化

r - 更改 x 轴会中断 ggplot2

r - 如何将 geom_box 中的填充 alpha 设置为因子中的观察数

r - 在 nlme 中拟合数据的技巧?

全局环境中的递归评估

r - 更新使用 install_hugo() 安装的 Hugo academic 主题的最佳实践

python - numpy.polyfit 的错误是什么?

algorithm - 将两条线拟合到一组 2D 点

css - 通过选项卡使侧栏中的输入持久化

r - 如何组合 aes() 和 aes_string() 选项