我有一些数据,我想使用nls对数据的每个子集拟合非线性模型,然后使用ggplot2将拟合的模型叠加到数据点的图形上。具体来说,模型的形式为
y~V*x/(K+x)
你可能会认识它,它被称为Michaelis-Menten。一种方法是使用geom_smooth,但如果我使用geom_smooth,我就没有办法检索模型拟合的系数。或者,我可以使用nls拟合数据,然后使用geom_smooth绘制拟合线,但是我怎么知道geom_smooth绘制的曲线与我的nls拟合给出的曲线相同?除非我可以让geom_smooth仅使用数据的子集,然后指定起始参数,否则我无法将nls拟合的系数传递给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
作为变量名称并不是明智的选择(这些名称已经被函数占用)。 - neilfws