[R-sig-dyn-mod] Error in r[1] <- : replacement has length zero and Error in chol.default(object$hessian) : the leading minor of order 1 is not positive definite
Malgorzata Wieteska
g.wieteska at yahoo.ie
Thu Mar 2 11:48:20 CET 2017
Hello,
I would like to ask for a help. I'm quite new to R, I try to find initial conditions while optimising system of differential equations. Unfortunately I get an error messages: Error in r[1] <- : replacement has length zero and Error in chol.default(object$hessian) : the leading minor of order 1 is not positive definite
Thanks in advance for any help.
My code:
library(ggplot2)library(reshape2)library(deSolve)library(minpack.lm)time<-seq(0, 5, by =1)F=c(0.408,0.226,0.126,0.224,0.123,0.162)signal<-as.data.frame(list(time=time,FSH))input<-approxfun(signal,rule=2)cB=c(0,9491.0179,6779.799,1186.7998,0,0)
df<-data.frame(time,F,cSeF)dfnames(df)=c("time","F","cB")#plot datatmp=melt(df,id.vars=c("time"), variable.name="species",value.name="conc")ggplot(data=tmp,aes(x=time,y=conc,color=species))+geom_point(size=3)#rate functionrxnrate=function(t,c,parms){ #rate constant passed through a list called a=parms$a c2=parms$c2 k1=parms$k1 c3=parms$c3 p1=parms$p1 #k4=parms$k4 #c is the concentration of species #derivatives dc/dt are computed below FSH<-input(t) r[1]<-a*F+k1*F*c["A"]- c2*c["A"]#dA/dt r[2]<-c2*c["A"]- c3*c["B"]+p1*F*c["B"]^2 #dA/dt res<-list(r) list(res,signal=FSH) return(list(r)) }# predicted concentration for a given parametercinit=c(A=452,B=0)t=df$timeparms=list(a=0.0107,k1=0.321,c2=0.749,c3=0.749,p1=0.214)out=ode(y=cinit,times=t,func=rxnrate,parms=list(a=a,k1=k1,c2=c2,c3=c3,p1=p1))head(out)
ssq=function(myparms){ #initial concentration cinit=c(A=myparms[6],B=myparms[7]) cinit=c(A=unname(myparms[6]),B=unname(myparms[7])) print(cinit) #time points for which conc is reported #include the points where data is available t=c(seq(0,5,1),df$time) t=sort(unique(t)) #parameters from the parameters estimation a=myparms[1] c1=myparms[2] c2=myparms[3] c3=myparms[4] p1=myparms[5] #k5=myparms[5] #solve ODE for a given set of parameters out=ode(y=cinit,time=t,func=rxnrate,parms=list(a=a,c1=c1,c2=c2,c3=c3,p1=p1)) #Filter data that contains time points outdf=data.frame(out) outdf=outdf[outdf$time %in% df$time,] #Evaluate predicted vs experimental residual preddf=melt(outdf,id.var="time",variable.name="species",value.name="conc") expdf=melt(df,id.var="time",variable.name="species",value.name="conc") ssqres=preddf$conc-expdf$conc return(ssqres)}# parameter fitting using levenberg marquart#initial guess for parametersmyparms=c(a=0.0107,k1=0.321,c2=0.749,c3=0.749,p1=0.214,A=452,B=0)
#fittingfastpath=FALSEfitval=nls.lm(par=myparms,fn=ssq)#summary of fitsummary(fitval)#estimated parameterparest=as.list(coef(fitval))#degrees of freedom: # data points=#paramdof=2*nrow(df)-2dof#mean errorms=sqrt(deviance(fitval)/dof)#variance Covariance MatrixS=vcov(fitval)S# plot of predicted vs experimental data#simulated predicted profile at estimated paramscinit=c(myparms[6],myparms[7])t=seq(0,5,1)parms=as.list(parest)out=ode(y=cinit,times=t,func=rxnrate,parms=parms)outdf=data.frame(out)names(outdf)=c("time","A_pred","B_pred")
[[alternative HTML version deleted]]
More information about the R-sig-dynamic-models
mailing list