对数协方差到算术协方差矩阵函数?

发布于 2024-12-08 11:33:16 字数 287 浏览 1 评论 0原文

是否有一个函数可以将使用对数返回构建的协方差矩阵转换为基于简单算术返回的协方差矩阵?

动机:我们希望使用均值-方差效用函数,其中预期收益和方差以算术术语指定。然而,由于对数回报的可加性,通常使用对数回报来估计回报和协方差,并且我们假设资产价格遵循对数正态随机过程。

Meucci 描述了一种为 上对数正态收益的通用/任意分布生成基于算术收益的协方差矩阵的过程附录第 5 页

Is there a function that can convert a covariance matrix built using log-returns into a covariance matrix based on simple arithmetic returns?

Motivation: We'd like to use a mean-variance utility function where expected returns and variance is specified in arithmetic terms. However, estimating returns and covariances is often performed with log-returns because of the additivity property of log returns, and we assume asset prices follow a lognormal stochastic process.

Meucci describes a process to generate a arithmetic-returns based covariance matrix for a generic/arbitrary distribution of lognormal returns on Appendix page 5.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

坦然微笑 2024-12-15 11:33:16

这是我对公式的翻译:

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

Here's my translation of the formulae:

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)
}

edit: fixed -1 issue based on comments.

Try an example:

m1 <- c(1,2)
S1 <- matrix(c(1,0.2,0.2,1),nrow=2)

Generate multivariate log-normal returns:

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

Compare with expected results from formulae:

linreturn(m1,S1)

## $mean
## [1]  3.481689 11.182494

## $vcov
##          [,1]      [,2]
## [1,] 34.51261  12.08818
## [2,] 12.08818 255.01563
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文