# Risk Budgeting Portfolio

This example shows how to use `riskBudgetingPortfolio` to create a risk budgeting portfolio and `portfolioRiskContribution` to compute the risk contribution of the assets in the portfolio.

Risk budgeting is a portfolio allocation strategy that focuses on the allocation of risk to define the weights of a portfolio. The risk budgeting portfolio is constructed by ensuring that the risk contribution of each asset to the portfolio overall risk matches a target risk budget.

A common risk budgeting portfolio is the risk parity or equal risk contribution portfolio. For risk parity portfolios, the goal is to ensure that all assets contribute equally to the portfolio risk, that is, the target risk budget is the same for all assets. Key advantages of the risk budgeting portfolio are stability and diversification of weights:

• Stability of the allocations: The weights of the risk parity portfolio are more robust to changes in the returns covariance than the weights of the mean-variance portfolio.

• Diversification of the portfolio weights: The risk parity portfolio keeps the portfolio from concentrating in just a few number of assets.

This example follows the example in Section 3.1.1 of Bruder and Roncalli.[1]

### Define the Asset Returns Covariance

Define the covariance matrix of the asset returns (`Sigma`). `Sigma` must be a positive semidefinite matrix.

```% Define the returns covariance matrix. sigma = [0.2; 0.21; 0.1]; % Assets risk rho = 0.8; % Assets correlation C = @(rho) [ 1 rho rho; rho 1 rho; rho rho 1 ]; % Uniform correlation Sigma = corr2cov(sigma,C(rho)); % Covariance % Check that Sigma is positive semidefinite. All % eigenvalues should be nonnegative (>= 0). eig(Sigma)```
```ans = 3×1 0.0026 0.0084 0.0831 ```

### Create Risk Budgeting Portfolio

Use `riskBudgetingPortfolio` with the covariance matrix (`Sigma`) and a vector of risk budgets (`budget`) to compute the long-only fully invested risk budgeting portfolio. When you specify the target risk budget, the function computes the risk parity portfolio.

```% Define a risk budget. budget = [0.5; 0.25; 0.25]; wRB = riskBudgetingPortfolio(Sigma,budget)```
```wRB = 3×1 0.3912 0.1964 0.4124 ```

### Compute Risk Contribution for Each Asset

Use `portfolioRiskContribution` to check that the risk contribution of the portfolio obtained in `wRB` matches the target risk budget. By default, `portfolioRiskContribution` computes the relative risk contribution of a given portfolio (`wRB`) with respect to the provided covariance matrix (`Sigma`).

`prc = portfolioRiskContribution(wRB,Sigma)`
```prc = 3×1 0.5000 0.2500 0.2500 ```

As expected, the risk contribution of each asset matches the target risk budget (`budget`). You can also use `portfolioRiskContribution` to compute the absolute risk contribution of each asset.

`mrc = portfolioRiskContribution(wRB,Sigma,RiskContributionType="absolute")`
```mrc = 3×1 0.0751 0.0376 0.0376 ```

### Compare Risk Budgeting Portfolios with Mean-Variance

While the allocation strategy of the risk budgeting portfolio focuses only on the risk, the allocation strategy of the mean-variance portfolio also makes use of the assets' return information.

```% Define the returns mean. mu = [0.08; 0.08; 0.05];```

Initialize a `Portfolio` object with default constraints using `Sigma` and `mu`.

```% Define the mean-variance portfolio. p = Portfolio(AssetMean=mu,AssetCovar=Sigma); p = setDefaultConstraints(p);```

Compute the portfolio on the efficient frontier with a target volatility equal to the risk attained by the risk budgeting portfolio previously computed as `wRB`.

```% Define the target volatility. targetRisk = sqrt(wRB'*Sigma*wRB); wMV = estimateFrontierByRisk(p,targetRisk)```
```wMV = 3×1 0.3846 0.2030 0.4124 ```

