Take the 2-minute tour ×
Quantitative Finance Stack Exchange is a question and answer site for finance professionals and academics. It's 100% free, no registration required.

I have implemented two different expressions (Idzorek p.6, Walters p.51) of a posterior mean return calculation within a Black-Litterman framework. My results are the same, irrespective of the implemented expression, but if compared to the results published by Idzorek they differ. Also the R package BLCOP returns yet more confusing results. What am I missing?

This is corresponding code...

# Equilibrium returns from CAPM, Idzorek p.5
mu = c(0.08, 0.67, 6.41, 4.08, 7.43, 3.70, 4.80, 6.60)/100
assetNames = c("US bonds", "Int bonds", "US large grow", "US large value",
               "US small grow", "US small value", "Int dev EQ", "Int emerg EQ")
# Views (returns and pick matrix), Idzorek p.7, p.13
Q = c(5.25, 0.25, 2)/100 
P = matrix(0, ncol = 8, nrow = 3, dimnames = list(NULL, assetNames))
P[1,7] = 1
P[2,1] = -1; P[2,2] <- 1
P[3, 3:6] = c(0.9, -0.9, .1, -.1)
# Prior covariance-variance matrix, Idzorek table 5
entries = c(0.001005,0.001328,-0.000579,-0.000675,0.000121,0.000128,
             -0.000445, -0.000437, 0.001328,0.007277,-0.001307,-0.000610,
             -0.002237,-0.000989,0.001442,-0.001535, -0.000579,-0.001307,
             0.059852,0.027588,0.063497,0.023036,0.032967,0.048039,-0.000675,
             -0.000610,0.027588,0.029609,0.026572,0.021465,0.020697,0.029854,
             0.000121,-0.002237,0.063497,0.026572,0.102488,0.042744,0.039943,
             0.065994 ,0.000128,-0.000989,0.023036,0.021465,0.042744,0.032056,
             0.019881,0.032235 ,-0.000445,0.001442,0.032967,0.020697,0.039943,
             0.019881,0.028355,0.035064 ,-0.000437,-0.001535,0.048039,0.029854,
             0.065994,0.032235,0.035064,0.079958 )
sigma = matrix(entries, ncol = 8, nrow = 8)
# Equilibrium variance uncertainty, Idzorek p. 15
tau = 0.25
omega = diag(c((P[1,]%*%sigma%*%P[1,])*tau, 
               (P[2,]%*%sigma%*%P[2,])*tau, 
               (P[3,]%*%sigma%*%P[3,]))*tau)
# BL master formula for posterior mu in Walters, Appendix E
mu_JWalters = mu+(tau*sigma%*%t(P))%*%inv((tau*P%*%sigma%*%t(P))+omega)%*%(Q-P%*%mu)
# BL master formula for posterior mu in Idzorek p. 6
mu_Idzorek = inv(inv(tau*sigma)+(t(P)%*%inv(omega)%*%P))%*%((inv(tau*sigma)%*%mu)+(t(P)%*%inv(omega)%*%Q))
# BL posterior mu using BLCOP package
views = BLViews(P, Q,confidences=diag(omega), assetNames)
mu_BLCOP = posteriorEst(views=views,mu=mu,tau=tau,sigma=sigma)@posteriorMean
posteriorMuSet = round(cbind(mu_JWalters,mu_Idzorek,mu_BLCOP),digits=4)*100
dimnames(posteriorMuSet) = list(assetNames,c("Walters", "Idzorek", "BLCOP"))

... and the result is

               Walters Idzorek BLCOP
US bonds          0.05    0.05  0.08
Int bonds         0.32    0.32  0.67
US large grow     6.75    6.75  6.41
US large value    4.51    4.51  4.08
US small grow     7.95    7.95  7.43
US small value    4.15    4.15  3.70
Int dev EQ        5.11    5.11  4.80
Int emerg EQ      7.16    7.16  6.60

This is quit different from the actual results in Idzorek. Any ideas are much appreciated!

share|improve this question
    
Note that I did experiment with different tau values, but even with tau=1 still two asset classes are showing a difference (US bonds and US large grow), even though it's small (0.01%) I am curious as to where it originates from. Also, this would not explain the remarkably different BLCOP result which fails to adjust with changing tau values. –  RndmSymbl Feb 8 at 1:23
add comment

1 Answer

up vote 0 down vote accepted

To each closure on this: I attribute the difference to Idzorek to rounding errors. And on a side node, Idzorek sets the sample variance equal to the prior variance, an issue that kept myself busy until I found that detail confirmed by Walters paper.

share|improve this answer
    
If you've solved the problem you can accept your own answer. –  Louis Marascio Feb 15 at 14:15
    
Oh sure, will do. –  RndmSymbl Feb 15 at 14:45
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.