Learn R Programming

SMC (version 1.0)

sequentialMonteCarlo: The sequential Monte Carlo (SMC) algorithm

Description

Function for the doing sequential Monte Carlo algorithm given the propagation rule over time (via propagateFunc). This is the most general interface for implementing a new SMC strategy, by providing a new propagation rule.

Usage

sequentialMonteCarlo(nStreams,                     
                     nPeriods,                     
                     dimPerPeriod,                 
                     propagateFunc,             
                     resampCriterionFunc = NULL,   
                     resampFunc          = NULL,   
                     summaryFunc         = NULL,   
                     nMHSteps            = 0,      
                     MHUpdateFunc        = NULL,   
                     nStreamsPreResamp   = NULL,   
                     returnStreams       = FALSE,  
                     returnLogWeights    = FALSE,  
                     verboseLevel        = 0,      
                     ...)

Arguments

nStreams
integer $>$ 0.
nPeriods
integer $>$ 0.
dimPerPeriod
integer $>$ 0.
propagateFunc
function of six arguments (currentPeriod, nStreamsToGenerate, lag1Streams, lag1LogWeights, startingStreams, ...).
resampCriterionFunc
function of four arguments (currentPeriod, currentStreams, currentLogWeights, ...).
resampFunc
function of four arguments (currentPeriod, currentStreams, currentLogWeights, ...).
summaryFunc
function of four arguments (currentPeriod, currentStreams, currentLogWeights, ...).
nMHSteps
integer $\ge$ 0.
MHUpdateFunc
function of six arguments (currentPeriod, nMHSteps, currentStreams, lag1Streams, lag1LogWeights, ...).
nStreamsPreResamp
integer $>$ 0.
returnStreams
logical.
returnLogWeights
logical.
verboseLevel
integer, a value $\ge$ 2 produces a lot of output.
...
optional arguments to be passed to propagateFunc, resampCriterionFunc, resampFunc, summaryFunc and MHUpdateFunc.

Value

  • This function returns a list with the following components:
  • drawsa list with the following components: summary, propUniqueStreamIds, streams, logWeights, acceptanceRates. See the section Note for more details.
  • nStreamsthe nStreams argument.
  • nPeriodsthe nPeriods argument.
  • dimPerPeriodthe dimPerPeriod argument.
  • nStreamsPreResampthe nStreamsPreResamp argument.
  • nMHStepsthe nMHSteps argument.
  • filterTypetype of the filter: sequentialMonteCarlo.
  • timethe time taken by the run.

Warning

Using very small values ($\le$ 1e3) for nStreams might not give reliable results.

Details

We introduce the following terms, which will be used in the sections Required Function and Optional Function below:

[object Object],[object Object]

References

Jun S. Liu (2001). Monte Carlo strategies for scientific computing. Springer. Chapter 3.

Jun S. Liu and Rong Chen (1998). Sequential Monte Carlo methods for dynamical systems. Journal of the American Statistical Association 98(443): 1032-1044.

See Also

particleFilter, auxiliaryParticleFilter

Examples

Run this code
MSObj  <- MarkovSwitchingFuncGenerator(-12345)
smcObj <-
    with(MSObj,
     {
         sequentialMonteCarlo(nStreams         = 5000,
                              nPeriods         = nrow(yy),
                              dimPerPeriod     = ncol(yy),
                              propagateFunc    = propagateFunc,
                              returnStreams    = TRUE,
                              returnLogWeights = TRUE,
                              verboseLevel     = 1)
     })
print(smcObj)
print(names(smcObj))
with(c(smcObj, MSObj),
 {
     par(mfcol = c(2, 1))
     plot(as.ts(yy),
          main     = expression('The data and the underlying regimes'),
          cex.main = 0.8,
          xlab     = 'period',
          ylab     = 'data and the regime means',
          cex.lab  = 0.8)
     lines(as.ts(mu), col = 2, lty = 2)
     plot(as.ts(draws$summary[1, ]),
          main     = expression('The underlying regimes and their estimates'),
          cex.main = 0.8,
          xlab     = 'period',
          ylab     = 'regime means',
          cex.lab  = 0.8)
     lines(as.ts(mu), col = 2, lty = 2)        
 })

MSObj  <- MarkovSwitchingFuncGenerator(-54321)
smcObj <-
    with(MSObj,
     {
         sequentialMonteCarlo(nStreams         = 5000,
                              nPeriods         = nrow(yy),
                              dimPerPeriod     = ncol(yy),
                              propagateFunc    = propagateFunc,
                              returnStreams    = TRUE,
                              returnLogWeights = TRUE,
                              verboseLevel     = 1)
     })
print(smcObj)
print(names(smcObj))
with(c(smcObj, MSObj),
 {
     par(mfcol = c(2, 1))
     plot(as.ts(yy),
          main     = expression('The data and the underlying regimes'),
          cex.main = 0.8,
          xlab     = 'period',
          ylab     = 'data and the regime means',
          cex.lab  = 0.8)
     lines(as.ts(mu), col = 2, lty = 2)
     plot(as.ts(draws$summary[1, ]),
          main     = expression('The underlying regimes and their estimates'),
          cex.main = 0.8,
          xlab     = 'period',
          ylab     = 'regime means',
          cex.lab  = 0.8)
     lines(as.ts(mu), col = 2, lty = 2)        
 })

Run the code above in your browser using DataLab