Learn R Programming

gpDDE (version 0.8.2)

Profile.LS.DDE: Profile Estimation Functions for DDE

Description

This function runs generalized profiling for DDE models. This function carry out the profiled optimization method for DDe models using a sum of squared errors criteria for both fit to data and the fit of the derivatives to a delay differential equation.

Usage

Profile.LS.DDE(fn, data, times, pars, beta, coefs = NULL, basisvals = NULL, lambda, fd.obj = NULL, more = NULL, weights = NULL, quadrature = NULL, in.meth = "nlminb", out.meth = "nls", control.in = list(), control.out = list(), eps = 1e-06, active = NULL, posproc = FALSE, poslik = FALSE, discrete = FALSE, names = NULL, sparse = FALSE, basisvals0 = NULL, coefs0 = NULL, nbeta, ndelay, tau)

Arguments

fn
A named list of functions giving the righthand side of a delay differential equation. The functions should have arguments
times
he times at which the righthand side is being evaluated.

x
The state values at those times.

p
Parameters to be entered in the system.

more
A list object containing additional inputs to fn, The distributed delay state are passed into derivative calculation as more$y.

The list of functions should contain the elements:

fn
Function to calculate the right hand sid.

dfdx
Function to calculate the derivative of each right-hand function with respect to the states.

dfdp
calculates the derivative of therighthand side function with respect to parameters.

d2fdx2
Function to calculate the second derivatives with respect to states.

d2fdxdp
Function to calculate the cross derivatives of each right-hand function with respect to state and parameters.

dfdx.d
Function to calculate the the derivative of each righthand function with respect to the delayed states.

d2fdx.ddp
Function to calculate the cross derivatives of each righthand function with respect to the delayed states and parameters.

d2fdxdx.d
Function to calculate the cross derivatives of each right-hand function with respect to the state and the delayed states.

d2fdx.d2
Function to calculate the second derivatives of the right-hand function with respect to the delayed states.

data
Matrix of observed data values.
times
Vector observation times for the data.
pars
Initial values of parameters to be estimated processes.
beta
Initial values of the contribution of lags for the delay.
coefs
Vector giving the current estimate of the coefficients in the spline.
basisvals
Values of the collocation basis to be used. This should be a basis object from the fda package.
lambda
Penalty value trading off fidelity to data with fidelity to dif- ferential equations.
fd.obj
A functional data object; if this is non-null, coefs and basisvals is extracted from here.
more
An object specifying additional arguments to fn.
weights
Weights for weighted estimation.
quadrature
Quadrature points, should contain two elements (if not NULL)
qpts
sQuadrature points; defaults to midpoints between knots

qwts
Quadrature weights; defaults to normalizing by the length of qpts.

in.meth
Inner optimization function currently one of 'nlminb', 'optim', or 'trustOptim'.
out.meth
Outer optimization function to be used, depending on the type of method.
nls
Nonlinear least square

nnls.eq
Nonlinear least square with equality or/and inequality constraints of the parameters.

control.in
Control object for inner optimization function.
control.out
Control object for outer optimization function.
eps
Finite differencing step size, if needed.
active
Incides indicating which parameters of pars should be estimated; defaults to all of them.
posproc
Should the state vector be constrained to be positive? If this is the case, the state is represented by an exponentiated basis expansion in the proc object.
poslik
Should the state be exponentiated before being compared to the data? When the state is represented on the log scale (posproc=TRUE), this is an alternative to taking the log of the data.
discrete
Is it a discrete process?
names
The names of the state variables if not given by the column names of coefs.
sparse
Should sparse matrices be used for basis values? This option can save memory when using 'trust' optimization method.
basisvals0
Values of the collocation basis to be used for the history part of the data. This should be a basis object from the fda package.
coefs0
Vector giving the estimate of the coefficients in the spline for the history part of the data.
nbeta
The number of lags for the delay.
ndelay
A vector inidicating which state process has a delay term.
tau
A list of delay lags.

Value

A list with elements
data
The matrix for the observed data.
res
The inner optimization result.
ncoefs
The estimated coefficients.
lik
The lik object generated.
proc
The proc object generated.
pars
The estimated parameters.
beta
The estimated contribution of lags for the delay.
times
The times at which the data are observed.
fdobj.d
The functional data object for the estimated state process.
fdobj0
The functional data object for the estimated state process of the history part.
tau
The lags of delays.

Examples

Run this code
yout <- DSIRdata
times <- seq(-0.5, 30, by = 0.1)
yout0 <- yout[times >= 0, ]
yout.d <- yout[times >= 5, ]
colnames(yout.d) <-  c("S","I")
times0 <- times[times>=0]
times.d <- times[times>=5]
norder = 3
nbasis.d = length(times.d) + norder - 2
nbasis0 <- length(times0) + norder - 2
basis0 <- create.bspline.basis(range=range(times0),
    nbasis=nbasis0, norder=norder, breaks=times0)
basis.d <- create.bspline.basis(range=range(times.d),
    nbasis=nbasis.d, norder=norder, breaks=times.d)
fdnames=list(NULL,c('S', 'I'),NULL)
bfdPar0 = fdPar(basis0,lambda=1,int2Lfd(1))
bfdPar.d <- fdPar(basis.d,lambda=1,int2Lfd(1))
DEfd0 <- smooth.basis(times0, yout0, bfdPar0,fdnames=fdnames)$fd
coefs0 <- DEfd0$coefs
colnames(coefs0) = c("S","I")
initPars <- c(5, 0.0012)
names(initPars) <- c("gamma", "beta")
initBeta <- rep(0, 11)
initBeta[c(4,5,11)] <- c(0.611, 0.362, 0.026)
tau <- list(seq(0,1, length.out = 11))
lambda = 1000
DSIRfn <- DSIRfn.make()
## Not run: 
# dde.fit <- Profile.LS.DDE(DSIRfn, yout.d, times.d, pars = initPars,
#     beta = initBeta, coefs = DSIRInitCoefs, basisvals = basis.d,
#     lambda = 1000,
#     in.meth='nlminb', basisvals0 = basis0, coefs0 = coefs0,
#     nbeta = length(initBeta), ndelay = 2, tau = tau,
#     control.out = list(method = "nnls.eq", maxIter = 2, echo = TRUE))
#     ## End(Not run)

Run the code above in your browser using DataLab