categoryAttribution
Compute performance attribution for portfolio of each category
Description
[
computes the performance attribution for the portfolio of each category using the Brinson
model.AggregateCategoryAttribution
,PeriodicCategoryAttribution
] = categoryAttribution(brinsonAttributionObj
)
Examples
Compute Performance Attribution Using brinsonAttribution
Object
This example shows how to create a brinsonAttribution
object and then use categoryAttribution
to compute the performance attribution of the portfolio for each category (sector).
Prepare Data
Create a table for the monthly prices for four assets.
GM =[17.82;22.68;19.37;20.28]; HD = [39.79;39.12;40.67;40.96]; KO = [38.98;39.44;40.00;40.20]; PG = [56.38;57.08;57.76;55.54]; MonthlyPrices = table(GM,HD,KO,PG);
Use tick2ret
to define the monthly returns.
MonthlyReturns = tick2ret(MonthlyPrices.Variables)'; [NumAssets,NumPeriods] = size(MonthlyReturns);
Define the periods.
Period = ones(NumAssets*NumPeriods,1); for k = 1:NumPeriods Period(k*NumAssets+1:end,1) = Period(k*NumAssets,1) + 1; end
Define the categories for the four assets.
Name = repmat(string(MonthlyPrices.Properties.VariableNames(:)),NumPeriods,1); Categories = repmat(categorical([ ... "Consumer Discretionary"; ... "Consumer Discretionary"; ... "Consumer Staples"; ... "Consumer Staples"]),NumPeriods,1);
Define benchmark and portfolio weights.
BenchmarkWeight = repmat(1./NumAssets.*ones(NumAssets, 1),NumPeriods,1); PortfolioWeight = repmat([1;0;1;1]./3,NumPeriods,1);
Create AssetTable
Input
Create AssetTable
as the input for the brinsonAttribution
object.
AssetTable = table(Period, Name, ... MonthlyReturns(:), Categories, PortfolioWeight, BenchmarkWeight, ... VariableNames=["Period","Name","Return","Category","PortfolioWeight","BenchmarkWeight"])
AssetTable=12×6 table
Period Name Return Category PortfolioWeight BenchmarkWeight
______ ____ _________ ______________________ _______________ _______________
1 "GM" 0.27273 Consumer Discretionary 0.33333 0.25
1 "HD" -0.016838 Consumer Discretionary 0 0.25
1 "KO" 0.011801 Consumer Staples 0.33333 0.25
1 "PG" 0.012416 Consumer Staples 0.33333 0.25
2 "GM" -0.14594 Consumer Discretionary 0.33333 0.25
2 "HD" 0.039622 Consumer Discretionary 0 0.25
2 "KO" 0.014199 Consumer Staples 0.33333 0.25
2 "PG" 0.011913 Consumer Staples 0.33333 0.25
3 "GM" 0.04698 Consumer Discretionary 0.33333 0.25
3 "HD" 0.0071306 Consumer Discretionary 0 0.25
3 "KO" 0.005 Consumer Staples 0.33333 0.25
3 "PG" -0.038435 Consumer Staples 0.33333 0.25
Create brinsonAttribution
Object
Use brinsonAttribution
to create the brinsonAttribution
object.
BrinsonPAobj = brinsonAttribution(AssetTable)
BrinsonPAobj = brinsonAttribution with properties: NumAssets: 4 NumPortfolioAssets: 3 NumBenchmarkAssets: 4 NumPeriods: 3 NumCategories: 2 AssetName: [4x1 string] AssetReturn: [4x3 double] AssetCategory: [4x3 categorical] PortfolioAssetWeight: [4x3 double] BenchmarkAssetWeight: [4x3 double] PortfolioCategoryReturn: [2x3 double] BenchmarkCategoryReturn: [2x3 double] PortfolioCategoryWeight: [2x3 double] BenchmarkCategoryWeight: [2x3 double] PortfolioReturn: 0.0598 BenchmarkReturn: 0.0540 ActiveReturn: 0.0059
Compute Performance Attribution
Use the brinsonAttribution
object with categoryAttribution
to compute the performance attribution of the portfolio for each category.
[AggregateCategoryAttribution,PeriodicCategoryAttribution] = categoryAttribution(BrinsonPAobj)
AggregateCategoryAttribution=2×5 table
Category Allocation Selection Interaction ActiveReturn
______________________ __________ ___________ ___________ ____________
Consumer Discretionary -0.0071764 0.030316 -0.010105 0.013034
Consumer Staples -0.0071764 -9.4005e-19 -3.1335e-19 -0.0071764
PeriodicCategoryAttribution=6×7 table
Period LinkingCoefficient Category Allocation Selection Interaction ActiveReturn
______ __________________ ______________________ __________ ___________ ___________ ____________
1 0.97032 Consumer Discretionary -0.009653 0.072391 -0.02413 0.038608
1 0.97032 Consumer Staples -0.009653 0 0 -0.009653
2 1.0838 Consumer Discretionary 0.0055181 -0.046391 0.015464 -0.025409
2 1.0838 Consumer Staples 0.0055181 -8.6736e-19 -2.8912e-19 0.0055181
3 1.0391 Consumer Discretionary -0.0036477 0.0099623 -0.0033208 0.0029938
3 1.0391 Consumer Staples -0.0036477 0 0 -0.0036477
Input Arguments
brinsonAttributionObj
— Brinson attribution model
object
Brinson attribution model, specified as a brinsonAttribution
object.
Data Types: object
Output Arguments
AggregateCategoryAttribution
— Category attribution aggregated over all periods
table
Category attribution aggregated over all periods, returned as a table with the following columns:
Category
— Asset categoryAllocation
— Category allocation effect for the categorySelection
— Effect of selecting individual assets within the categoryInteraction
— Allocation-selection interaction effectActiveReturn
— Active return compared with benchmark
PeriodicCategoryAttribution
— Category attribution for each period
table
Category attribution for each period, returned as a table with the following columns:
Period
— Time period numbers (1 for the first period, 2 for the second period, and so on)LinkingCoefficient
— Linking coefficients used to aggregate the attribution results over all time periodsCategory
— Asset categoryAllocation
— Category allocation effect for the categorySelection
— Effect of selecting individual assets within the categoryInteraction
— Allocation-selection interaction effectActiveReturn
— Active return compared with benchmark
References
[1] Brinson, G. P. and Fachler, N. “Measuring Non-US Equity Portfolio Performance.” Journal of Portfolio Management. Spring 1985: 73–76.
[2] Brinson, G. P., Hood, L. R., and Beebower, G. L. “Determinants of Portfolio Performance.” Financial Analysts Journal. Vol. 42, No. 4, 1986: 39–44.
[3] Menchero, J. “Multiperiod Arithmetic Attribution.” Financial Analysts Journal. Vol. 60, No. 4, 2004: 76–91.
[4] Tuttle, D. L., Pinto, J. E., and McLeavey, D. W. Managing Investment Portfolios: A Dynamic Process. Third Edition. CFA Institute, 2007.
Version History
Introduced in R2022b
Ouvrir l'exemple
Vous possédez une version modifiée de cet exemple. Souhaitez-vous ouvrir cet exemple avec vos modifications ?
Commande MATLAB
Vous avez cliqué sur un lien qui correspond à cette commande MATLAB :
Pour exécuter la commande, saisissez-la dans la fenêtre de commande de MATLAB. Les navigateurs web ne supportent pas les commandes MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)