Re: [R] Michaelis-menten equation

From: Peter Dalgaard <p.dalgaard_at_biostat.ku.dk>
Date: Wed 20 Jul 2005 - 04:08:40 EST

Peter Dalgaard <p.dalgaard@biostat.ku.dk> writes:

> "Chun-Ying Lee" <u9370004@cc.kmu.edu.tw> writes:
>
> > Dear R users:
> > I encountered difficulties in michaelis-menten equation. I found
> > that when I use right model definiens, I got wrong Km vlaue,
> > and I got right Km value when i use wrong model definiens.
> > The value of Vd and Vmax are correct in these two models.
>
> How do you know what the correct value is? Are you sure that the other
> values are right?
>
> I'm a bit rusty on MM, but are you sure your "right" model is right?
> Try doing a dimensional analysis on the ODE. I kind of suspect that
> Vd is entering in the wrong way. Since you're dealing in
> concentrations, should it enter at all (except via the conc. at time
> 0, of course)?
>
> Not knowing the context, I can't be quite sure, but generally, I'd
> expect Vm*Km/(Km+y) to be the reaction rate, so that Vm is the maximum
> rate, attained when y is zero and Km is the conc. at half-maximum
> rate. This doesn't look quit like what you have.

Vm*y/(Km+y) makes OK sense. Vm is what you get for large y - passing from 1st order to 0th order kinetics. However, looking at the data

plot(PKindex)
abline(lm(conc~time,data=PKindex))

> > #-----right model definiens--------
> > PKindex<-data.frame(time=c(0,1,2,4,6,8,10,12,16,20,24),
> > conc=c(8.57,8.30,8.01,7.44,6.88,6.32,5.76,5.20,4.08,2.98,1.89))
> > mm.model <- function(time, y, parms) {
> > dCpdt <- -(parms["Vm"]/parms["Vd"])*y[1]/(parms["Km"]+y[1])
> > list(dCpdt)}
> > Dose<-300
> > modfun <- function(time,Vm,Km,Vd) {
> > out <- lsoda(Dose/Vd,time,mm.model,parms=c(Vm=Vm,Km=Km,Vd=Vd),
> > rtol=1e-8,atol=1e-8)
> > out[,2] }
> > objfun <- function(par) {
> > out <- modfun(PKindex\$time,par[1],par[2],par[3])
> > sum((PKindex\$conc-out)^2) }
> > fit <- optim(c(10,1,80),objfun, method="Nelder-Mead)
> > print(fit\$par)
> > [1] 10.0390733 0.1341544 34.9891829 #--Km=0.1341544,wrong value--
> >
> >
> > #-----wrong model definiens--------
> > #-----Km should not divided by Vd--
> > PKindex<-data.frame(time=c(0,1,2,4,6,8,10,12,16,20,24),
> > conc=c(8.57,8.30,8.01,7.44,6.88,6.32,5.76,5.20,4.08,2.98,1.89))
> > mm.model <- function(time, y, parms) {
> > dCpdt <- -(parms["Vm"]/parms["Vd"])*y[1]/(parms["Km"]/parms["Vd"]+y[1])
> > list(dCpdt)}
> > Dose<-300
> > modfun <- function(time,Vm,Km,Vd) {
> > out <- lsoda(Dose/Vd,time,mm.model,parms=c(Vm=Vm,Km=Km,Vd=Vd),
> > rtol=1e-8,atol=1e-8)
> > out[,2]
> > }
> > objfun <- function(par) {
> > out <- modfun(PKindex\$time,par[1],par[2],par[3])
> > sum((PKindex\$conc-out)^2)}
> > fit <- optim(c(10,1,80),objfun, method="Nelder-Mead)
> > print(fit\$par)
> > [1] 10.038821 4.690267 34.989239 #--Km=4.690267,right value--
> >
> > What did I do wrong, and how to fix it?
> > Any suggestions would be greatly appreciated.
> >
> > ______________________________________________
> > R-help@stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
>
> --
> O__ ---- Peter Dalgaard ุster Farimagsgade 5, Entr.B
> c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K
> (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
> ~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk) FAX: (+45) 35327907
>
> ______________________________________________
> R-help@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
>

```--
O__  ---- Peter Dalgaard             ุster Farimagsgade 5, Entr.B
c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
(*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk)                  FAX: (+45) 35327907

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help