Methodology — Multi-period (linked) Brinson attribution
The PORT Attribution tab's default. This page explains what the linked attribution
computes and why it is trustworthy. The exact period-construction parameters, exclusion
thresholds and gating rules are proprietary calibration and deliberately not enumerated.
Why linked, not single-period
A single Brinson–Fachler computation run over a multi-year window with today's weights has
two distortions: look-ahead (today's book and today's benchmark weights did not exist at window
start) and a compounding gap (sector effects computed on multi-year total returns cannot
reconcile to a compounded active return except by accident). Industry practice — including
Bloomberg PORT — is to run single-period attribution per month and link the monthly effects
across the window. That is what we do.
The method
- Monthly grid. The analysis window is broken into calendar months; sector effects are
computed per month with that month's beginning weights and that month's returns
(Brinson–Fachler (1985) allocation / selection / interaction — see the
single-period Brinson methodology).
- Weights per period. Without a transaction record, per-month weights are derived from a
buy-and-hold counterfactual consistent with each holding's own realized returns —
disclosed in the tab as "assumes the current book was held, unrebalanced, through the
window." The benchmark side applies the same drift arithmetic to cap-weighted sector
proxies, which removes the benchmark-side look-ahead. Holdings whose price history does not
adequately cover the window are excluded from the linked computation, with the excluded
weight disclosed rather than silently absorbed.
- Carino linking. Monthly effects are combined with Carino logarithmic linking
coefficients (Carino, 1999) — the same standard linking used for
contribution-to-return — so that the linked sector effects sum exactly
to the true compounded active return over the window. This reconciliation is test-pinned;
it is the defining invariant of the method.
Transaction-aware mode (saved portfolios)
When the analysis references a saved portfolio with a dated transaction ledger that fully
covers the window, the counterfactual is replaced by actual positions: beginning-of-month
weights come from the ledger's dated quantities at as-of prices, and each sector sleeve's
monthly return is a Modified Dietz return with intra-month trades as time-weighted external
flows (see the Modified Dietz methodology) — so trades move capital without
masquerading as performance. The mode is all-or-nothing: partial ledger coverage never blends
conventions. When the ledger can't support the computation the tab falls back to the
counterfactual mode and says why — never silently.
Honest limits (disclosed in the tab)
- The counterfactual mode assumes no trades over the window — like every static-book
attribution, it attributes a hypothetical held book.
- The benchmark composition is today's universe drifted back, not point-in-time index
membership — index adds/drops are invisible.
- ETF look-through uses today's constituents.
- The chain covers the window's jointly-priced months; months priced on only one side are
trimmed with a caveat, and a gap in the middle abstains rather than splicing compounding
around it.
- Mid-month entries join the weights at the next month start (their entry-month P&L is not
attributed), and positions opened and closed within a single month never appear in the
weights; both conventions are disclosed in the tab when they bind.