¿Existe una función en R que tome la mu y la Sigma de una matriz de covarianza aritmética y devuelva la mu y la Sigma de una matriz de covarianza basada en logaritmos?
Tengo el código de una función que implementa lo inverso -- de covarianza logarítmica a covarianza lineal -- en R (pegado abajo por si es útil). Tenga en cuenta que este código implementa las matemáticas de Meucci en la página 5 del Apéndice del adjunto .:
linreturn <- function(mu,Sigma) {
m <- exp(mu+diag(Sigma)/2)-1
x1 <- outer(mu,mu,"+")
x2 <- outer(diag(Sigma),diag(Sigma),"+")/2
S <- exp(x1+x2)*(exp(Sigma)-1)
list(mean=m,vcov=S)
}
Código de simulación que valida el enfoque anterior:
# Experiment with two assets
# initialize with average log returns and log-based covariance matrix
m1 <- c( .05 , .12 , .1 )
S1 <- matrix( c( .1 , .05 , .02 , .05 , .1 , .03 , .02 , .03 , .1 ), nrow = 3 )
# simulate log-return draws from log-based covariance matrix assuming normal distribution
set.seed(1001)
library(MASS)
logReturns <- MASS::mvrnorm(2000000,mu=m1,Sigma=S1)
# convert to arithmetic returns
arithmeticReturn = exp( logReturns ) - 1
colMeans( arithmeticReturn )
# create arithmetric based covariance matrix
var( arithmeticReturn )
# compare simulation results with linreturn function
linreturn( m1, S1 )
Alternativamente, ¿existe una función en MATLAB que realice el procedimiento? (Podría analizar el código abierto y portar esto a R).
Gracias