如何解决如何在 geom_smooth()来自 ggplot2 包中为多重非线性回归分配不同的初始值?
我有 2 个数据集,一个用于 A 组,另一个用于 B 组。我想将数据直观地拟合到 y=1-exp(-kx)
模型中。为此,我使用了 ggplot2
包和 geom_smooth()
函数。在 geom_smooth()
函数的参数中,必须指明非线性拟合的初始值。由于我有 2 组数据,我想为每组分配不同的初始值。在这种情况下,对于 A 组,k 的初始值将是 0.45,而对于 B 组,它将是 0.015。但是,我不知道该怎么做。有人可以帮我吗?
library(ggplot2)
Group <- c("A","B")
x <- 0:10
y <- c(0,0.4,0.6,0.8,0.9,0.95,0.97,0.98,0.99,1,0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1)
start_values <- c(0.45,0.015)
df <- expand.grid(x = x,Group = Group)
df$y <- y
ggplot(data = df,aes(x = x,y = y)) +
geom_point(aes(shape = Group,color = Group)) +
geom_smooth(aes(color = Group),formula = y ~ 1-exp(-k*x),method = "nls",method.args = list(k = start_values),se = FALSE)
解决方法
据我所知,您无法使用 geom_smooth
轻松地为每个组传递不同的参数。一种选择是为每个组添加单独的图层
ggplot(data = df,aes(x = x,y = y)) +
geom_point(aes(shape = Group,color = Group)) +
geom_smooth(aes(color = Group),formula = y ~ 1-exp(-k*x),method = "nls",method.args = list(start = c(k=start_values[1])),se = FALSE,data = function(x) subset(x,Group=="A")) +
geom_smooth(aes(color = Group),method.args = list(start = c(k=start_values[2])),Group=="B"))
and this is my URLs
您也可以使用 mapply
为您创建它们,而不是为每个组手动添加图层
ggplot(data = df,color = Group)) +
mapply(function(start,group) {
geom_smooth(aes(color = Group),method.args = list(start = c(k=start)),Group==group))
},start_values,c("A","B"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。