我正在尝试绘制一个图,其中对于y轴上的预期回报的不同值,给出了投资组合实现的相应方差。
要构建图,我需要将Markowitz方差应用于期望收益的不同值。为此,我必须编写一个函数作为输入:
该函数应返回一个向量,其中包含期望收益的相应值的投资组合方差。
投资组合收益的最小值应为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次,以得到点并将方差作为收益,但是我一直无法相当了解如何将收益输入周期。
答案 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))