# Create a dynamicsSVM object with model DuffiePanSingleton and default parameters
DuffiePanSingleton_mod <- dynamicsSVM(model = "DuffiePanSingleton")
# Here, we define the same DuffiePanSingleton model
# using the custom model option.
# Daily observations
h <- 1/252
# Parameter values
mu <- 0.038; kappa <- 3.689; theta <- 0.032
sigma <- 0.446; rho <- -0.745; omega <- 5.125
delta <- 0.03; alpha <- -0.014; rho_z <- -1.809; nu <- 0.004
# Jump compensator
alpha_bar <- exp(alpha + 0.5 * delta^2) / (1 - rho_z * nu) - 1
# Returns drift and diffusion
mu_y <- function(x, mu, alpha_bar, omega, h) {
return(h * (mu - x / 2 - alpha_bar * omega))
}
mu_y_params <- list(mu, alpha_bar, omega, h)
sigma_y <- function(x, h) {
return(sqrt(h * pmax(x, 0)))
}
sigma_y_params <- list(h)
# Volatility factor drift and diffusion
mu_x <- function(x, kappa, theta, h) {
return(x + h * kappa * (theta - pmax(0, x)))
}
mu_x_params <- list(kappa, theta, h)
sigma_x <- function(x, sigma, h) {
return(sigma * sqrt(h * pmax(x, 0)))
}
sigma_x_params <- list(sigma, h)
# Jump distribution for the DuffiePanSingleton Model
jump_density <- dpois
jump_dist <- rpois
jump_params <- c(h * omega)
# Create the custom model
custom_DPS <- dynamicsSVM(model = 'Custom',
mu_x = mu_x, mu_y = mu_y, sigma_x = sigma_x, sigma_y = sigma_y,
mu_x_params = mu_x_params, mu_y_params = mu_y_params,
sigma_x_params = sigma_x_params, sigma_y_params = sigma_y_params,
jump_params = jump_params, jump_dist = jump_dist, jump_density = jump_density,
nu = nu, rho_z = rho_z)
Run the code above in your browser using DataLab