小编Hap*_*Dog的帖子

如何绘制适合 ggplot2 的 nls 模型的输出

我有一些数据,我想使用 nls 将非线性模型拟合到数据的每个子集,然后使用 ggplot2 将拟合模型叠加到数据点图上。具体来说,模型的形式是

y~V*x/(K+x)
Run Code Online (Sandbox Code Playgroud)

您可以将其识别为 Michaelis-Menten。一种方法是使用 geom_smooth,但如果我使用 geom_smooth,我将无法检索模型拟合的系数。或者,我可以使用 nls 拟合数据,然后使用 geom_smooth 绘制拟合线,但是我怎么知道 geom_smooth 绘制的曲线与我的 nls 拟合给出的曲线相同?我不能将我的 nls 拟合系数传递给 geom_smooth 并告诉它使用它们,除非我可以让 geom_smooth 只使用数据的一个子集,然后我可以指定起始参数,这样就可以了,但是......每个有一次我试过,读到的错误如下:

Aesthetics must be either length 1 or the same as the data (8): x, y, colour
Run Code Online (Sandbox Code Playgroud)

以下是我一直在使用的一些示例数据:

Concentration <- c(500.0,250.0,100.0,62.5,50.0,25.0,12.5,5.0,
                   500.0,250.0,100.0,62.5,50.0,25.0,12.5,5.0)

drug <- c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2)

rate <- c(1.889220,1.426500,0.864720,0.662210,0.564340,0.343140,0.181120,0.077170,
          3.995055,3.011800,1.824505,1.397237,1.190078,0.723637,0.381865,0.162771)

file<-data.frame(Concentration,drug,rate)
Run Code Online (Sandbox Code Playgroud)

在我的图中,浓度为 x,速率为 y;药物将是颜色变量。如果我编写以下内容,则会出现该错误:

plot <- ggplot(file,aes(x=file[,1],y=file[,3],color=Compound))+geom_point()

plot<-plot+geom_smooth(data=subset(file,file[,2]==drugNames[i]),method.args=list(formula=y~Vmax*x/(Km+x),start=list(Vmax=coef(models[[i]])[1],Km=coef(models[[i]])[2])),se=FALSE,size=0.5)
Run Code Online (Sandbox Code Playgroud)

其中models[[]] 是nls 返回的模型参数列表。

关于如何在 geom_smooth 中对数据框进行子集化以便我可以使用 nls 拟合中的起始参数单独绘制曲线的任何想法?

r ggplot2

2
推荐指数
1
解决办法
4950
查看次数

标签 统计

ggplot2 ×1

r ×1