# Effective Number of Bets

Yesterday, I had a post on Risk Parity, however one of the drawbacks is if the assets are highly correlated the performance may not be the best. ( https://kylebalkissoon.wordpress.com/2014/04/14/risk-parity-using-various-risk-measures-volatility-expected-shortfall-semi-deviation-maximum-draw-down/ ).   Today I will be analyzing the previous group from yesterday to see what was the effective number of bets. This is built off Attilio Meucci et al’s work on the topic. As we can see with the 12 assets from yesterday we are only making 8 effective bets which implies that while risk parity might be a wise idea, there can be benefits in effectively choosing ourbets. I will be providing a future blog post on how this can be used in portfolio construction( I used equal weight as the initial weights).

Recall that this methodology is dependent on the weights of the portfolios and that long-only can restrict the effective number of bets possible. ```Effective_Number_of_bets = function(R,w){
num_assets = ncol(R)
##Calculate covariance matrix
sigma = cov(R)
###Calculate eign vectors E and eigenvalues
eigen_vectors = eigen(sigma)\$vectors
eigen_values = eigen(sigma)\$values

principal_variances = NULL
for( i in 1:ncol(R)){
principal_variances[i] = var(as.numeric(as.vector(eigen_vectors[,i])%*%t(R)))

}
principal_portfolio_return = 1/(eigen_vectors)%*%t(R)
principal_weights = eigen_vectors^-1%*%w

##Calculated Weighted Ret, Rw in Meucci's slides
weighted_ret = t(principal_weights)%*%principal_portfolio_return

##Variance Concentration
var_concentration = data.frame(matrix(ncol=2,nrow=num_assets))
colnames(var_concentration) = c('assets','variance')
for( i in 1:num_assets){
var_concentration[i,]\$assets = i

var_concentration[i,]\$variance = (weighted_ret[i]^2)*principal_variances[i]

}

var_concentration\$variance =  var_concentration\$variance/sum( var_concentration\$variance)

##volatility concentration
volatility_concentration = data.frame(matrix(ncol=2,nrow=num_assets))
colnames(volatility_concentration) = c('assets','volatility')
for( i in 1:num_assets){
volatility_concentration[i,]\$assets = i
volatility_concentration[i,]\$volatility = var_concentration\$variance[i]/sd(weighted_ret)

}

volatility_concentration\$volatility = volatility_concentration\$volatility/sum(volatility_concentration\$volatility)

##Diversification distribtuion "probability mass"
diversification_distribution = data.frame(matrix(ncol=2,nrow=num_assets))
colnames(diversification_distribution) = c('assets','mass')
for( i in 1:num_assets){
diversification_distribution[i,]\$assets = i

diversification_distribution[i,]\$mass = var_concentration\$variance[i]/var(as.numeric(weighted_ret))

}
diversification_distribution\$mass = diversification_distribution\$mass/sum(diversification_distribution\$mass)
###Effective number of bets
effective_number_of_bets = data.frame(matrix(ncol=2,nrow=num_assets))
colnames(effective_number_of_bets) = c('assets','enb')
for( i in 1:num_assets){
effective_number_of_bets\$assets[i] = i

effective_number_of_bets\$enb[i] = exp((-1)*sum(diversification_distribution[1:i,2]*log(diversification_distribution[1:i,2])))

}

ans = list(var_concentration,volatility_concentration,diversification_distribution,effective_number_of_bets)
names(ans) = c('var_con','vol_con','div_dist','enb')
return(ans)}

library(PerformanceAnalytics)
library(quantmod)

###Symlist
symbol_list = c('SPY','XLF','XLE','XLU','XLK','XLB','XLP','XLY','XLI','XLV','TLT','GLD')

getSymbols(symbol_list, from = '1990-01-01')

securities_matrix = NULL
for( sym in symbol_list){

}

##Start in 2005, as GLD has inception of 2004-11
securities_matrix = securities_matrix['2005/2015-01-01']

analysis = Effective_Number_of_bets(securities_matrix,rep(1/ncol(securities_matrix),ncol(securities_matrix)))```

Created by Pretty R at inside-R.org

### One comment

1. […] post will aim to explore the effective number of bets (https://kylebalkissoon.wordpress.com/2014/04/15/effective-number-of-bets/) of various risk parity strategies […]