library(fda)
library(deSolve)
library(MASS)
library(pracma)
#Simple ode model example
#define model parameters
model.par <- c(theta = c(0.1))
#define state initial value
state <- c(X = 0.1)
#Define model for function 'ode' to numerically solve the system
ode.model <- function(t, state,parameters){
with(as.list(c(state,parameters)),
{
dX <- theta*X*(1-X/10)
return(list(dX))
})
}
#Observation time points
times <- seq(0,100,length.out=101)
#Solve the ode model
desolve.mod <- ode(y=state,times=times,func=ode.model,parms = model.par)
#Prepare for doing parameter cascading method
#Generate basis object for interpolation and as argument of pcode
#21 konts equally spaced within [0,100]
knots <- seq(0,100,length.out=21)
#order of basis functions
norder <- 4
#number of basis funtions
nbasis <- length(knots) + norder - 2
#creating Bspline basis
basis <- create.bspline.basis(c(0,100),nbasis,norder,breaks = knots)
#Add random noise to ode solution for simulating data
nobs <- length(times)
scale <- 0.1
noise <- scale*rnorm(n = nobs, mean = 0 , sd = 1)
observation <- desolve.mod[,2] + noise
#parameter estimation
pcode(data = observation, time = times, ode.model = ode.model,
par.initial = 0.1, par.names = 'theta',state.names = 'X',
basis.list = basis, lambda = 1e2)
Run the code above in your browser using DataLab