library(PortfolioAnalytics)1data(edhec)2R <- edhec[,1:5]34# compute the probabilities5probs <- rep(1 / nrow(R), nrow(R))6# probabilities should always sum to 17sum(probs)89# suppose that I express a bearish view on R[,1] - R[,2]10# lambda is the ad-hoc multiplier11# Meucci recommends -2 (very bearish), -1 (bearish), 1 (bullish), 2 (very bullish)12lambda <- -213V <- coredata(R[,1] - R[,2])14m <- mean(V)15s <- sd(V)16b <- matrix(m + lambda * s, 1)1718# set up matrix for equality constraints19# constrain such that probabilities sum to 120Aeq <- matrix(1, nrow=1, ncol=nrow(R))21beq <- matrix(1, 1, 1)2223# set up matrix for inequality constraints24A <- t(V)2526# Compute posterior probabilities27# The EntryProg optimization handles inequality constraints as A < b28# If I hav29posterior_probs <- Meucci::EntropyProg(probs, A, b, Aeq, beq)$p_30dim(posterior_probs)31sum(posterior_probs)3233# why do the probs equal the posterior probs?34all.equal(as.numeric(posterior_probs), probs)3536# Now I have my posterior probabilities37# What is a general approach I can use for any arbitrary optimization38all.equal(as.numeric(t(coredata(R)) %*% posterior_probs),as.numeric(matrix(colMeans(R), ncol=1)))3940# This is pretty close to sample cov41Exps <- t(R) %*% posterior_probs42Scnd_Mom = t(R) %*% (R * (posterior_probs %*% matrix( 1,1,ncol(R)) ) )43Scnd_Mom = ( Scnd_Mom + t(Scnd_Mom) ) / 244Covs = Scnd_Mom - Exps %*% t(Exps)45Covs46cov(R)4748495051525354