Nothing
## -----------------------------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ----warning=FALSE,message=FALSE----------------------------------------------
#load dependencies
library(pCODE)
library(deSolve)
library(fda)
library(MASS)
library(pracma)
library(Hmisc)
#set seed for reproducibility
set.seed(123)
ode.model <- function(t,state,parameters){
with(as.list(c(state,parameters)),{
dX <- theta*X*(1-X/10)
return(list(dX))})}
## -----------------------------------------------------------------------------
#define model parameters
model.par <- c(theta = c(0.1))
#define state initial value
state <- c(X = 0.1)
## -----------------------------------------------------------------------------
times <- seq(0,100,length.out=101)
mod <- ode(y=state,times=times,func=ode.model,parms = model.par)
nobs <- length(times)
scale <- 0.5
noise <- scale * rnorm(n = nobs, mean = 0 , sd = 1)
observ <- mod[,2] + noise
## ----fig.align='center',fig.width=6,fig.height=3.5----------------------------
#plot simulated data against generating model
plot(mod,ylab=names(state)) #curve
points(times, observ,pch='*',col='blue') #observation
## -----------------------------------------------------------------------------
#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)
## ----results="hide"-----------------------------------------------------------
#parameter estimation
pcode.result <- pcode(data = observ, time = times, ode.model = ode.model,
par.initial = 0.3, par.names = 'theta',state.names = 'X',
basis.list = basis, lambda = 1e2)
## -----------------------------------------------------------------------------
pcode.result$structural.par
pcode.result$nuisance.par
## -----------------------------------------------------------------------------
deltavar(data = observ, time = times, ode.model = ode.model,
par.initial = 0.3, par.names = 'theta',state.names = 'X',
basis.list = basis, lambda = 1e2,
stepsize = 1e-5,y_stepsize = 1e-5)
## ----eval=FALSE---------------------------------------------------------------
# #Tune lambda based on k-fold cross-validation
# cv.result <- tunelambda(data = observ, time = times, ode.model = ode.model,
# par.initial = 0.3, par.names = 'theta',state.names = 'X',
# basis.list = basis, lambda_grid = 10^(-3:10),cv_portion = .01,
# rep = 20, kfolds = 5)
## ----loaddata, echo=FALSE-----------------------------------------------------
load('simpleode.Rdata')
## ---- fig.width=7, fig.height=4,fig.show='hold',fig.align='center'------------
cv.means <- apply(cv.result$cv.score, 1, mean)
cv.sd <- apply(cv.result$cv.score, 1, sd)/sqrt(20)
plot(-2:10, cv.means[2:14], type = "l", lwd = 2, col = gray(0.4),ylim= c(-0,50),ylab='',xlab='')
errbar(-2:10, cv.means[2:14], cv.means[2:14] + cv.sd[2:14], cv.means[2:14] - cv.sd[2:14], add = TRUE, col = "steelblue2", pch = 19,
lwd = 0.5)
plot(1:10, cv.means[5:14], type = "l", lwd = 2, col = gray(0.4),ylim= c(-0,5),ylab='',xlab='')
errbar(1:10, cv.means[5:14], cv.means[5:14] + cv.sd[5:14], cv.means[5:14] - cv.sd[5:14], add = TRUE, col = "steelblue2", pch = 19,
lwd = 0.5)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.