Learn R Programming

ctsem (version 2.8.2)

optimstan: Optimize / importance sample a stan or ctStan model.

Description

Optimize / importance sample a stan or ctStan model.

Usage

optimstan(standata, sm, init = 0, sampleinit = NA, deoptim = TRUE,
  estonly = FALSE, tol = 1e-12, decontrol = list(), isloops = 5,
  isloopsize = 500, issamples = 500, verbose = 0, nopriors = FALSE,
  cores = 1)

Arguments

standata

list object conforming to rstan data standards.

sm

compiled stan model object.

init

init argument conforming to rstan init standards.

sampleinit

either NA, or an niterations * nparams matrix of samples to initialise importance sampling.

deoptim

Do first pass optimization using differential evolution? Slower, but better for cases with multiple minima / difficult optimization.

estonly

if TRUE,just return point estimates under $rawest subobject.

tol

absolute object tolerance

decontrol

List of control parameters for differential evolution step, to pass to DEoptim.control.

isloops

Number of iterations of adaptive importance sampling to perform after optimization.

isloopsize

Number of samples per iteration of importance sampling.

issamples

Number of samples to use for final results of importance sampling.

verbose

Integer from 0 to 2. Higher values print more information during model fit -- for debugging.

nopriors

logical.f If TRUE, any priors are disabled -- sometimes desirable for optimization.

cores

Number of cpu cores to use.

Value

ctStanFit object

Examples

Run this code
# NOT RUN {
 sunspots<-sunspot.year
 sunspots<-sunspots[50: (length(sunspots) - (1988-1924))]
 id <- 1
 time <- 1749:1924
datalong <- cbind(id, time, sunspots)

#setup model
 ssmodel <- ctModel(type='stanct', n.latent=2, n.manifest=1,
  manifestNames='sunspots',
  latentNames=c('ss_level', 'ss_velocity'),
   LAMBDA=matrix(c( 1, 'ma1' ), nrow=1, ncol=2),
   DRIFT=matrix(c(0, 'a21', 1, 'a22'), nrow=2, ncol=2),
   MANIFESTMEANS=matrix(c('m1'), nrow=1, ncol=1),
   MANIFESTVAR=diag(0,1),
   CINT=matrix(c(0, 0), nrow=2, ncol=1),
   T0VAR=matrix(c(1,0,0,1), nrow=2, ncol=2), #Because single subject
   DIFFUSION=matrix(c(0, 0, 0, "diffusion"), ncol=2, nrow=2))

 ssmodel$pars$indvarying<-FALSE #Because single subject
 ssmodel$pars$offset[14]<- 44 #Because not mean centered
 ssmodel$pars[4,c('transform','offset')]<- c(1,0) #To avoid multi modality

#fit using optimization without importance sampling
ssfit <- ctStanFit(datalong[1:50,], #limited data for example
  ssmodel, optimize=TRUE,optimcontrol=list(deoptim=FALSE,isloops=0,issamples=50))

#output
summary(ssfit)
# }

Run the code above in your browser using DataLab