Malgorzata Wieteska
2017-Feb-21 11:03 UTC
[R] optimisation - Error in checkFunc(Func2, times, y, rho) : The number of derivatives returned by func() (22) must equal the length of the initial conditions vector (2)
Hello,
I get an error message:Error in checkFunc(Func2, times, y, rho) :?? The number
of derivatives returned by func() (22) must equal the length of the initial
conditions vector (2)
I try to optimise system of differential equations with 2 extra variables
derived from the data.frame.
I didn't manage to install XLConnect package, so I don't know if this is
the source of the problem.
Loading required package: XLConnectWarning message:In library(package, lib.loc =
lib.loc, character.only = TRUE, logical.return = TRUE, ?:? there is no package
called ?XLConnect?
I have missing data, so time frame is limited. I haven't got values for
solution of the first equation, but I hope that it isn't problem, I've
got the same message when putting random numbers as x values.
The code is as follow:time=c(16,17,18,19,20,21,22,23,24,25,26)
#x=c(20.2,18.9,16.5)y=c(7.63,9.22,4.86,4.78,0.38,6.13,3.91,38.41,2.58,36.95,1.73)
cE=c(15.05,38.01,41.09,31.41,3.54,15.92,24.01,25.29,14.82,43.93,2.45)cP=c(0.47,0.43,4.8,1.07,0.38,0.3,0.14,0.29,0.9,2.51,1.94)
#df<-data.frame(time,y,cE,cP)#dfrequire(FME)require(XLConnect)
#Initial values of the parametersparms=c(k1=500, k2=4500, k3=200,k4=2.42,
k5=0.26,k6=12.2,k7=0.004,k8=55,? ? ? ? ? ?k9=24,k10=8)
#definition of the parameters functionderivs<-function(time,y,pars){?
with(as.list(c(pars,y)),{? ?
cE=c(15.05,38.01,41.09,31.41,3.54,15.92,24.01,25.29,14.82,43.93,2.45)? ?
cP=c(0.47,0.43,4.8,1.07,0.38,0.3,0.14,0.29,0.9,2.51,1.94)? ??? ?
dx=(k1+(k2*cE^k10)/(k3^k10+cE^k10))/(1+cP/k6)-k4*((1+k5*cP)/(1+k7*cE))*x;
#dRP_LH/dt? ? dy=(1/k8)*k4*((1+k5*cP)/(1+k7*cE))*x-k9*y #dL/dt? ?
list(c(dx,dy))? })}initial<-c(x=x[1],y=y[1])
model_cost<-function(pars){?
out<-ode(y=initial,time=time,func=derivs,parms=pars)?
cost<-modCost(model=out,obs=df,x="time")? return(cost)?
model_cost(parms)$model# model fitting?
model_fit<-modFit(f=model_cost,p=parms)}model_cost(parms)
Thank you in advance for any help.
PS, I've tried to put cE and cP as initial conditions or/and as parameters,
but it didn't solve the problem.
[[alternative HTML version deleted]]
Jim Lemon
2017-Feb-21 21:56 UTC
[R] optimisation - Error in checkFunc(Func2, times, y, rho) : The number of derivatives returned by func() (22) must equal the length of the initial conditions vector (2)
Hi Malgorzata,
Did you try to _install_ rather than just _load_ the XLConnect package?
install.packages("XLConnect")
Sad to say, your code:
time=c(16,17,18,19,20,21,22,23,24,25,26)
#x=c(20.2,18.9,16.5)
y=c(7.63,9.22,4.86,4.78,0.38,6.13,3.91,38.41,2.58,36.95,1.73)
cE=c(15.05,38.01,41.09,31.41,3.54,15.92,24.01,25.29,14.82,43.93,2.45)
cP=c(0.47,0.43,4.8,1.07,0.38,0.3,0.14,0.29,0.9,2.51,1.94)
#df<-data.frame(time,y,cE,cP)
#dfrequire(FME)
### this will fail unless XLConnect has been installed
require(XLConnect)
#Initial values of the parameters
parms=c(k1=500, k2=4500, k3=200,k4=2.42, k5=0.26,k6=12.2,k7=0.004,
k8=55,k9=24,k10=8)
#definition of the parameters function
derivs<-function(time,y,pars){
with(as.list(c(pars,y)),{
cE=c(15.05,38.01,41.09,31.41,3.54,15.92,24.01,25.29,14.82,43.93,2.45)
cP=c(0.47,0.43,4.8,1.07,0.38,0.3,0.14,0.29,0.9,2.51,1.94)
dx=(k1+(k2*cE^k10)/(k3^k10+cE^k10))/(1+cP/k6)-
k4*((1+k5*cP)/(1+k7*cE))*x;
#dRP_LH/dt
dy=(1/k8)*k4*((1+k5*cP)/(1+k7*cE))*x-k9*y
#dL/dt
list(c(dx,dy))
})
}
initial<-c(x=x[1],y=y[1])
model_cost<-function(pars){
out<-ode(y=initial,time=time,func=derivs,parms=pars)
cost<-modCost(model=out,obs=df,x="time")
return(cost)
} ### you seem to be missing a closing brace here
model_cost(parms)$model
# model fitting
model_fit<-modFit(f=model_cost,p=parms)
} ### maybe this is the missing closing brace
model_cost(parms)
is pretty messy with several lines commented out that may be
necessary, and has a number of possible errors. I have pointed out a
few (see ### comments). If the problem is the missing XLConnect
package, perhaps installing it will produce some meaningful error
messages.
Jim
On Tue, Feb 21, 2017 at 10:03 PM, Malgorzata Wieteska via R-help
<r-help at r-project.org> wrote:> Hello,
> I get an error message:Error in checkFunc(Func2, times, y, rho) : The
number of derivatives returned by func() (22) must equal the length of the
initial conditions vector (2)
> I try to optimise system of differential equations with 2 extra variables
derived from the data.frame.
> I didn't manage to install XLConnect package, so I don't know if
this is the source of the problem.
> Loading required package: XLConnectWarning message:In library(package,
lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, : there is no
package called ?XLConnect?
> I have missing data, so time frame is limited. I haven't got values for
solution of the first equation, but I hope that it isn't problem, I've
got the same message when putting random numbers as x values.
Jim Lemon
2017-Feb-22 22:40 UTC
[R] optimisation - Error in checkFunc(Func2, times, y, rho) : The number of derivatives returned by func() (22) must equal the length of the initial conditions vector (2)
I'm not really familiar with what you are doing. when I try to debug something like this, I run each step separately to determine where the error is. For example, if I clean up the code a bit and run the derivs function: derivs(time,y,parms) [[1]] [1] 429.709540 438.844035 281.741953 404.175692 435.341449 447.532442 [7] 448.103560 443.722972 419.132716 345.992428 363.259812 -182.179223 [13] -220.477447 -115.238330 -113.710739 -8.218996 -146.384226 -92.999563 [19] -921.027854 -61.074252 -885.550697 -40.281082 Warning messages: 1: In k4 * ((1 + k5 * cP)/(1 + k7 * cE)) * x : longer object length is not a multiple of shorter object length 2: In (1/k8) * k4 * ((1 + k5 * cP)/(1 + k7 * cE)) * x : longer object length is not a multiple of shorter object length Obviously there is a problem with the length of "x" as it is recycled within the function. Also, your cE and cP values are not causing a problem as the function runs and returns what may be reasonable values. As I don't have the deSolve package installed (and I have my own work to do) I can only suggest trying a stepwise debugging process. Jim On Wed, Feb 22, 2017 at 8:58 PM, Malgorzata Wieteska <g.wieteska at yahoo.ie> wrote:> Thank you Jim, > > I've installed XLConnect using Tools tab (install.packages option didn't > work for some reason -I've tried before) and fixed the bracket. However, I > still get the same error message. I've checked what cause this error and is > caused by external data (cE and cP) fed into equations in derivs function. > > Do you have any suggestion how to input those values at corresponding time > points into equations to make ode in the model_cost to integrate? > > Malgosia > > > On Tuesday, 21 February 2017, 22:03:10, Jim Lemon <drjimlemon at gmail.com> > wrote: > > > Hi Malgorzata, > Did you try to _install_ rather than just _load_ the XLConnect package? > > install.packages("XLConnect") > > Sad to say, your code: > > time=c(16,17,18,19,20,21,22,23,24,25,26) > #x=c(20.2,18.9,16.5) > y=c(7.63,9.22,4.86,4.78,0.38,6.13,3.91,38.41,2.58,36.95,1.73) > cE=c(15.05,38.01,41.09,31.41,3.54,15.92,24.01,25.29,14.82,43.93,2.45) > cP=c(0.47,0.43,4.8,1.07,0.38,0.3,0.14,0.29,0.9,2.51,1.94) > #df<-data.frame(time,y,cE,cP) > #dfrequire(FME) > ### this will fail unless XLConnect has been installed > require(XLConnect) > #Initial values of the parameters > parms=c(k1=500, k2=4500, k3=200,k4=2.42, k5=0.26,k6=12.2,k7=0.004, > k8=55,k9=24,k10=8) > #definition of the parameters function > derivs<-function(time,y,pars){ > with(as.list(c(pars,y)),{ > cE=c(15.05,38.01,41.09,31.41,3.54,15.92,24.01,25.29,14.82,43.93,2.45) > cP=c(0.47,0.43,4.8,1.07,0.38,0.3,0.14,0.29,0.9,2.51,1.94) > dx=(k1+(k2*cE^k10)/(k3^k10+cE^k10))/(1+cP/k6)- > k4*((1+k5*cP)/(1+k7*cE))*x; > #dRP_LH/dt > dy=(1/k8)*k4*((1+k5*cP)/(1+k7*cE))*x-k9*y > #dL/dt > list(c(dx,dy)) > }) > } > initial<-c(x=x[1],y=y[1]) > model_cost<-function(pars){ > out<-ode(y=initial,time=time,func=derivs,parms=pars) > cost<-modCost(model=out,obs=df,x="time") > return(cost) > } ### you seem to be missing a closing brace here > model_cost(parms)$model > # model fitting > model_fit<-modFit(f=model_cost,p=parms) > } ### maybe this is the missing closing brace > model_cost(parms) > > is pretty messy with several lines commented out that may be > necessary, and has a number of possible errors. I have pointed out a > few (see ### comments). If the problem is the missing XLConnect > package, perhaps installing it will produce some meaningful error > messages. > > Jim > > On Tue, Feb 21, 2017 at 10:03 PM, Malgorzata Wieteska via R-help > <r-help at r-project.org> wrote: >> Hello, >> I get an error message:Error in checkFunc(Func2, times, y, rho) : The >> number of derivatives returned by func() (22) must equal the length of the >> initial conditions vector (2) >> I try to optimise system of differential equations with 2 extra variables >> derived from the data.frame. >> I didn't manage to install XLConnect package, so I don't know if this is >> the source of the problem. >> Loading required package: XLConnectWarning message:In library(package, >> lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, : there >> is no package called ?XLConnect? >> I have missing data, so time frame is limited. I haven't got values for >> solution of the first equation, but I hope that it isn't problem, I've got >> the same message when putting random numbers as x values. > >