#r #quadprog #r-portfolioanalytics
Вопрос:
При анализе портфеля, учитывая ожидания, мы стремимся найти вес каждого актива, чтобы минимизировать дисперсию
вот код
install.packages("quadprog")
library(quadprog)
#Denoting annualized risk as an vector sigma
sigma <- c(0.56, 7.77, 13.48, 16.64)
#Formulazing the correlation matrix proposed by question
m <- diag(0.5, nrow = 4, ncol = 4)
m[upper.tri(m)] <- c(-0.07, -0.095, 0.959, -0.095, 0.936, 0.997)
corr <- m t(m)
sig <- corr * outer(sigma, sigma)
#Defining the mean
mu = matrix(c(1.73, 6.65, 9.11, 10.30), nrow = 4)
m0 = 8
Amat <- t(matrix(c(1, 1, 1, 1,
c(mu),
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1), 6, 4, byrow = TRUE))
bvec <- c(1, m0, 0, 0, 0, 0)
qp <- solve.QP(sig, rep(0, nrow(sig)), Amat, bvec, meq = 2)
qp
x = matrix(qp$solution)
x
(t(x) %*% sig %*% x)^0.5
Я понимаю формулировку mu и ковариационной матрицы и знаю, как использовать quadprog
сюжет
Однако я не понимаю, почему Amat
и bvec
определены таким образом, почему матрица 6 на 4.
$mu0$ — это ожидание, которое мы стремимся иметь для портфеля, и оно зафиксировано на уровне 8%
Ответ №1:
Как вы, вероятно, знаете, причина, по которой Amat
у вас четыре столбца, заключается в том, что вы распределяете четыре актива. В нем шесть строк, потому что в вашей задаче есть шесть ограничений:
- Ассигнования составляют 1 (100%)
- Ожидаемая доходность = 8%
- Распределение «Денежного рынка» > = 0
- Распределение «стабильного капитала» > = 0
- Распределение «Баланса» > = 0
- Распределение «Роста» > = 0
Посмотрите на числа, которые определяют каждое ограничение. Они есть, почему bvec
есть [1, 8, 0, 0, 0, 0]
. Из этих шести первые два являются ограничениями равенства, поэтому meq
установлено значение 2 (остальные четыре больше или равны ограничениям).
Отредактировано, чтобы добавить:
Способ работы ограничений заключается в следующем: каждый столбец Amat
определяет ограничение, которое затем умножается на распределение активов, с результатом, равным (или большим, чем или равным) некоторой заданной цели bvec
. Например:
Первая колонка Amat
-это [1, 1, 1, 1]
, и первая запись bvec
-1. Итак, первое ограничение-это:
1 * money_market 1 * capital_stable 1 * balance 1 * growth = 1
Это способ сказать, что распределение активов составляет 1.
Второе ограничение гласит, что ожидаемые доходы составляют до 8:
1.73 * money_market 6.65 * capital_stable 9.11 * balance 10.32 * growth = 8
Теперь рассмотрим третье ограничение, которое гласит, что распределение «денежного рынка» больше или равно нулю. Это потому, что 3-я колонка Amat
is [1, 0, 0, 0]
и третья запись bvec
0. Таким образом, это ограничение выглядит следующим образом:
1 * money_market 0 * capital_stable 0 * balance 0 * growth >= 0
Упрощая, это то же самое, что:
money_market >= 0