R 当开始值在不同数据框中按类别分开时,如何使用geom_smooth进行非线性回归?

R 当开始值在不同数据框中按类别分开时,如何使用geom_smooth进行非线性回归?,r,ggplot2,parameters,non-linear-regression,nls,R,Ggplot2,Parameters,Non Linear Regression,Nls,我有两个数据框:一个是需要拟合非线性模型的实验数据,另一个是通过nls方法拟合的起始值。实验数据和起始值分为a类和b类。我想使用ggplot2制作一个图表,显示拟合到点并按类别分隔的曲线,但我无法指示每个类别的起始值,它们位于另一个数据帧中 在MWE中,我用两种方式显示数据帧的起始值:1。每列都是一个类别,或2。每一行都是一个类别。(请参见Constants1和Constants2对象)。我认为这个组织与在ggplot中调用这些值相关 library(ggplot2) Category <

我有两个数据框:一个是需要拟合非线性模型的实验数据,另一个是通过
nls
方法拟合的起始值。实验数据和起始值分为a类和b类。我想使用ggplot2制作一个图表,显示拟合到点并按类别分隔的曲线,但我无法指示每个类别的起始值,它们位于另一个数据帧中

在MWE中,我用两种方式显示数据帧的起始值:1。每列都是一个类别,或2。每一行都是一个类别。(请参见
Constants1
Constants2
对象)。我认为这个组织与在ggplot中调用这些值相关

library(ggplot2)

Category <- c("a", "b")
k1 <- c(10, 20)
k2 <- c(0.01, 0.02)

Constants1 <- data.frame(Category, k1, k2)

Constants2 <- data.frame(rbind(k1, k2))
colnames(Constants2) <- Category

x <- seq(0,100,20)
y <- c(0, 2, 3.5, 4.5, 5.5, 6,
       0, 7, 11, 14, 16, 17)

df <- expand.grid(x = x,
                  Category = Category)
df$y <- y

ggplot(data = df,
       aes(x = x,
           y = y)) +
  geom_point(aes(shape = Category)) +
  geom_smooth(aes(linetype = Category),
              formula = y ~ k1*(1-exp((-k2)*x)),
              method.args = list(start = list(k1 = ??, #Help here
                                              k2 = ??)),
              se = FALSE,
              method = "nls")
库(ggplot2)

类别也许这就是你要找的。您可以为起始值的每个组合添加一个,而不是仅使用一个
geom_smooth
。为此,我利用
purrr::pmap
在数据帧上循环使用起始值,创建
geom_平滑
层列表,然后将其添加到ggplot:

库(ggplot2)
图书馆(purrr)
平滑层