计算预期收益-方差图

时间:2018-09-28 00:43:32

标签: r return covariance finance

我正在尝试绘制一个图,其中对于y轴上的预期回报的不同值,给出了投资组合实现的相应方差。

要构建图,我需要将Markowitz方差应用于期望收益的不同值。为此,我必须编写一个函数作为输入:

  • 最低预期收益
  • 最大预期收益
  • 介于最小值和最大值之间的点的数量(应为20)。

该函数应返回一个向量,其中包含期望收益的相应值的投资组合方差。

投资组合收益的最小值应为0.001,最大值为0.2,中间应有20个点。 我已经从数据集中计算出了sigma和预期收益。我想我必须编写某种循环函数,但是我被困在这里。

我用以下方法计算的马可维兹方差:

markowitz.variance <- function(mu.target, mu, sigma) {
n <- nrow(sigma)
ones <- rep(1,n)
sigma.inv <- solve(sigma)

A <- t(ones)%*%sigma.inv%*%ones
B <- t(ones)%*%sigma.inv%*%mu
C <- t(mu)%*%sigma.inv%*%mu
delta <- A%*%C-B%*%B

variance <- (A*mu.target^2 - 2*B*mu.target + C) / delta
return(variance)
}

协方差矩阵和预期收益:

sigma <- cov(constituents.return[,-1])
mu <- apply(constituents.return[,-1],2, mean)

我知道我必须以某种方式创建一个循环,在该循环中,期望的收益以0.001为增量从0.01到0.2的0.01增量循环20次,以得到点并将方差作为收益,但是我一直无法相当了解如何将收益输入周期。

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,

min.expected.return <- 0.001
max.expected.return <- 0.2
num.points <- 20
mu.targets <- seq(min.expected.return, max.expected.return, length=num.points)
sapply(mu.targets, function (mu.target) markowitz.variance(mu.target, mu, sigma))