[R-sig-dyn-mod] iterative procedure vs deSolve
Daniel Kaschek
daniel.kaschek at physik.uni-freiburg.de
Thu Mar 17 10:24:54 CET 2016
Dear Paula,
I did not really understand what you mean by "iterative procedure" in
Excel. You write that it is based on the analytical solution of the ODE:
Cgills=Cgills_ini*exp(-(k01+k12)*t)+(Cu*k01+Crest*k21*wrest/wgills)/(k10+k12)*(1-exp(-(k10+k12)*t))
Crest=Crest_ini*exp(-k21*t)+Cgills*k12*wgills/wrest/k21*(1-exp(-k21*t))
Have you checked the solution? You could use your expressions above and
evaluate them at your time points with the parameter values and compare
the result with the output from ode(). If they do not coincide, either
your analytical solution is wrong or you misspecified the ODE.
Cheers,
Daniel
On Mi, Mär 16, 2016 at 7:59 , Paula Sanchez Marin
<paulasanchez at uvigo.es> wrote:
> Hello,
>
> While trying to fit some experimental data to a pharmacokinetic model
> I have observed that the results of the model predicted by deSolve
> are not the same as those resulting from plotting of the solved
> equations using an iterative procedure.
> I would like to know why do the two methods give different results
> and which one is the correct one.
>
> Here it goes my example:
> A contaminant (Cu) enter an organism by compartment 1 "gills" and
> from there it can be transferred to compartment 2 "rest".
> The contaminant can only be eliminated from compartment 1 to the
> environment.
> The parameters (transfer coefficients) are: k01, k10, k12 and k21.
> I introduced the concentration or dilution factors when Cu is
> transfered from 1 to 2 and viceversa by using the ratios between the
> weight of the gills (wgills) and the weight of the rest (wrest).
>
> The differential equations describing changes in concentration in
> both compartments with time are:
> dCgills/dt = k01*Cu+k21*wrest/wgills*Crest-(k10+k12)*Cgills
> dCrest/dt=k12*wgills/wrest*Cgills-k21*Crest
>
> This is the script I used for solving the differential equations in R:
>
> #Constants
> Cu=0.03
> wrest=0.18
> wgills=0.015
> #Model
> mod<-function(t,y,parms){
> with(as.list(c(parms,y)), {
> dCgills<-k01*Cu+k21*wrest/wgills*Crest-(k10+k12)*Cgills
> dCrest<-k12*wgills/wrest*Cgills-k21*Crest
> list(c(dCgills,dCrest))
> })
> }
> #Parameters
> parms=c(k10=0.211,k12=0.234,k01=1196,k21=0.073)
> #Initial conditions
> X0<-c(Cgills=5.771,Crest=5.905)
> #Output
> out<-as.data.frame(lsoda(y=X0,times=0:100,func=mod,parms))
> write.csv2(out,"out.csv")
>
> I used the same Constants (Cu, wrest and wgills), and the same
> Parameters and Initial conditions and calculated in excel (allowing
> iterations) the results using the equations below (the solution to
> the differential equations):
> Cgills=Cgills_ini*exp(-(k01+k12)*t)+(Cu*k01+Crest*k21*wrest/wgills)/(k10+k12)*(1-exp(-(k10+k12)*t))
> Crest=Crest_ini*exp(-k21*t)+Cgills*k12*wgills/wrest/k21*(1-exp(-k21*t))
>
>
> Here are the results (for the first 10 hours) from R:
>
> time Cgills Crest
> 1 0 5.77100 5.905000
> 2 1 36.80185 5.914667
> 3 2 56.88706 6.394786
> 4 3 70.21069 7.149393
> 5 4 79.34640 8.058456
> 6 5 85.87763 9.048616
> 7 6 90.77894 10.075197
> 8 7 94.65042 11.111150
> 9 8 97.86195 12.140248
> 10 9 100.64178 13.152906
> 11 10 103.13106 14.143612
>
> And from the iterative procedure in excel:
> t Cgills Crest
> 0 5,771 5,905
> 1 37,0318579 6,18568653
> 2 58,2609877 7,21694678
> 3 73,4040942 8,60007128
> 4 84,5860141 10,1314063
> 5 93,0882873 11,7033524
> 6 99,7407581 13,260262
> 7 105,102356 14,7754342
> 8 109,556482 16,2380253
> 9 113,367627 17,6454062
> 10 116,718031 18,998768
>
>
> And here the plot:
>
>
> Why do the curves differ?
>
> Thank you very much for your guindance.
>
> _______________________________________________
> R-sig-dynamic-models mailing list
> R-sig-dynamic-models at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-dynamic-models
More information about the R-sig-dynamic-models
mailing list