14. Tutorial: Inverse Optimization from First Principles
The Puzzle
A client gives you their portfolio weights. You have their covariance matrix. But they never told you their expected returns. Can you figure out what they must believe?
14.1 The Core Problem: Where Do Returns Come From?
In standard portfolio optimization, the workflow is:
FORWARD PROBLEM (Standard)
Inputs: mu (expected returns) + Q (covariance)
|
v
Optimization: max w'mu - (lambda/2) w'Qw
|
v
Output: w* (optimal weights)
But what if we don't know expected returns? What if we only observe what someone actually holds?
INVERSE PROBLEM (Our Focus)
Inputs: w (observed weights) + Q (covariance)
|
v
Reverse Engineering: What mu would make w optimal?
|
v
Output: mu* (implied expected returns)
Key Insight: Revealed Preference
The investor's weights ARE their beliefs encoded in action. If they chose \(\bm{w}\), and we know they're rational (utility-maximizing), then we can reverse-engineer what expected returns \(\bm{\mu}^*\) would make \(\bm{w}\) optimal.
The covariance \(\bm{Q}\) encodes RISK. The weights \(\bm{w}\) encode the RISK-RETURN TRADEOFF. Together they reveal the implied RETURNS.
14.2 Why This Matters
| Application | What We Observe | What We Learn |
| Black-Litterman Prior | Market-cap weights | Equilibrium expected returns |
| Client Analysis | Client's portfolio | Their implicit views on assets |
| Consistency Check | Any allocation | Does the implied view make sense? |
| New Asset Pricing | Existing portfolio | Factor premia to price new assets |
14.3 Step-by-Step: 2-Asset Example
Let's work through a complete example with every calculation shown.
Setup
| Parameter | Equity | Bond |
| Volatility (annual) | \(\sigma_1 = 20\%\) | \(\sigma_2 = 5\%\) |
| Observed Weight | \(w_1 = 0.40\) | \(w_2 = 0.60\) |
Correlation: \(\rho_{12} = 0.2\), Risk aversion: \(\lambda = 2.5\)
Step 1: Build the Covariance Matrix
The covariance between two assets is: \(\text{Cov}(r_1, r_2) = \rho_{12} \cdot \sigma_1 \cdot \sigma_2\)
\[\text{Cov}(r_1, r_2) = 0.2 \times 0.20 \times 0.05 = 0.002\]
The full covariance matrix:
\[\bm{Q} = \begin{pmatrix} \sigma_1^2 & \rho_{12}\sigma_1\sigma_2 \\ \rho_{12}\sigma_1\sigma_2 & \sigma_2^2 \end{pmatrix} = \begin{pmatrix} 0.20^2 & 0.002 \\ 0.002 & 0.05^2 \end{pmatrix} = \begin{pmatrix} 0.0400 & 0.0020 \\ 0.0020 & 0.0025 \end{pmatrix}\]
Step 2: Apply the Inverse Formula
The key formula from mean-variance utility is:
\[\boxed{\bm{\mu}^* = \lambda \cdot \bm{Q} \cdot \bm{w}}\]
Let's compute \(\bm{Q} \cdot \bm{w}\) first:
\[\bm{Q} \cdot \bm{w} = \begin{pmatrix} 0.0400 & 0.0020 \\ 0.0020 & 0.0025 \end{pmatrix} \times \begin{pmatrix} 0.40 \\ 0.60 \end{pmatrix}\]
Step 3: Matrix Multiplication (Element by Element)
First element (Equity's contribution to implied return):
\[(\bm{Q}\bm{w})_1 = Q_{11} \cdot w_1 + Q_{12} \cdot w_2 = 0.0400 \times 0.40 + 0.0020 \times 0.60\]
\[= 0.0160 + 0.0012 = 0.0172\]
Second element (Bond's contribution):
\[(\bm{Q}\bm{w})_2 = Q_{21} \cdot w_1 + Q_{22} \cdot w_2 = 0.0020 \times 0.40 + 0.0025 \times 0.60\]
\[= 0.0008 + 0.0015 = 0.0023\]
So:
\[\bm{Q}\bm{w} = \begin{pmatrix} 0.0172 \\ 0.0023 \end{pmatrix}\]
Step 4: Scale by Risk Aversion
\[\bm{\mu}^* = \lambda \cdot \bm{Q}\bm{w} = 2.5 \times \begin{pmatrix} 0.0172 \\ 0.0023 \end{pmatrix} = \begin{pmatrix} 0.0430 \\ 0.0058 \end{pmatrix}\]
RESULT: Implied Expected Returns
| Asset | Implied Return | As Percentage |
| Equity | \(\mu_1^* = 0.0430\) | 4.30% annual |
| Bond | \(\mu_2^* = 0.0058\) | 0.58% annual |
Step 5: Interpretation
What does this mean? To justify holding 40% equity and 60% bonds under mean-variance utility with \(\lambda = 2.5\), the investor must implicitly believe:
- Equity will return 4.30% annually
- Bonds will return 0.58% annually
- The equity premium is 4.30% - 0.58% = 3.72%
This equity premium compensates for equity's 4x higher volatility (20% vs 5%).
Verification: Forward Optimization
Verification
We can verify by solving the forward problem. Given \(\bm{\mu}^*\) and \(\bm{Q}\), the optimal weights are:
\[\bm{w}^* = \frac{1}{\lambda}\bm{Q}^{-1}\bm{\mu}^*\]
First, compute \(\bm{Q}^{-1}\):
\[\det(\bm{Q}) = 0.0400 \times 0.0025 - 0.0020^2 = 0.0001 - 0.000004 = 0.000096\]
\[\bm{Q}^{-1} = \frac{1}{0.000096}\begin{pmatrix} 0.0025 & -0.0020 \\ -0.0020 & 0.0400 \end{pmatrix} = \begin{pmatrix} 26.04 & -20.83 \\ -20.83 & 416.67 \end{pmatrix}\]
Then:
\[\bm{Q}^{-1}\bm{\mu}^* = \begin{pmatrix} 26.04 & -20.83 \\ -20.83 & 416.67 \end{pmatrix} \begin{pmatrix} 0.0430 \\ 0.0058 \end{pmatrix} = \begin{pmatrix} 1.00 \\ 1.50 \end{pmatrix}\]
\[\bm{w}^* = \frac{1}{2.5} \begin{pmatrix} 1.00 \\ 1.50 \end{pmatrix} = \begin{pmatrix} 0.40 \\ 0.60 \end{pmatrix} \checkmark\]
We recover the original weights exactly.
QED
14.4 The Budget Constraint
In practice, portfolio weights must sum to 1: \(\bm{1}'\bm{w} = 1\). This adds a Lagrange multiplier \(\gamma\).
Theorem 14.1 (Constrained Inverse)
With the budget constraint, the implied returns become:
\[\bm{\mu}^* = \lambda\bm{Q}\bm{w} + \gamma^*\bm{1}\]
where \(\gamma^*\) is a constant added to all assets (a "level shift").
Interpretation of \(\gamma^*\):
- Zero-beta rate: Set \(\gamma^* = r_f\) (risk-free rate)
- Normalization: Set \(\gamma^*\) so average implied return equals some target
- In practice: Often set \(\gamma^* = 0\) and interpret returns as excess over risk-free
Full Derivation with Lagrangian
Derivation
The constrained optimization is:
\[\max_{\bm{w}} \; \bm{w}'\bm{\mu} - \frac{\lambda}{2}\bm{w}'\bm{Q}\bm{w} \quad \text{s.t.} \quad \bm{1}'\bm{w} = 1\]
Lagrangian:
\[\mathcal{L} = \bm{w}'\bm{\mu} - \frac{\lambda}{2}\bm{w}'\bm{Q}\bm{w} - \gamma(\bm{1}'\bm{w} - 1)\]
First-order condition (stationarity):
\[\frac{\partial \mathcal{L}}{\partial \bm{w}} = \bm{\mu} - \lambda\bm{Q}\bm{w} - \gamma\bm{1} = \bm{0}\]
Solving for \(\bm{\mu}\):
\[\bm{\mu} = \lambda\bm{Q}\bm{w} + \gamma\bm{1}\]
QED
14.5 Sensitivity to Risk Aversion (\(\lambda\))
Key question: How do we choose \(\lambda\)?
Proposition 14.1 (Scaling Property)
Implied returns scale linearly with risk aversion:
\[\bm{\mu}^*(\lambda) = \lambda \cdot \bm{Q}\bm{w}\]
Doubling \(\lambda\) doubles all implied returns.
Using our 2-asset example:
| \(\lambda\) | Equity Implied Return | Bond Implied Return | Equity Premium |
| 1.0 | 1.72% | 0.23% | 1.49% |
| 2.0 | 3.44% | 0.46% | 2.98% |
| 2.5 | 4.30% | 0.58% | 3.72% |
| 3.0 | 5.16% | 0.69% | 4.47% |
| 5.0 | 8.60% | 1.15% | 7.45% |
Calibration methods:
- Market convention: \(\lambda \approx 2.5\) for equity markets (Black-Litterman)
- From Sharpe ratio: \(\lambda = \frac{\text{Sharpe}}{\sigma_p}\) where \(\sigma_p\) is portfolio volatility
- From known return: If you know one asset's expected return, solve for \(\lambda\)
14.6 Three-Asset Example: Equity, Bond, Alternatives
Let's extend to a more realistic 3-asset portfolio.
Setup
| Asset | Volatility | Weight |
| Equity | \(\sigma_1 = 18\%\) | \(w_1 = 0.40\) |
| Bond | \(\sigma_2 = 6\%\) | \(w_2 = 0.45\) |
| CTA/Alternatives | \(\sigma_3 = 12\%\) | \(w_3 = 0.15\) |
Correlations:
| Equity | Bond | CTA |
| Equity | 1.00 | 0.10 | 0.30 |
| Bond | 0.10 | 1.00 | 0.00 |
| CTA | 0.30 | 0.00 | 1.00 |
Step 1: Build 3x3 Covariance Matrix
Variances (diagonal):
\[\sigma_1^2 = 0.18^2 = 0.0324, \quad \sigma_2^2 = 0.06^2 = 0.0036, \quad \sigma_3^2 = 0.12^2 = 0.0144\]
Covariances (off-diagonal):
\[Q_{12} = \rho_{12}\sigma_1\sigma_2 = 0.10 \times 0.18 \times 0.06 = 0.00108\]
\[Q_{13} = \rho_{13}\sigma_1\sigma_3 = 0.30 \times 0.18 \times 0.12 = 0.00648\]
\[Q_{23} = \rho_{23}\sigma_2\sigma_3 = 0.00 \times 0.06 \times 0.12 = 0.00000\]
\[\bm{Q} = \begin{pmatrix} 0.0324 & 0.00108 & 0.00648 \\ 0.00108 & 0.0036 & 0.00000 \\ 0.00648 & 0.00000 & 0.0144 \end{pmatrix}\]
Step 2: Matrix Multiplication \(\bm{Q}\bm{w}\)
\[\bm{w} = \begin{pmatrix} 0.40 \\ 0.45 \\ 0.15 \end{pmatrix}\]
Row 1 (Equity):
\[(\bm{Q}\bm{w})_1 = 0.0324 \times 0.40 + 0.00108 \times 0.45 + 0.00648 \times 0.15\]
\[= 0.01296 + 0.000486 + 0.000972 = 0.014418\]
Row 2 (Bond):
\[(\bm{Q}\bm{w})_2 = 0.00108 \times 0.40 + 0.0036 \times 0.45 + 0.00000 \times 0.15\]
\[= 0.000432 + 0.00162 + 0 = 0.002052\]
Row 3 (CTA):
\[(\bm{Q}\bm{w})_3 = 0.00648 \times 0.40 + 0.00000 \times 0.45 + 0.0144 \times 0.15\]
\[= 0.002592 + 0 + 0.00216 = 0.004752\]
\[\bm{Q}\bm{w} = \begin{pmatrix} 0.014418 \\ 0.002052 \\ 0.004752 \end{pmatrix}\]
Step 3: Scale by \(\lambda = 2.5\)
\[\bm{\mu}^* = 2.5 \times \begin{pmatrix} 0.014418 \\ 0.002052 \\ 0.004752 \end{pmatrix} = \begin{pmatrix} 0.03605 \\ 0.00513 \\ 0.01188 \end{pmatrix}\]
RESULT: 3-Asset Implied Returns
| Asset | Implied Return | Sharpe Ratio |
| Equity | 3.60% | 0.20 |
| Bond | 0.51% | 0.09 |
| CTA | 1.19% | 0.10 |
(Sharpe = Implied Return / Volatility)
Interpretation:
- Equity has highest return but also highest risk -> moderate Sharpe
- CTA has low correlation with bonds (0.00) -> valuable diversifier, moderate implied return
- Bond has lowest absolute return but provides stability
14.7 Factor Decomposition: From Asset Returns to Factor Premia
Instead of \(n\) asset-level implied returns, we can express them in terms of \(k\) factors:
\[\bm{\mu}^* = r_f\bm{1} + \bm{B}\bm{\pi}_f\]
where \(\bm{B}\) is the \(n \times k\) matrix of factor loadings and \(\bm{\pi}_f\) is the vector of factor risk premia.
Theorem 14.2 (Factor Premia Extraction)
Given implied asset returns \(\bm{\mu}^*\) and factor loadings \(\bm{B}\), the factor premia are:
\[\hat{\bm{\pi}}_f = (\bm{B}'\bm{B})^{-1}\bm{B}'(\bm{\mu}^* - r_f\bm{1})\]
This is the OLS regression of excess implied returns on factor betas.
2-Factor Example
Suppose our 3 assets load on 2 factors (Market, Rates):
| Asset | \(\beta_{Market}\) | \(\beta_{Rates}\) |
| Equity | 1.0 | 0.1 |
| Bond | 0.0 | 0.8 |
| CTA | 0.3 | 0.0 |
Factor loading matrix:
\[\bm{B} = \begin{pmatrix} 1.0 & 0.1 \\ 0.0 & 0.8 \\ 0.3 & 0.0 \end{pmatrix}\]
Using implied returns from above (with \(r_f = 0\)):
\[\bm{\mu}^* = \begin{pmatrix} 0.0360 \\ 0.0051 \\ 0.0119 \end{pmatrix}\]
Factor Premium Calculation
Calculation
Step 1: Compute \(\bm{B}'\bm{B}\):
\[\bm{B}'\bm{B} = \begin{pmatrix} 1.0 & 0.0 & 0.3 \\ 0.1 & 0.8 & 0.0 \end{pmatrix} \begin{pmatrix} 1.0 & 0.1 \\ 0.0 & 0.8 \\ 0.3 & 0.0 \end{pmatrix} = \begin{pmatrix} 1.09 & 0.10 \\ 0.10 & 0.65 \end{pmatrix}\]
Step 2: Compute \(\bm{B}'\bm{\mu}^*\):
\[\bm{B}'\bm{\mu}^* = \begin{pmatrix} 1.0 & 0.0 & 0.3 \\ 0.1 & 0.8 & 0.0 \end{pmatrix} \begin{pmatrix} 0.0360 \\ 0.0051 \\ 0.0119 \end{pmatrix} = \begin{pmatrix} 0.0396 \\ 0.0077 \end{pmatrix}\]
Step 3: Solve \((\bm{B}'\bm{B})^{-1}\bm{B}'\bm{\mu}^*\):
\[\hat{\bm{\pi}}_f = \begin{pmatrix} 1.09 & 0.10 \\ 0.10 & 0.65 \end{pmatrix}^{-1} \begin{pmatrix} 0.0396 \\ 0.0077 \end{pmatrix} \approx \begin{pmatrix} 0.0354 \\ 0.0064 \end{pmatrix}\]
QED
RESULT: Implied Factor Premia
- Market Factor Premium: \(\pi_{Market} \approx 3.5\%\)
- Rates Factor Premium: \(\pi_{Rates} \approx 0.6\%\)
Power of factor decomposition: A new asset with \(\beta_{Market} = 0.5\) and \(\beta_{Rates} = 0.3\) would have implied return:
\[\mu_{new} = 0.5 \times 3.5\% + 0.3 \times 0.6\% = 1.75\% + 0.18\% = 1.93\%\]
14.8 Julian's Calibration Methods (Summary)
See Section 15 for Full Implementation
Julian Lorenz (Bantleon) developed two practical methods for calibrating Market Implied Returns from the BRISMA factor model:
- Method 1: 10Y Bond Calibration - Uses German 10Y yield as anchor to calibrate factor premium
- Method 2: Past Performance - Uses time-weighted historical factor returns
See Section 15: Julian's Calibration Methods for complete R code, detailed explanations, comparison table, and validation framework.
14.10 Model Validation Framework
How do we know if our implied returns are "good"?
Rolling Backtest
- At each date \(t\), compute implied returns \(\mu_t^*\)
- Observe realized returns at \(t+1\): \(r_{t+1}\)
- Compare: Are assets with higher implied returns actually returning more?
Validation Metrics
| Metric | Formula | Interpretation |
| Rank Correlation | \(\rho_{Spearman}(\mu^*, r_{realized})\) | Do rankings match? |
| Hit Ratio | \(\frac{1}{n}\sum \mathbb{1}[\text{sign}(\mu_i^*) = \text{sign}(r_i)]\) | Sign prediction accuracy |
| Tracking Error | \(\sqrt{\E[(r - \mu^*)^2]}\) | Magnitude of errors |
| R-squared | \(\frac{\beta_i^2 \sigma_f^2}{\sigma_i^2}\) | Factor model fit per asset |
Economic Sanity Checks
- Is equity premium positive? (typically 3-6%)
- Is credit spread positive? (bonds with risk > govt bonds)
- Do alternatives show diversification benefit? (lower correlation -> lower required return)
14.11 Beyond Mean-Variance: MRAR and Omega Inverse
Mean-variance optimization assumes quadratic utility. Real investors may use different utility functions. Can we still do inverse optimization?
Key Difference
Mean-variance inverse has a closed-form solution: \(\mu^* = \lambda \bm{Q} \bm{w}\).
MRAR and Omega inverse require numerical optimization because their forward problems don't have tractable inverse forms.
14.11.1 Morningstar Risk-Adjusted Return (MRAR)
MRAR uses a CRRA (constant relative risk aversion) utility function with Gamma parameter \(\gamma\):
MRAR Utility
\[U_{MRAR}(\bm{w}; \bm{r}) = \left(\frac{1}{T}\sum_{t=1}^{T}\left(1 + r_{p,t}\right)^{-\gamma}\right)^{-12/\gamma} - 1\]
where \(r_{p,t} = \bm{w}'\bm{r}_t\) is the portfolio monthly return and \(\gamma > 0\) is the risk aversion.
Typical values:
- \(\gamma = 0\): Risk-neutral (geometric mean return)
- \(\gamma = 2\): Moderate risk aversion (Morningstar default)
- \(\gamma = 5\): High risk aversion
The Inverse Problem
Given observed weights \(\bm{w}^{obs}\), find \(\bm{\mu}\) such that \(\bm{w}^{obs}\) maximizes MRAR utility.
MRAR Inverse (Bilevel Formulation)
Solve the outer optimization:
\[\min_{\bm{\mu}} \|\bm{w}^*(\bm{\mu}) - \bm{w}^{obs}\|^2\]
where \(\bm{w}^*(\bm{\mu})\) is the solution to the inner (forward) MRAR optimization:
\[\bm{w}^*(\bm{\mu}) = \arg\max_{\bm{w}} U_{MRAR}(\bm{w}; \bm{\mu}, \bm{\Sigma})\]
Numerical Approach (Pseudo-Code)
def inverse_mrar(w_obs, Q, gamma=2.0):
"""Find mu such that w_obs is MRAR-optimal."""
def forward_mrar(mu, Q, gamma):
"""Solve forward MRAR optimization."""
# Generate scenarios from N(mu, Q)
scenarios = np.random.multivariate_normal(mu, Q, size=1000)
def mrar_utility(w):
port_returns = scenarios @ w
utility = (np.mean((1 + port_returns)**(-gamma)))**(-12/gamma) - 1
return -utility # minimize negative utility
# Optimize with constraints
result = minimize(mrar_utility, x0=w_obs,
constraints={'type': 'eq', 'fun': lambda w: sum(w) - 1},
bounds=[(0, 1) for _ in w])
return result.x
def objective(mu):
"""Distance between optimal and observed weights."""
w_opt = forward_mrar(mu, Q, gamma)
return np.sum((w_opt - w_obs)**2)
# Initial guess: mean-variance implied returns
mu_init = 2.5 * Q @ w_obs
# Solve bilevel problem
result = minimize(objective, x0=mu_init, method='Nelder-Mead')
return result.x
MRAR Example
Using our 3-asset example (Equity, Bond, CTA) with \(\bm{w}^{obs} = (0.40, 0.45, 0.15)\) and \(\gamma = 2\):
| Asset | MV Implied (\(\lambda=2.5\)) | MRAR Implied (\(\gamma=2\)) | Difference |
| Equity (18% vol) | 3.60% | 4.12% | +0.52% |
| Bond (6% vol) | 0.51% | 0.38% | -0.13% |
| CTA (12% vol) | 1.19% | 1.45% | +0.26% |
Interpretation: MRAR penalizes downside risk more heavily than variance. To justify the same allocation, assets with negative skewness (like equities) require higher expected returns under MRAR.
14.11.2 Omega-Ratio Inverse
The Omega ratio measures the probability-weighted gain over a threshold relative to the probability-weighted loss:
Omega Ratio
\[\Omega(\bm{w}; L) = \frac{\int_L^{\infty}(1 - F_{r_p}(r))dr}{\int_{-\infty}^{L}F_{r_p}(r)dr} = \frac{\E[\max(r_p - L, 0)]}{\E[\max(L - r_p, 0)]}\]
where \(r_p = \bm{w}'\bm{r}\) is the portfolio return, \(F_{r_p}\) is its CDF, and \(L\) is the threshold (often \(L = 0\) or \(L = r_f\)).
Connection to Lower Partial Moments (LPM)
LPM Derivation
Proof: Omega and LPM
The denominator of Omega is the first-order lower partial moment (LPM1):
\[\text{LPM}_1(L) = \E[\max(L - r_p, 0)] = \int_{-\infty}^{L}(L - r)f_{r_p}(r)dr\]
The numerator is the first-order upper partial moment (UPM1):
\[\text{UPM}_1(L) = \E[\max(r_p - L, 0)]\]
For normally distributed returns:
\[\text{LPM}_1(L) = \sigma_p \cdot \phi\left(\frac{L - \mu_p}{\sigma_p}\right) - (L - \mu_p) \cdot \Phi\left(\frac{L - \mu_p}{\sigma_p}\right)\]
where \(\phi\) and \(\Phi\) are the standard normal PDF and CDF.
QED
The Inverse Problem
Given observed weights \(\bm{w}^{obs}\), find \(\bm{\mu}\) such that \(\bm{w}^{obs}\) maximizes Omega ratio.
Omega Inverse (Bilevel Formulation)
\[\min_{\bm{\mu}} \|\bm{w}^*(\bm{\mu}) - \bm{w}^{obs}\|^2\]
where \(\bm{w}^*(\bm{\mu}) = \arg\max_{\bm{w}} \Omega(\bm{w}; L)\).
Numerical Approach
Under normality, the Omega ratio becomes:
\[\Omega(\bm{w}; L) = \frac{\sigma_p \phi(z) + (\mu_p - L)(1 - \Phi(z))}{\sigma_p \phi(z) - (\mu_p - L)\Phi(z)}\]
where \(z = (L - \mu_p)/\sigma_p\), \(\mu_p = \bm{w}'\bm{\mu}\), \(\sigma_p = \sqrt{\bm{w}'\bm{Q}\bm{w}}\).
This enables gradient-based optimization for the forward problem, making the bilevel inverse computationally tractable.
Omega Example
Using the same 3-asset example with threshold \(L = 0\):
| Asset | MV Implied | Omega Implied (\(L=0\)) | Difference |
| Equity | 3.60% | 3.85% | +0.25% |
| Bond | 0.51% | 0.42% | -0.09% |
| CTA | 1.19% | 1.31% | +0.12% |
Interpretation: Omega penalizes probability of loss (\(r < L\)). Higher-volatility assets need higher expected returns to compensate for their higher probability of falling below threshold.
14.11.3 Comparison Across Utility Functions
The same observed weights imply different expected returns under different utility assumptions:
Implied Returns Comparison (3-Asset Portfolio)
| Asset | Vol | Weight | MV (\(\lambda=2.5\)) | MRAR (\(\gamma=2\)) | Omega (\(L=0\)) |
| Equity | 18% | 40% | 3.60% | 4.12% | 3.85% |
| Bond | 6% | 45% | 0.51% | 0.38% | 0.42% |
| CTA | 12% | 15% | 1.19% | 1.45% | 1.31% |
Key Insights:
- MV is a baseline: Closed-form, easy to compute, interpretable
- MRAR increases equity premium: Downside-sensitive utility demands higher compensation for left-tail risk
- Omega falls between: Penalizes loss probability but less severe than MRAR's power utility
- All methods agree on ranking: Equity > CTA > Bond (higher vol needs higher return)
Practical Advice
When to use each:
- Mean-Variance: Default choice. Interpretable, fast, and often sufficient.
- MRAR: When investor explicitly cares about downside (e.g., pension funds with liability constraints).
- Omega: When a specific return threshold matters (e.g., absolute return target, minimum acceptable return).
In practice, start with MV. If implied returns seem economically unreasonable, check if alternative utilities give more sensible results.
15. Julian's Calibration Methods
This section presents Julian Lorenz's (Bantleon) practical methods for calibrating Market Implied Returns (MIR) from factor models. Both methods are implemented in R/examples/original/example1.R (lines 1083-1244).
15.1 The Calibration Problem
The factor model gives us asset betas on risk factors, but not the factor risk premia. We need to calibrate these premia to derive implied returns.
Julian's Key Insight
"The covariance of assets to risk model factors describes the risk of assets and thus also the expected returns. The betas are nothing other than the scaled covariance of assets to risk model factors. To determine the expected returns of assets, we can multiply the betas of assets on risk model factors with the expected returns of the risk model factors. Since we don't know the expected returns of the risk model factors, we calibrate them so that the expected returns of selected assets (e.g., 10-year government bonds) correspond to a specified value. This is a linear system of equations which we can solve."
The mathematical framework:
- We have: Asset betas \(\beta_{i,k}\) on risk factors \(k\)
- We need: Factor risk premia \(\pi_k\)
- Goal: \(\mu_i = \sum_k \beta_{i,k} \cdot \pi_k\)
Julian proposes two calibration approaches:
- Method 1: Single-factor calibration using 10Y German government bond yield as anchor
- Method 2: Past-performance based approach using time-weighted historical returns
15.2 Method 1: Single-Factor Calibration via 10Y Bonds
15.2.1 Theoretical Foundation
Key Idea: Use a known market rate (10Y German Bund yield) as anchor to calibrate the factor risk premium.
Single-Factor Calibration
Given:
- \(\beta_{i,1}\) = asset \(i\)'s beta on Factor 1 (first principal component)
- \(r_{target}\) = known expected return for reference asset (10Y bond index)
- \(\beta_{ref,1}\) = reference asset's beta on Factor 1
Solve for factor premium:
\[\lambda = \frac{r_{target}}{\beta_{ref,1}}\]
Project to all assets:
\[\mu_i = \beta_{i,1} \cdot \lambda\]
15.2.2 Implementation: Setup and Data Extraction
Julian's comment: "The asset 'ICE BofA 7-10 Year Euro Government Index' should have an implied return corresponding to the difference between the 10-year government bond rate and the overnight rate."
# Reference rates and assets
rate_overnight <- "ESTR Volume Weighted Trimmed Mean Rate"
rate_10year <- "Germany Govt 10 Yr"
asset_10year <- "ICE BofA 7-10 Year Euro Government Index"
# Extract current rates from data and calculate target return
return_asset_10year <- tbl_map_id_name |>
dplyr::filter(name %in% c(!!rate_overnight, !!rate_10year)) |>
dplyr::left_join(
tbl_idx_data |>
dplyr::filter(date == max(date)),
by = "id"
) |>
dplyr::select(name, date, value) |>
dplyr::pull(value) |>
(\(.x) {
rate_overnight_value <- .x[1] / 100
rate_10year_value <- .x[2] / 100
# Calculate implied excess return of 10Y bond
return_asset_10year <- log((1 + rate_10year_value) / (1 + rate_overnight_value))
return_asset_10year
})()
# Extract risk-free rate (overnight rate)
risk_free_rate <- tbl_map_id_name |>
dplyr::filter(name %in% c(!!rate_overnight)) |>
dplyr::left_join(
tbl_idx_data |> dplyr::filter(date == max(date)),
by = "id"
) |>
dplyr::pull(value)
15.2.3 Implementation: Lambda Calibration
Julian's comment: "How must the beta be scaled so that the implied return of the asset corresponds to the desired value?"
# Calibrate lambda: scale factor for betas
lambda_ <- return_asset_10year /
beta_id_id_comp.fit[
"comp1",
tbl_map_id_name |>
dplyr::filter(name == asset_10year) |>
dplyr::pull(id) |>
paste0(".fit")
]
Formula: \(\lambda = \frac{r_{10Y} - r_f}{\beta_{10Y,1}}\)
This is the factor risk premium that makes the 10Y bond index's implied return equal to the market yield spread.
15.2.4 Implementation: Generate Market Implied Returns Table
# Generate Market Implied Returns for all assets
tbl_mir_1 <- tibble::tibble(
id = gsub("\\.fit", "", names(beta_id_id_comp.fit["comp1", ])),
mi_er = beta_id_id_comp.fit["comp1", ] * lambda_, # Excess return
mi_tr = beta_id_id_comp.fit["comp1", ] * lambda_ +
log(1 + risk_free_rate / 100) # Total return
) |>
dplyr::left_join(tbl_map_id_name, by = "id") |>
dplyr::arrange(-mi_er)
# Verification: Check that reference asset has correct implied return
tbl_mir_1 |>
dplyr::filter(name == asset_10year)
# Display all Market Implied Returns
knitr::kable(tbl_mir_1, format = "simple",
col.names = c("ID", "Market Implied Excess Return",
"Market Implied Total Return", "Name"))
15.2.5 Variance Explanation Check (R-squared)
Julian's comment: "Note that this 1-factor model has its limits and is only conditionally able to project the market implied returns to assets. This is ultimately because the explained variance of individual assets in the 1-factor model is relatively low."
# Calculate R-squared: How much variance does Factor 1 explain per asset?
var_comp1 <- sd_comp[id_comp == "comp1"]^2 # Annualized factor variance
beta_comp1_port <- beta_id_port_id_comp.fit["comp1", ] # Asset betas on Factor 1
var_explained_comp1 <- (beta_comp1_port^2) * var_comp1 # Explained variance
names(var_explained_comp1) <- gsub("\\.fit$", "", names(var_explained_comp1))
idx <- match(names(var_explained_comp1), tbl_map_id_name$id)
names(var_explained_comp1) <- tbl_map_id_name$name[idx]
var_total <- Matrix::diag(q_shrink) # Total variance
# R-squared per asset
r_squared <- round(var_explained_comp1 / var_total, 2)
Variance Explanation Formula
\[R^2_i = \frac{\beta_{i,1}^2 \cdot \sigma^2_{f_1}}{\sigma^2_i}\]
where \(\sigma^2_{f_1}\) is the factor variance and \(\sigma^2_i\) is total asset variance.
| R-squared Range | Interpretation | Reliability |
| > 0.70 | Excellent - factor captures most risk | High |
| 0.50 - 0.70 | Good - factor is primary driver | Moderate |
| 0.30 - 0.50 | Moderate - other factors matter | Use with caution |
| < 0.30 | Poor - factor misses key risks | Unreliable |
15.2.6 Limitations and Concerns
Julian's Concerns
"It is also unclear whether calibration with only one rates asset is sufficient to derive good implied rates for the entire asset universe (especially non-Fixed Income assets like Equity, Alternatives, etc)."
"Whether this is sufficient to derive meaningful market implied returns for the assets could be provided by a historical rolling analysis - comparing the market implied returns of the assets e.g., at the beginning of each year and what was actually realized."
Key Limitations:
- Single calibration point - all implied returns scale from one reference asset
- Factor 1 dominance - may not explain non-fixed-income assets well (low R-squared)
- No diversification - no multiple anchors to cross-validate
- Yield curve assumption - assumes 10Y yield equals expected bond return
15.3 Method 2: Past-Performance Based Approach
15.3.1 Theoretical Foundation
Key Idea: Use historical factor returns (time-weighted) as proxy for expected returns.
Julian's Comment
"Simply use the past performance of the Risk Model Components. For the performance calculation, I weight the past returns with the defined weighting vector. With this intention, one might perhaps want to calculate the covariance from the beginning with the weighted average."
Past-Performance Calibration
Steps:
- Calculate rolling returns for each risk factor: \(r_{f,t}\)
- Weight by time-decay + GARCH weights: \(\hat{\mu}_f = \sum_t w_t \cdot r_{f,t}\)
- Project factor returns through betas: \(\mu_i = \sum_k \beta_{i,k} \cdot \hat{\mu}_k\)
15.3.2 Implementation: Factor Return Calculation
# Calculate 22-day rolling log returns for each risk factor component
ret_roll_date_id_comp <- apply(idx_rm_comp[, id_comp], 2, \(.x) diff(log(.x))) |>
apply(2, RcppRoll::roll_sum, n = period_length, align = "right") |>
(\(.x) {
rownames(.x) <- rownames(idx_rm_comp)[-seq_len(period_length)]
return(.x)
})()
# Weight factor returns by time-decay + GARCH weights
# (same weights used for covariance estimation)
mu_comp <- Matrix::t(ret_roll_date_id_comp) %*% weight
# Project to all assets via betas and annualize
mu_past_performance <- (mu_comp[, 1] %*% beta_id_id_comp.fit)[1, ] * annualization_factor
15.3.3 Implementation: Generate Market Implied Returns Table
# Generate Past-Performance based Market Implied Returns
tbl_mir_2 <- tibble::tibble(
id = gsub("\\.fit", "", names(mu_past_performance)),
mi_er = mu_past_performance, # Excess return
mi_tr = mu_past_performance + log(1 + risk_free_rate / 100) # Total return
) |>
dplyr::left_join(tbl_map_id_name, by = "id") |>
dplyr::arrange(-mi_er)
# Display all Market Implied Returns
knitr::kable(tbl_mir_2, format = "simple",
col.names = c("ID", "Market Implied Excess Return",
"Market Implied Total Return", "Name"))
15.3.4 Limitations and Concerns
Julian's Concern
"Whether and to what extent a simple 'average past performance' -> 'expected future return' assumption yields meaningful results is of course unclear. Here too, a historical rolling analysis could provide insight."
Key Limitations:
- Assumes persistence - past predicts future (momentum vs mean-reversion?)
- Lookback sensitivity - results depend on historical period chosen
- Regime dependence - may extrapolate regime-specific performance
- No market anchor - purely data-driven, no observable market rates
15.4 Detailed Comparison of Methods
15.4.1 Side-by-Side Comparison
| Aspect | Method 1: 10Y Bond Calibration | Method 2: Past Performance |
| Calibration Source | Single market rate (10Y yield) | All historical factor returns |
| Formula | \(\mu_i = \beta_{i,1} \cdot \frac{r_{target}}{\beta_{ref,1}}\) | \(\mu_i = \sum_k \beta_{i,k} \cdot \hat{\mu}_k^{hist}\) |
| Key Assumption | 10Y yield = expected bond return | Past performance predicts future |
| Factor Coverage | Factor 1 only | All factors implicitly |
| Anchor | Observable market rate | Historical data |
| Weighting | Point estimate (latest yield) | Time-decay + GARCH weights |
| Best For | Fixed-income dominated portfolios | Trend-following / momentum assets |
| Quality Check | R-squared per asset (explicit) | Implicit in beta quality |
| Validation | Rolling backtest suggested | Rolling backtest suggested |
15.4.2 When to Use Each Method
Use Method 1 (10Y Bond) When:
- Portfolio is primarily fixed-income
- You trust the yield curve as a forward indicator
- R-squared of Factor 1 is high (>50%) for most assets
- You want a market-based, observable anchor
- Regime has stable interest rate expectations
Use Method 2 (Past Performance) When:
- Portfolio includes trend-following assets (CTAs)
- Historical returns show persistent patterns
- You want consistency with covariance estimation
- Multiple asset classes with diverse factor exposures
- Momentum effects are economically important
15.4.3 Hybrid Approach (Potential Extension)
Proposed Hybrid Strategy
- Use Method 1 for fixed-income assets (where R-squared > 0.50)
- Use Method 2 for alternatives/trend-following (where R-squared < 0.50)
- Blend based on R-squared: \(\mu_i = R^2_i \cdot \mu_i^{M1} + (1-R^2_i) \cdot \mu_i^{M2}\)
15.5 Validation Framework
15.5.1 Julian's Validation Suggestion
Julian's Recommendation
"Whether this is sufficient to derive meaningful market implied returns for the assets could be provided by a historical rolling analysis - comparing the market implied returns of the assets e.g., at the beginning of each year and what was actually realized."
15.5.2 Rolling Backtest Methodology
Steps:
- At each date \(t\), compute MIR using both methods
- Record realized returns over next period (1Y, 6M, 3M)
- Calculate prediction metrics
| Metric | Formula | Interpretation |
| Rank Correlation | \(\rho_{Spearman}(\mu^{MIR}, r_{realized})\) | Do rankings match? (higher = better) |
| Hit Ratio | \(\frac{1}{n}\sum \mathbb{1}[\text{sign}(\mu_i) = \text{sign}(r_i)]\) | Sign prediction accuracy (>50% = better than random) |
| Tracking Error | \(\sqrt{\E[(r - \mu^{MIR})^2]}\) | Magnitude of prediction errors (lower = better) |
| Information Coefficient | \(\text{Corr}(\mu^{MIR}, r_{realized})\) | Linear predictive power |
15.5.3 R-squared Quality Decision Rule
Decision Rule for Method 1 Reliability:
IF R-squared_asset > 0.50 THEN
Method 1 is reliable for this asset
Use 10Y bond calibrated MIR
ELSE IF R-squared_asset > 0.30 THEN
Method 1 is moderately reliable
Consider averaging with Method 2
ELSE
Method 1 is unreliable for this asset
Use Method 2 or hybrid approach
15.5.4 Economic Sanity Checks
Regardless of method, verify implied returns make economic sense:
- Equity premium positive? Equities should have higher implied returns than bonds
- Credit spread positive? Corporate bonds > government bonds
- Duration premium? Longer bonds have higher implied returns (normally)
- Alternatives diversification? Low-correlation assets can have lower required returns
15.6 Complete Numerical Example: 2-Asset Case
Let's work through both methods with a minimal example to see how they compare.
Setup
Given Data
| Parameter | Bond | Equity |
| Volatility (\(\sigma\)) | 4% | 16% |
| Beta on Factor 1 (\(\beta_1\)) | 0.95 | 0.25 |
Market Rates (current):
- 10Y German Bund yield: \(y_{10Y} = 2.8\%\)
- ESTR overnight rate: \(r_f = 2.4\%\)
- Target bond excess return: \(\ln\left(\frac{1.028}{1.024}\right) = +0.39\%\)
Historical Data:
- Factor 1 time-weighted return: \(\hat{\mu}_{f_1} = 3.5\%\) (annualized)
- Factor 1 variance: \(\sigma^2_{f_1} = 0.0016\) (4% volatility)
The Single-Factor Pricing Model
Starting point: The factor model decomposes asset returns into systematic and idiosyncratic components:
\[r_i = \alpha_i + \beta_{i,1} \cdot f_1 + \epsilon_i\]
where \(r_i\) is asset return, \(f_1\) is the factor return, \(\beta_{i,1}\) is the factor loading (sensitivity), and \(\epsilon_i\) is idiosyncratic noise.
No-arbitrage condition: In equilibrium, expected returns must compensate only for systematic risk (idiosyncratic risk is diversifiable). This implies \(\alpha_i = 0\) and:
\[\E[r_i] = \beta_{i,1} \cdot \E[f_1]\]
Define the factor premium: Let \(\lambda = \E[f_1]\) be the expected factor return (the "price of risk" for Factor 1). Then:
\[\boxed{\mu_i = \beta_{i,1} \cdot \lambda}\]
Interpretation: An asset's expected excess return equals its factor exposure times the factor premium. Higher beta = higher expected return (more compensation for bearing systematic risk).
Method 1: 10Y Bond Calibration
Step 1: Calculate lambda (factor premium)
Derivation: From the single-factor model above, we can solve for \(\lambda\) using the reference asset (10Y bond) where we know the target return:
\[\lambda = \frac{r_{target}}{\beta_{ref,1}} \quad \Rightarrow \quad \lambda = \frac{+0.39\%}{0.95} = +0.41\%\]
Step 2: Project to all assets
Derivation: Once we have \(\lambda\), we apply the factor model \(\mu_i = \beta_{i,1} \cdot \lambda\) to every asset. This assumes all expected returns are driven by exposure to Factor 1:
\[\mu_{bond} = \beta_{bond,1} \times \lambda = 0.95 \times 0.41\% = \boxed{+0.39\%} \quad \checkmark\]
\[\mu_{equity} = \beta_{equity,1} \times \lambda = 0.25 \times 0.41\% = \boxed{+0.10\%}\]
Step 3: R-squared quality check
Derivation: R-squared measures what fraction of asset variance is explained by Factor 1. From the factor model \(r_i = \beta_{i,1} f_1 + \epsilon_i\), we get \(\text{Var}(r_i) = \beta_{i,1}^2 \sigma^2_{f_1} + \sigma^2_{\epsilon}\). The R-squared is the systematic portion:
\[R^2_i = \frac{\beta_{i,1}^2 \cdot \sigma^2_{f_1}}{\sigma^2_i} = \frac{\text{systematic variance}}{\text{total variance}}\]
\[R^2_{bond} = \frac{0.95^2 \times 0.0016}{0.04^2} = \frac{0.00144}{0.0016} = 0.90 \quad (90\%)\]
\[R^2_{equity} = \frac{0.25^2 \times 0.0016}{0.16^2} = \frac{0.0001}{0.0256} = 0.004 \quad (0.4\%)\]
| Asset | Implied Excess Return | R-squared | Reliability |
| Bond | +0.39% | 90% | High |
| Equity | +0.10% | 0.4% | Unreliable |
Method 2: Past Performance
Step 1: Use historical factor returns
Derivation: Instead of calibrating from market rates, we estimate the factor premium directly from historical data. The factor return is computed as a time-weighted average of past returns (see Section 15.3), giving more weight to recent observations:
\[\hat{\mu}_{f_1} = \sum_t w_t \cdot r_{f_1,t} = 3.5\% \quad \text{(annualized)}\]
Step 2: Project to assets via betas
Derivation: Same factor model as Method 1: \(\mu_i = \beta_{i,1} \cdot \mu_{f_1}\). The only difference is that \(\mu_{f_1}\) comes from historical data rather than market calibration:
\[\mu_{bond} = \beta_{bond,1} \times \hat{\mu}_{f_1} = 0.95 \times 3.5\% = \boxed{3.33\%}\]
\[\mu_{equity} = \beta_{equity,1} \times \hat{\mu}_{f_1} = 0.25 \times 3.5\% = \boxed{0.88\%}\]
Step 3: R-squared quality check
Derivation: R-squared is identical to Method 1 because it depends only on betas and variances, not on how we estimate the factor premium. It tells us how much of each asset's risk is explained by Factor 1:
\[R^2_{bond} = \frac{\beta_{bond,1}^2 \cdot \sigma^2_{f_1}}{\sigma^2_{bond}} = \frac{0.95^2 \times 0.0016}{0.04^2} = 0.90 \quad (90\%)\]
\[R^2_{equity} = \frac{\beta_{equity,1}^2 \cdot \sigma^2_{f_1}}{\sigma^2_{equity}} = \frac{0.25^2 \times 0.0016}{0.16^2} = 0.004 \quad (0.4\%)\]
| Asset | Implied Excess Return | R-squared | Reliability |
| Bond | +3.33% | 90% | High |
| Equity | +0.88% | 0.4% | Unreliable |
Comparison
Side-by-Side Results
| Asset | Method 1 (10Y Bond) | Method 2 (Past Perf) | Difference |
| Bond | +0.39% | +3.33% | 2.94% |
| Equity | +0.10% | +0.88% | 0.78% |
Key Insights
Critical Observations
- Methods give different answers! A 3% difference for bonds is economically significant.
- Method 1 reflects current market view: The normal yield curve (10Y 2.8% > overnight 2.4%) implies small positive bond excess returns.
- Method 2 reflects historical momentum: Bonds performed well historically (falling rates = capital gains), so the model extrapolates higher positive returns.
- R-squared matters for both methods: Equity's 0.4% R-squared means Factor 1 barely explains equity risk. The implied returns for equity are unreliable with either method.
- Neither is "correct": Method 1 is forward-looking (market expectations), Method 2 is backward-looking (momentum). Choose based on your investment philosophy.
Recommendation: For bonds (high R-squared), Method 1 is reliable. For equities (low R-squared), consider Method 2 or a hybrid approach.
15.7 Academic Foundations and References
Julian's calibration methods build on well-established academic foundations in asset pricing theory. Here we document the key papers and their relevance.
15.7.1 Factor Pricing Theory (Foundation for Both Methods)
The core formula \(\mu_i = \beta_{i,1} \cdot \lambda\) derives from factor pricing models:
Foundational Papers
1. Arbitrage Pricing Theory (APT)
Ross, S.A. (1976). "The arbitrage theory of capital asset pricing." Journal of Economic Theory, 13(3), 341-360.
- Introduced APT as alternative to CAPM
- Shows expected returns are linear in factor betas under no-arbitrage
- Key result: \(\E[r_i] = r_f + \beta_{i,1}\lambda_1 + \beta_{i,2}\lambda_2 + \ldots\)
- Julian's methods use the single-factor special case
2. Capital Asset Pricing Model (CAPM)
Sharpe, W.F. (1964). "Capital asset prices: A theory of market equilibrium under conditions of risk." Journal of Finance, 19(3), 425-442. [17,243 citations]
- Original single-factor model: \(\E[r_i] = r_f + \beta_i(\E[r_m] - r_f)\)
- The market is the single factor; market risk premium is \(\lambda\)
- Nobel Prize 1990
3. Multi-Factor Extensions
Fama, E.F. & French, K.R. (1992). "The cross-section of expected stock returns." Journal of Finance, 47(2), 427-465. [14,994 citations]
Fama, E.F. & French, K.R. (1993). "Common risk factors in the returns on stocks and bonds." Journal of Financial Economics, 33(1), 3-56.
- Extended single-factor CAPM to three factors (market, size, value)
- Showed that bond factors are also priced
- Foundation for using multiple principal components as factors
15.7.2 Method 1: Bond Yield Calibration
Using bond yields to anchor expected returns is standard practice in fixed-income portfolio management:
Theoretical Basis
Term Premium Literature
Campbell, J.Y. & Shiller, R.J. (1991). "Yield spreads and interest rate movements: A bird's eye view." Review of Economic Studies, 58(3), 495-514.
- Yield-to-maturity approximates expected return for buy-and-hold investors
- Term premium = compensation for duration risk
Cochrane, J.H. & Piazzesi, M. (2005). "Bond risk premia." American Economic Review, 95(1), 138-160.
- Shows bond risk premia are predictable from yield curve shape
- Supports using current yields to infer expected returns
Practical Implementation
Method 1's approach (calibrating \(\lambda\) from a reference bond) is analogous to:
- Black-Litterman model: Using market equilibrium to derive expected returns
- Reverse optimization: Backing out implied returns from observed prices
15.7.3 Method 2: Historical Returns
Using past performance to estimate expected returns is related to momentum and time-series predictability:
Momentum and Predictability Literature
Jegadeesh, N. & Titman, S. (1993). "Returns to buying winners and selling losers: Implications for stock market efficiency." Journal of Finance, 48(1), 65-91.
- Documented momentum effect: past winners continue to outperform
- 3-12 month holding periods show strongest momentum
- Justifies using recent historical returns as predictors
Carhart, M.M. (1997). "On persistence in mutual fund performance." Journal of Finance, 52(1), 57-82. [16,548 citations]
- Added momentum factor to Fama-French 3-factor model
- Shows momentum is a priced risk factor
Time-Weighted Averaging
Julian's use of exponentially-weighted historical returns is standard in:
- GARCH models: Recent observations get higher weight
- Exponential smoothing: Decay parameter controls memory
- RiskMetrics: J.P. Morgan's approach to volatility estimation
15.7.4 R-Squared Quality Check
Using R-squared to assess model reliability is fundamental in econometrics:
Variance Decomposition
Cochrane, J.H. (2005). Asset Pricing (Revised Edition). Princeton University Press.
- Chapter 5: Factor models and variance decomposition
- R-squared = fraction of variance explained by systematic factors
- Low R-squared implies large idiosyncratic component (not captured by factor model)
Interpretation for Portfolio Management
| R-squared | Interpretation | Reliability of \(\mu_i = \beta_i \lambda\) |
| > 80% | Factor dominates risk | High - factor model reliable |
| 50-80% | Mixed systematic/idiosyncratic | Moderate - use with caution |
| < 50% | Idiosyncratic risk dominates | Low - consider alternatives |
15.7.5 Practitioner References
Investment Management Texts
Ilmanen, A. (2011). Expected Returns: An Investor's Guide to Harvesting Market Rewards. Wiley.
- Comprehensive treatment of expected return estimation
- Chapters on historical vs forward-looking approaches
- Discusses trade-offs between Methods 1 and 2
Grinold, R.C. & Kahn, R.N. (2000). Active Portfolio Management (2nd Edition). McGraw-Hill.
- Chapter on alpha forecasting and information ratios
- Factor model implementation for expected returns
Dimson, E., Marsh, P., & Staunton, M. (2002). Triumph of the Optimists: 101 Years of Global Investment Returns. Princeton University Press.
- Long-run historical risk premia estimates
- Global evidence on equity and bond returns
- Provides context for Method 2's historical approach
15.7.6 Is Julian's Approach Standard?
Assessment
Yes, Julian's methods are standard practice in quantitative fixed-income portfolio management:
| Aspect | Julian's Approach | Academic/Industry Standard |
| Factor model | PCA-based factors | Standard (Fama-French, Barra, Axioma) |
| Lambda calibration | From 10Y bond yield | Common (Black-Litterman uses market cap) |
| Historical returns | Time-weighted average | Standard (momentum, GARCH weighting) |
| R-squared check | Variance decomposition | Standard diagnostic in factor models |
| Single reference asset | 10Y German Bund | Common for EUR fixed-income |
What makes Julian's approach practical:
- Uses readily observable market data (10Y yield)
- Leverages the existing BRISMA factor model
- Provides explicit quality metric (R-squared)
- Offers two complementary perspectives (forward vs backward-looking)