Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

6 votos

¿Función para convertir la matriz de covarianza aritmética en logarítmica?

¿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

4voto

jldugger Puntos 7490

Si he entendido bien el código (ignorando el " 1 "en el cálculo de m ), su entrada es un n -vector μ=(μ1,,μn) y una simétrica n por n matriz Σ=(σij) . La salida es un n -vector m con

mi=exp(μi+σii/2)

y un n por n matriz S con

Sij=exp(μi+μj+(σii+σjj)/2)(exp(σij)1)=mi(exp(σij)1)mj.

Si esto es correcto, entonces podemos resolver fácilmente para μ et Σ en términos de m et S esencialmente mediante la inversión de estas operaciones. Comience por formar la matriz diagonal M cuyas entradas diagonales son 1/mi Es decir, que.., Mii=1/mi et Mij=0 para ij . De la parte derecha de la fórmula anterior se deduce inmediatamente que

MSM+1n=exp(σij)

y recuperamos fácilmente Σ tomando los logaritmos término a término. Con estos valores en la mano,

μi=log(mi)σii/2.

Editar

El código de la pregunta utiliza "retornos lineales" en lugar de medios. No hay ningún problema: a partir de los "rendimientos" mi calculado como exp(μi+σii/2)1 , primero se añade de nuevo el 1 y proceder como en el caso anterior.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X