14.3 Portfolio risk reports

A portfolio risk report summarizes asset and portfolio risk measures as well as risk budgets. Table 14.1 shows a typical portfolio risk report. The individual asset information is in rows with the portfolio information at the bottom. The total dollar amount invested in the portfolio is \(W_{0}\) and the dollar amounts invested in each asset are \(d_{i}=x_{i}W_{0}.\) The asset specific (standalone) risk measures are \(\mathrm{RM}_{i}\) and the portfolio risk measure is \(\mathrm{RM}(\mathbf{x})\).

Table 14.1: Portfolio Risk Report
Asset $d\(_{i}\) \(x_{i}\) RM\(_{i}\) MCR\(_{i}^{RM}\) CR\(_{i}^{RM}\) PCR\(_{i}^{RM}\)
Asset 1 $d\(_{1}\) \(x_{1}\) RM\(_{1}\) MCR\(_{1}^{RM}\) CR\(_{1}^{RM}\) PCR\(_{1}^{RM}\)
Asset 2 $d\(_{2}\) \(x_{2}\) RM\(_{2}\) MCR\(_{2}^{RM}\) CR\(_{2}^{RM}\) PCR\(_{2}^{RM}\)
\(\vdots\) \(\vdots\) \(\vdots\) \(\vdots\) \(\vdots\) \(\vdots\) \(\vdots\)
Asset N $d\(_{N}\) \(x_{N}\) RM\(_{N}\) MCR\(_{N}^{RM}\) CR\(_{N}^{RM}\) PCR\(_{N}^{RM}\)
Portfolio (Sum) \(\$W_{0}\) 1 RM(x) 1
Example 3.2 (Portfolio volatility risk report)

Consider creating a portfolio volatility risk report from an equally weighted portfolio of Microsoft, Nordstrom, and Starbucks stock. The initial wealth invested in the portfolio is $100,000. The expected return vector and covariance matrix is based on sample statistics computed over the five-year period January, 1995 through January, 2000. The asset and portfolio expected return and volatility information is:

# asset information
asset.names <- c("MSFT", "NORD", "SBUX") 
mu.vec = c(0.0427, 0.0015, 0.0285) 
sigma.mat = matrix(c(0.0100, 0.0018, 0.0011,                      
                     0.0018, 0.0109, 0.0026,                      
                     0.0011, 0.0026, 0.0199),                    
                   nrow=3, ncol=3) 
sig.vec = sqrt(diag(sigma.mat))
names(mu.vec) = names(sig.vec) = asset.names 
dimnames(sigma.mat) = list(asset.names, asset.names)
# equally weighted portfolio information
W0 = 100000
x = rep(1/3, 3) 
d = x*W0
names(x) = asset.names 
mu.px = as.numeric(crossprod(x, mu.vec)) 
sig.px = as.numeric(sqrt(t(x)%*%sigma.mat%*%x))

The volatility risk budgeting calculations are:

MCR.vol.x = (sigma.mat%*%x)/sig.px 
CR.vol.x = x*MCR.vol.x 
PCR.vol.x = CR.vol.x/sig.px

The volatility risk report is computed using:

riskReportVol.px = cbind(d, x, sig.vec, MCR.vol.x, 
                         CR.vol.x, PCR.vol.x) 
PORT = c(W0, 1, NA, NA, sum(CR.vol.x), sum(PCR.vol.x)) 
riskReportVol.px = rbind(riskReportVol.px, PORT) 
colnames(riskReportVol.px) = c("Dollar", "Weight", "Vol", 
                               "MCR", "CR", "PCR") 
riskReportVol.px 
##      Dollar Weight   Vol    MCR     CR   PCR
## MSFT  33333  0.333 0.100 0.0567 0.0189 0.249
## NORD  33333  0.333 0.104 0.0672 0.0224 0.295
## SBUX  33333  0.333 0.141 0.1037 0.0346 0.456
## PORT 100000  1.000    NA     NA 0.0759 1.000

In the equally weighted portfolio, the risk contributions are not equal across assets. Predictably, the ranking of the risk contributions follows the ranking of the individual asset volatilities \(\sigma_{i},\) with Starbucks giving the highest contributions to portfolio volatility. So if the portfolio manager wants to reduce portfolio volatility the allocation to Starbucks should be reduced first.

