是否有一种函数可以将使用对数收益率构建的协方差矩阵转换为基于简单算术收益率的协方差矩阵?
动机:我们希望使用一个均值-方差效用函数,其中期望收益和方差以算术术语指定。然而,由于对数收益的可加性属性以及我们假设资产价格遵循对数正态随机过程,因此通常使用对数收益率来估计收益和协方差。
Meucci在附录第5页中描述了一种生成基于算术收益的协方差矩阵的过程,适用于对数正态收益的任意分布。
是否有一种函数可以将使用对数收益率构建的协方差矩阵转换为基于简单算术收益率的协方差矩阵?
动机:我们希望使用一个均值-方差效用函数,其中期望收益和方差以算术术语指定。然而,由于对数收益的可加性属性以及我们假设资产价格遵循对数正态随机过程,因此通常使用对数收益率来估计收益和协方差。
Meucci在附录第5页中描述了一种生成基于算术收益的协方差矩阵的过程,适用于对数正态收益的任意分布。
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)
}
编辑:根据评论修复了-1
问题。
尝试一个例子:
m1 <- c(1,2)
S1 <- matrix(c(1,0.2,0.2,1),nrow=2)
生成多元对数正态收益率:
set.seed(1001)
r1 <- exp(MASS::mvrnorm(200000,mu=m1,Sigma=S1))-1
colMeans(r1)
## [1] 3.485976 11.214211
var(r1)
## [,1] [,2]
## [1,] 34.4021 12.4062
## [2,] 12.4062 263.7382
与公式预期结果进行比较:
linreturn(m1,S1)
## $mean
## [1] 3.481689 11.182494
## $vcov
## [,1] [,2]
## [1,] 34.51261 12.08818
## [2,] 12.08818 255.01563
for
循环,但outer
会更好)。 - Ben Bolker