# Profile.LS.DDE: Profile Estimation Functions for DDE In gpDDE: General Profiling Method for Delay Differential Equation

## 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

 ```1 2 3 4 5 6``` ```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 timeshe times at which the righthand side is being evaluated. xThe state values at those times. pParameters to be entered in the system. moreA 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: fnFunction to calculate the right hand sid. dfdxFunction to calculate the derivative of each right-hand function with respect to the states. dfdpcalculates the derivative of therighthand side function with respect to parameters. d2fdx2Function to calculate the second derivatives with respect to states. d2fdxdpFunction to calculate the cross derivatives of each right-hand function with respect to state and parameters. dfdx.dFunction to calculate the the derivative of each righthand function with respect to the delayed states. d2fdx.ddpFunction to calculate the cross derivatives of each righthand function with respect to the delayed states and parameters. d2fdxdx.dFunction to calculate the cross derivatives of each right-hand function with respect to the state and the delayed states. d2fdx.d2Function 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 qwtsQuadrature 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. nlsNonlinear least square nnls.eqNonlinear 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.

Ziqian Zhou

## Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36``` ```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) ```

gpDDE documentation built on May 2, 2019, 1:09 p.m.