【发布时间】:2018-03-29 18:10:39
【问题描述】:
我有一些数据,我想使用 nls 将非线性模型拟合到数据的每个子集,然后使用 ggplot2 将拟合模型叠加到数据点图上。具体来说,模型的形式是
y~V*x/(K+x)
您可能会认出它是 Michaelis-Menten。一种方法是使用 geom_smooth,但如果我使用 geom_smooth,我将无法检索模型拟合的系数。或者,我可以使用 nls 拟合数据,然后绘制使用 geom_smooth 拟合的线,但是我怎么知道 geom_smooth 绘制的曲线与我的 nls 拟合给出的曲线相同?我不能将 nls fit 中的系数传递给 geom_smooth 并告诉它使用它们,除非我可以让 geom_smooth 只使用数据的一个子集,然后我可以指定起始参数以便它可以工作,但是......每个我尝试过的时候得到如下错误读数:
Aesthetics must be either length 1 or the same as the data (8): x, y, colour
这是我一直在使用的一些示例数据:
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)
在我的图中,浓度为 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)
其中 models[[]] 是 nls 返回的模型参数列表。
关于如何在 geom_smooth 中对数据框进行子集化以便我可以使用我的 nls 拟合的起始参数单独绘制曲线的任何想法?
【问题讨论】:
-
不相关,但将
plot、file作为变量名不是一个好主意(这些名称存在函数)。 -
另外:查看生成
models的代码会有所帮助。 -
我还注意到您的示例数据变量与代码不匹配:e.g. drug、Compound、drugNames 都使用了。
-
我认为这些帖子会对您有所帮助:Enzyme kinetics with R; Plotting two enzyme plots with ggplot