stochcorr {stochcorr}R Documentation

Estimate a stochastic correlation model

Description

stochcorr returns the estimates of the instantaneous correlation and other model parameters.

Usage

stochcorr(S_1, S_2, dt, corr_process, iter=2000, lambda=4, lambda_1=10, lambda_2=0)

Arguments

S_1

Historical price of the first asset

S_2

Historical price of the second asset

dt

Time step

corr_process

specify the correlation process, vmp for von Mises process or cbm for Circular Brownian Motion

iter

Number of iteration (Default is 2000)

lambda

regularization parameter for circular Brownian motion (Default is 4)

lambda_1

(Default is 10)

lambda_2

0 (Default)

Details

Let S^1_t and S^2_t be two discretely observed geometric Brownian motions observed at a time step of dt.

dS^1_t=\mu_1S^1_tdt+\sigma_1dW_t^1\\ dS^2_t=\mu_2S^2_tdt+\sigma_2(\rho_tdW_t^1+\sqrt{1-\rho_t^2}dW_t^2)

where \rho_t=\cos\theta_t, with \theta_t being specified by the von Mises Process (d\theta_t=\lambda\sin(\theta_t-\mu)+\sigma dW_t^3) or the Circular Brownian Motion,

d\theta=\sigma dW_t^3

with periodic boundary conditions. Here W_t^1,W_t^2,W_t^3 are mutually independent Brownian Motions.

We estimate the model by maximising penalized MLE, using an iterative optimization procedure. In case of the von Mises process as the correlation process we maximise,

\text{Log-lik}-\lambda_1\sum(\rho_{i+1}-\rho_{i})^2-\lambda_2\frac{2\lambda}{\sigma^2}

For Circular Brownian motion as the correlation process we maximise,

\text{Log-lik}-\lambda\sum(\rho_{i+1}-\rho_{i})^2

See section 4 of Majumdar and Laha (2024) doi:10.48550/arXiv.2412.06343.

Value

A list containing the estimates of the model including the asset price parameters, instantaneous correlations and estimates of the correlation process

if corr_process=vmp then it additionally returns

else if corr_process=cbm then it returns

See Also

stoch.bootstrap()

Examples


data("nse2020")

## using von Mises process as the correlation process

a <- stochcorr(nse2020$`USD/INR`, nse2020$Nifty, 1 / 250, corr_process = "vmp")

## using Circular Brownian Motions as the correlation process

a <- stochcorr(nse2020$`USD/INR`, nse2020$Nifty, 1 / 250, corr_process = "cbm")

[Package stochcorr version 0.0.1 Index]