brinsonAttribution
Description
Create a brinsonAttribution object for performance
attribution using the Brinson model.
Use this workflow to develop and analyze a Brinson model for performance attribution:
Prepare data for the
AssetTableinput.Use
brinsonAttributionto create abrinsonAttributionobject.Use the following functions with the
brinsonAttributionobject:
For more detailed information on this workflow, see Analyze Performance Attribution Using Brinson Model.
Creation
Description
creates a brinsonAttributionObj = brinsonAttribution(AssetTable)brinsonAttribution object and sets the properties. Use the
brinsonAttribution object with the categoryAttribution, categoryReturns, categoryWeights, totalAttribution, and summary functions.
Input Arguments
Information about individual asset returns in the portfolio and
benchmark, specified as a table with the number of rows equal to
NumAssets-times-NumPeriods
rows. The column variables are in the following order from left to right:
Period— Column vector of positive whole numbers containing the timePeriodnumbers. For each one of theNumAssetsasset names, thePeriodnumbers range from 1 toNumPeriodswith increments of 1, so that there are a total ofNumAssets-times-NumPeriodsrows. Row 1 is for the first period, row 2 is for the second period, and is repeated for each asset. If thePeriodcolumn is missing fromAssetTable, allPeriodnumbers are internally set to1and all asset returns inAssetTableare assumed to be for the same single period.Name— String column vector containing the individual asset names for the associated returns. There is a total ofNumAssetsunique names, and the names are repeated for eachPeriod.Return— Numeric column vector containing the asset returns in decimals.Category— Categorical vector containing the asset categories (sectors) for the associated asset returns. There is a total ofNumCategoriesunique categories.Portfolio Weight— Numeric vector containing the asset portfolio weights in decimals. The weights are internally normalized so that they sum to1for eachPeriod.Note
The values for
Portfolio Weightmust sum to1for the Brinson model. If the weights do not sum to1, thePortfolio Weightvalues are internally normalized so that they sum to1andbrinsonAttributiondisplays a warning. If there is a cash position, you must account for it as an asset with its own weight so that the weights sum to1.Benchmark Weight— Numeric vector containing the asset benchmark weights in decimals. The weights are internally normalized so that they sum to1for eachPeriod.Note
The values for the
Benchmark Weightmust sum to1for the Brinson model. If the weights do not sum to1, theBenchmark Weightvalues are internally normalized so that they sum to1andbrinsonAttributiondisplays a warning. If there is a cash position, you must account for it as an asset with its own weight so that the weights sum to1.
Note
AssetTable must be a table. Instead of specific
dates and times, the Period column of
AssetTable must have period numbers that
start with 1 and have increments of one. The
multiperiod Brinson model assumes that all returns are for time
periods of equal intervals (for example, monthly, quarterly, and so
on).
Each individual asset must belong to one and
only one category. You can apply Brinson attribution to any
portfolio containing assets with measured returns if each of the
individual asset belongs to one and only one category. Therefore,
you can include a bond or cash holding in the portfolio after
assigning it to its own category (for example,
"Bond" or "Cash") and you
enter its measured returns and weights. If the portfolio's benchmark
does not have the bond or cash holding, then the benchmark weight
for that asset is 0. As for an ETF, you can
decompose the ETF into its individual holdings (for example, about
100 stocks in QQQ) and then enter these stocks into the portfolio
with the associated measured returns, weights (relative to the
overall portfolio, not within the ETF) and associate each stock in
the ETF with a category.
Data Types: table
Output Arguments
Brinson Attribution model, returned as a
brinsonAttributionObj object.
Properties
Total number of assets, specified by
AssetTable.
Data Types: double
Number of assets in the portfolio, specified by
AssetTable.
Data Types: double
Number of assets in the benchmark, specified by
AssetTable.
Data Types: double
Number of time periods, specified by
AssetTable.
Data Types: double
Number of asset categories, specified by the
AssetTable.
Data Types: double
Individual asset names, returned as a
NumAssets-by-1 vector.
Data Types: string
Asset returns, returned as a
NumAssets-by-NumPeriods matrix in
decimals.
Data Types: double
Asset categories (sectors), returned as a
NumAssets-by-NumPeriods
matrix.
Data Types: string
Asset portfolio weights, returned as a
NumAssets-by-NumPeriods matrix in
decimals.
Data Types: double
Asset benchmark weights, returned as a
NumAssets-by-NumPeriods matrix in
decimals.
Data Types: double
Portfolio category returns, returned as a
NumCategories-by-NumPeriods matrix
in decimals.
Data Types: double
Benchmark category returns, returned as a
NumCategories-by-NumPeriods matrix
in decimals.
Data Types: double
Portfolio category weights, returned as a
NumCategories-by-NumPeriods matrix
in decimals.
Data Types: double
Benchmark category weights, returned as a
NumCategories-by-NumPeriods matrix
in decimals.
Data Types: double
Total portfolio return, returned as a scalar decimal.
Data Types: double
Total benchmark return, returned as a scalar decimal.
Data Types: double
Total active return, returned as a scalar decimal.
Data Types: double
Object Functions
categoryAttribution | Compute performance attribution for portfolio of each category |
categoryReturns | Compute aggregate and periodic category returns |
categoryWeights | Compute average and periodic category weights |
totalAttribution | Compute total performance attribution by Brinson model |
summary | Summarize performance attribution by Brinson model |
categoryReturnsChart | Create horizontal bar chart of category returns |
categoryWeightsChart | Create a horizontal bar chart for category weights |
attributionsChart | Create horizontal bar chart of performance attribution |
Examples
This example shows how to create a brinsonAttribution object that you can then use with the categoryAttribution, categoryReturns, categoryWeights, totalAttribution, and summary functions. Also, you can generate plots for the results, using categoryReturnsChart, categoryWeightsChart, and attributionsChart.
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 (sectors) 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: [4×1 string]
AssetReturn: [4×3 double]
AssetCategory: [4×3 categorical]
PortfolioAssetWeight: [4×3 double]
BenchmarkAssetWeight: [4×3 double]
PortfolioCategoryReturn: [2×3 double]
BenchmarkCategoryReturn: [2×3 double]
PortfolioCategoryWeight: [2×3 double]
BenchmarkCategoryWeight: [2×3 double]
PortfolioReturn: 0.0598
BenchmarkReturn: 0.0540
ActiveReturn: 0.0059
You use brinsonAttribution object with the categoryAttribution, categoryReturns, categoryWeights, totalAttribution, and summary functions for the anlaysis. Also, you can generate plots for the results, using categoryReturnsChart, categoryWeightsChart, and attributionsChart.
More About
Performance attribution supports methods for single periods over relatively short time spans (monthly) and multiple periods compounded over longer time spans (quarterly or a yearly).
The Brinson single-period sector-based (category-based) performance attribution is represented as:
where
rP,t — Portfolio return for period t
rb,t — Benchmark return for period t
rυ,t — Value-added return for period t
N — Number of sectors
wPj,t — Portfolio weight for sector j and period t
rPj,t — Portfolio return for sector j and period t
wBj,t — Benchmark weight for sector j and period t
rBj,t — Benchmark return for sector j and period t
Sj,t — Sector allocation effect for sector j and period t
Uj,t — Allocation and sector interaction effect for sector j and period t
Ij,t — Issue sector effect for sector j and period t
Multiperiod performance attribution, uses two main styles of performance attribution: arithmetic and geometric. In the arithmetic performance attribution, which is the method that the Brinson model uses, the relative performance between the portfolio and benchmark is measured by subtracting the benchmark return from the portfolio return. In the geometric performance attribution, the relative performance between the portfolio and benchmark is measured by a ratio based on the portfolio and benchmark returns.
The optimized linking algorithm by Menchero [3] extends the single-period arithmetic performance attribution to multiple periods by introducing the optimized linking coefficient βt for each period before adding the single-period attributions. This step overcomes the fact that each single-period attribution does not simply add over multiple periods, because the optimized linking coefficient βt reconciles the difference that arises between simple arithmetic addition and geometric compounding. As a result, the single-period Brinson model can be extended to multiple periods by using the following optimized linking algorithm:
where
rp — Portfolio return over multiple periods
rB — Benchmark return over multiple periods
rυ — Value-added return over multiple periods
rP,t — Portfolio return for period t
rB,t — Benchmark return for period t
βt — Optimized linking coefficient for period t
T — Number of periods
N — Number of sectors
Sj,t — Sector allocation effect for sector j and period t
Uj,t — Allocation and selection interaction effect for sector j and period t
Ij,t — Issue selection effect for sector j and period t
Sj,t — Sector allocation effect for sector j over multiple periods
Uj,t — Allocation and sector interaction effect for sector j over multiple periods
Ij,t — Issue sector effect for sector j over multiple periods
In Menchero's optimized linking algorithm shown above, the optimized linking coefficient βt is computed for each period using rP, rB, rP,t, rB,t, and T. This algorithm allows extending the Brinson model to multiple periods while achieving the resulting desirable properties that are similar to the geometric multiperiod performance attribution.
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 R2022bUsing a brinsonAttribution object, you can use the following
charting functions: categoryReturnsChart, categoryWeightsChart, and attributesChart.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)