nls()michaelis menten负面参数

时间:2017-03-13 21:04:01

标签: r nls non-linear-regression

我试图将michaelis menten方程拟合到数据集以确定消失率以及数据允许时的IC50(Km)。除了浓度为0的第一个点,我正在变得合适,但是,我得到Km的负值,这是不正确的。我使用以下代码。

x <- c(0, 2.5, 5.0, 10.0, 25.0)
y <- c(4.91, 1.32, 1.18, 1.12, 1.09)

#########################Fit General Michaelis Menten Equation########################################################          


model.mm <- nls(y ~ (Vmax*x/(Km+x)), data = data.frame(x,y), 
                 start = list(Km=max(y)/2, Vmax = max(y)))
print(summary(model.mm))

#plot it
plot(y~x, type="p", lwd=2,
     xlab="Lopinavir Concentrations (uM)", ylab="Efflux Ratio")
title("Lopinavir Transport in MDCK-MDR1 Cells")
lines(fitted(model.mm)~x, col="red")

enter image description here

非常感谢任何改进拟合和参数估计的建议。

感谢, Krina

2 个答案:

答案 0 :(得分:0)

xlab的Michealis Menten双曲线=基质浓度和ylab =速度通常看起来像一个上升的双曲线到最大值。随着基板浓度的增加,您测量的参数看起来像指数衰减。我不确定Michealis Menten方程在这里运作得如此之好。你也不应该使用lines函数。它没有给你一个曲线。你应该使用曲线函数。

  

x < - c(0,2.5,5.0,10.0,25.0)   y&lt; -c(4.91,1.32,1.18,1.12,1.09)   mm&lt; - data.frame(x,y)

我认为你应该在将数据帧调用到函数之前制作数据帧。

  

model.mm&lt; - nls(y~Vmax * x /(Km + x),data = mm,start = list(Km = max(mm $ y)/ 2,Vmax = max(mm $ y) ))

     

图(y~x,type =“p”,lwd = 2,xlab =“Lopinavir浓度(uM)”,ylab =“流出比”,pch = 16,main =“Lopinavir在MDCK-MDR1细胞中的转运“)

     

摘要(model.mm)

公式:y~Vmax * x /(Km + x)

参数:      估计标准。误差t值Pr(&gt; | t |) Km -0.4772 6.6246 -0.072 0.947 Vmax 1.0678 2.1382 0.499 0.652

剩余标准误差:3自由度为2.835

收敛的迭代次数:4 实现收敛容差:6.634e-06

现在我认为曲线函数非常自我解释:

  

?曲线

     

曲线(x * 1.0678 /(x + -0.4772),col =“red”,lwd = 2,add = TRUE)

enter image description here

  

fx&lt; - function(x){x * 1.0678 /(x + -0.4772)}

     

范围(x)的   1 0 25

我们可以整合这个Michealis-Menten FUnction并计算曲线下的面积:

  

需要(pracma)

     

整合(fx,lower = 0,upper = 25)    积分错误(fx,lower = 0,upper = 25):     积分可能是不同的

这种分歧是因为你的情节看起来很像y =(1 / x),这是不同的。

如果你将x推离零点,y趋于无穷大,我们可以得到有限的答案。

  

整合(fx,lower = 0.5,upper = 25)   29.71809绝对错误&lt; 0.00069

但由于分歧原因,这种积分是值得怀疑的。

您可以使用梯形近似来估计散点图下的面积:

  

trapz(mm $ x,mm $ y)   1 33.2375

注意:我尝试将指数函数拟合到您的绘图中,但这不起作用。缺少大部分点时曲线下降太快。

我想我弄清楚了你的功能有什么问题。

类型:y =(x * v)/(x + K)

进入https://www.desmos.com/calculator

看看当你做K为负和K为正时会发生什么,当你做K和v为负时等等。

Adjusting the sliders

答案 1 :(得分:0)

感谢您的帮助,非常感谢。

我能够通过使用山脉方程来解决这个问题。

fo <- y ~ (Vmax*x^hill/((VC50^hill) + (x^hill)))
st <- c(Vmax=0.5, hill=1, VC50=0.3)

model.hill <- nls(fo, data = data.frame(x,y), start = st)
print(summary(model.hill))
co <- coef(model.hill)

plot(y~x, type="p", lwd=2,
     xlab="Lopinavir Concentrations (uM)", ylab="Efflux Ratio")
title("Lopinavir Transport in MDCK-MDR1 Cells")
lines(fitted(model.hill)~x, col="red")