Assume that the correlation between the assets is `0.7` instead of `0.8`. Use the new covariance matrix (`Sigma7`) to compute the same mean-variance and risk budgeting portfolios.

```% Update the covariance matrix. Sigma7 = corr2cov(sigma,C(0.7)); % Compute the mean-variance portfolio. p = Portfolio(AssetMean=mu,AssetCovar=Sigma7); p = setDefaultConstraints(p); wMV_rho7 = estimateFrontierByRisk(p,targetRisk)```
```wMV_rho7 = 3×1 0.3841 0.2600 0.3559 ```
```% Compute the risk budgeting portfolio. wRB_rho7 = riskBudgetingPortfolio(Sigma7,budget)```
```wRB_rho7 = 3×1 0.3844 0.1986 0.4170 ```

What if the correlation is `0.9` instead of `0.8` (`Sigma9`) and the risk of the second asset is `0.18` instead of `0.21`?

```% Update the covariance matrix. sigma2 = sigma; sigma2(2) = 0.18; Sigma9 = corr2cov(sigma2,C(0.9)); % Compute the mean-variance portfolio. p = Portfolio(AssetMean=mu,AssetCovar=Sigma9); p = setDefaultConstraints(p); wMV_rho9 = estimateFrontierByRisk(p,targetRisk)```
```wMV_rho9 = 3×1 0.0000 0.6612 0.3388 ```
```% Compute the risk budgeting portfolio. wRB_rho9 = riskBudgetingPortfolio(Sigma9,budget)```
```wRB_rho9 = 3×1 0.3852 0.2196 0.3952 ```

What if the original covariance (`Sigma`) is correct, but the mean of the first asset is `0.09` instead of `0.08`?

```% Update the returns vector. mu1 = mu; mu1(1) = 0.09; % Compute the mean-variance portfolio. p = Portfolio(AssetMean=mu1,AssetCovar=Sigma); p = setDefaultConstraints(p); wMV_mu1 = estimateFrontierByRisk(p,targetRisk)```
```wMV_mu1 = 3×1 0.5664 0.0000 0.4336 ```
```% Compute the risk budgeting portfolio. wRB_mu1 = riskBudgetingPortfolio(Sigma,budget)```
```wRB_mu1 = 3×1 0.3912 0.1964 0.4124 ```

The weights of the risk budgeting portfolio are more stable than those of the mean-variance portfolio. When the change is in the expected returns, the risk budgeting portfolio remains the same as in the original problem. The risk budgeting portfolio accounts only for changes to the covariance matrix and a change in the vector of expected returns does not affect the weights allocation.

```% Display a table of weights for the risk budgeting portfolios. RBtable = table(wRB,wRB_rho7,wRB_rho9,wRB_mu1)```
```RBtable=3×4 table wRB wRB_rho7 wRB_rho9 wRB_mu1 _______ ________ ________ _______ 0.39123 0.38444 0.38521 0.39123 0.19638 0.19857 0.21957 0.19638 0.41239 0.41699 0.39522 0.41239 ```
```% Display a table of weights for the mean-variance portfolios. MVtable = table(wMV,wMV_rho7,wMV_rho9,wMV_mu1)```
```MVtable=3×4 table wMV wMV_rho7 wMV_rho9 wMV_mu1 _______ ________ _________ __________ 0.38462 0.38411 2.031e-17 0.56638 0.20301 0.26003 0.6612 1.9618e-17 0.41237 0.35586 0.3388 0.43362 ```

The results on these tables show that the risk budgeting portfolio is more robust to changes in the parameters. The weights in the third and fourth column of the mean-variance portfolio table change so drastically that the portfolios stop investing in some assets altogether when the parameters change. The mean-variance portfolio tends to concentrate weights in a few number of assets, which decreases portfolio diversification.

### References

[1] Bruder, B. and T. Roncalli. Managing Risk Exposures Using the Risk Budgeting Approach. January 2012. Available at SSRN: https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2009778.