Learn R Programming

pmhtutorial (version 1.5)

particleFilterSVmodel: Bootstrap particle filter for state estimate in a simple stochastic volatility model

Description

Estimates the filtered state and the log-likelihood for a stochastic volatility model of the form \(x_t = \mu + \phi ( x_{t-1} - \mu ) + \sigma_v v_t\) and \(y_t = \exp(x_t/2) e_t\), where \(v_t\) and \(e_t\) denote independent standard Gaussian random variables, i.e. \(N(0,1)\).

Usage

particleFilterSVmodel(y, theta, noParticles)

Arguments

y

Observations from the model for \(t=1,...,T\).

theta

The parameters \(\theta=\{\mu,\phi,\sigma_v\}\). The mean of the log-volatility process is denoted \(\mu\). The persistence of the log-volatility process is denoted \(\phi\). The standard deviation of the log-volatility process is denoted \(\sigma_v\).

noParticles

The number of particles to use in the filter.

Value

The function returns a list with the elements:

  • xHatFiltered: The estimate of the filtered state at time \(t=1,...,T\).

  • logLikelihood: The estimate of the log-likelihood.

References

Dahlin, J. & Schon, T. B. "Getting Started with Particle Metropolis-Hastings for Inference in Nonlinear Dynamical Models." Journal of Statistical Software, Code Snippets, 88(2): 1--41, 2019.

Examples

Run this code
# NOT RUN {
  # Get the data from Quandl
  library("Quandl")
  d <- Quandl("NASDAQOMX/OMXS30", start_date="2012-01-02",
              end_date="2014-01-02", type="zoo")
  y <- as.numeric(100 * diff(log(d$"Index Value")))

  # Estimate the filtered state using a particle filter
  theta <- c(-0.10, 0.97, 0.15)
  pfOutput <- particleFilterSVmodel(y, theta, noParticles=100)

  # Plot the estimate and the true state
  par(mfrow=c(2, 1))
  plot(y, type="l", xlab="time", ylab="log-returns", bty="n",
    col="#1B9E77")
  plot(pfOutput$xHatFiltered, type="l", xlab="time",
    ylab="estimate of log-volatility", bty="n", col="#D95F02")
# }

Run the code above in your browser using DataLab