To interpret the marginal contributions to risk, suppose that the portfolio manager wants to reduce portfolio volatility and chooses the rebalancing strategy: \(\varDelta x_{MSFT}=-\varDelta x_{SBUX}=0.1\) (i.e., \(x_{MSFT}\) increases to \(0.433\) and \(x_{SBUX}\) decreases to \(0.233).\) Then, from (14.16) the predicted change in portfolio standard deviation is:

delta.vol.px = (MCR.vol.x["MSFT",] - MCR.vol.x["SBUX",])*0.1 
delta.vol.px
##    MSFT 
## -0.0047

Hence, the predicted volatility after rebalancing is:

sig.px + delta.vol.px
##   MSFT 
## 0.0712

The exact change in volatility from rebalancing is:

x1 = x + c(0.1, 0, -0.1) 
sig.px1 = as.numeric(sqrt(t(x1)%*%sigma.mat%*%x1)) 
sig.px1 
## [1] 0.0729

The difference between the approximate change in portfolio volatility computed from the risk report and the actual change is:

sig.px1 - sig.px
## [1] -0.00293

\(\blacksquare\)

Example 4.5 (Portfolio normal VaR risk report)

Using the asset and portfolio data from the previous example, consider creating a normal portfolio VaR report, where VaR is computed with 5% probability. The R calculations are:

# portfolio 5% normal VaR
alpha = 0.05 
# risk budget calculations
VaR.px = abs(W0*(mu.px + sig.px*qnorm(alpha))) 
MCR.VaR.x = abs(W0*(mu.vec + MCR.vol.x*qnorm(alpha))) 
CR.VaR.x = x*MCR.VaR.x 
PCR.VaR.x = CR.VaR.x/VaR.px
# risk report
VaR.vec = abs(W0*(mu.vec + sig.vec*qnorm(alpha))) 
riskReportVaR.px = cbind(d, x, VaR.vec, MCR.VaR.x, 
                         CR.VaR.x, PCR.VaR.x) 
PORT = c(W0, 1, NA, NA, sum(CR.VaR.x), sum(PCR.VaR.x)) 
riskReportVaR.px = rbind(riskReportVaR.px, PORT) 
colnames(riskReportVaR.px) = c("Dollar", "Weight", "VaR", 
                               "MCR", "CR", "PCR") 
riskReportVaR.px 
##      Dollar Weight   VaR   MCR    CR   PCR
## MSFT  33333  0.333 12179  5053  1684 0.168
## NORD  33333  0.333 17023 10907  3636 0.362
## SBUX  33333  0.333 20354 14206  4735 0.471
## PORT 100000  1.000    NA    NA 10055 1.000

The qualitative information in the portfolio normal VaR report is essentially the same as in the portfolio volatility report. Because the VaR calculation involve the asset expected returns, \(\mu\), the results are not exactly the same. If we set \(\mu=\mathbf{0}\) in the VaR calculations then the two reports would give same risk information but on different scales (volatility is in return and VaR is in dollars).

To interpret the marginal contributions to risk, suppose that the portfolio manager wants to reduce portfolio VaR and chooses the rebalancing strategy: \(\varDelta x_{MSFT}=-\varDelta x_{SBUX}=0.1\) (i.e., \(x_{MSFT}\) increases to \(0.433\) and \(x_{SBUX}\) decreases to \(0.233).\) Then, from (14.16) the predicted change in portfolio VaR and new portfolio VaR are:

delta.VaR.px = (MCR.VaR.x["MSFT",] - MCR.VaR.x["SBUX",])*0.1 
delta.VaR.px 
## MSFT 
## -915
VaR.px + delta.VaR.px
## MSFT 
## 9140

The exact change in portfolio VaR from rebalancing is:

mu.px1 = as.numeric(crossprod(x1, mu.vec)) 
VaR.px1 = abs(W0*(mu.px1 + sig.px1*qnorm(alpha))) 
VaR.px1 - VaR.px
## [1] -624
VaR.px1
## [1] 9431

Here, the predicted reduction in VaR is about $300 more than the actual change in VaR.

\(\blacksquare\)