1 Chapter 5 — Risk, Return, and the Historical Record

1.1 Problem 12

Question:
During a particular year, the T-bill rate was 6%, the market return was 14%, and a portfolio manager with beta = 1.2 produced a return of 17%.
Evaluate the manager’s performance using the concepts of alpha and the Sharpe ratio.

Given: - \(R_f = 6\%\) - \(R_m = 14\%\) - \(\beta_P = 1.2\) - \(R_P = 17\%\)

1.1.1 (a) Jensen’s Alpha

\[\alpha_P = R_P - [R_f + \beta_P(R_m - R_f)]\]

Rf   <- 0.06
Rm   <- 0.14
beta <- 1.2
Rp   <- 0.17

# Jensen's Alpha
alpha <- Rp - (Rf + beta * (Rm - Rf))
cat("Jensen's Alpha:", round(alpha * 100, 2), "%\n")
## Jensen's Alpha: 1.4 %

1.1.2 (b) Sharpe Ratio

\[S_P = \frac{R_P - R_f}{\sigma_P}\]

Note: Without the portfolio standard deviation \(\sigma_P\), the Sharpe ratio cannot be computed directly. However, using the Treynor ratio as an alternative:

\[T_P = \frac{R_P - R_f}{\beta_P}\]

# Treynor Ratio (portfolio vs market)
treynor_P <- (Rp - Rf) / beta
treynor_M <- (Rm - Rf) / 1   # beta of market = 1

cat("Treynor Ratio (Portfolio):", round(treynor_P, 4), "\n")
## Treynor Ratio (Portfolio): 0.0917
cat("Treynor Ratio (Market):   ", round(treynor_M, 4), "\n")
## Treynor Ratio (Market):    0.08
result <- data.frame(
  Metric          = c("Expected Return (CAPM)", "Actual Return",
                      "Jensen's Alpha", "Treynor (Portfolio)", "Treynor (Market)"),
  Value           = c(
    paste0(round((Rf + beta*(Rm-Rf))*100, 2), "%"),
    paste0(round(Rp*100, 2), "%"),
    paste0(round(alpha*100, 2), "%"),
    round(treynor_P, 4),
    round(treynor_M, 4)
  )
)
kable(result, caption = "Chapter 5 Problem 12 — Performance Summary") %>%
  kable_styling(bootstrap_options = c("striped","hover"), full_width = FALSE)
Chapter 5 Problem 12 — Performance Summary
Metric Value
Expected Return (CAPM) 15.6%
Actual Return 17%
Jensen’s Alpha 1.4%
Treynor (Portfolio) 0.0917
Treynor (Market) 0.08

Interpretation:
The positive alpha of 1.4% indicates the manager outperformed the CAPM benchmark. The portfolio’s Treynor ratio (0.0917) also exceeds the market’s Treynor ratio (0.08), confirming superior risk-adjusted performance.


2 Chapter 6 — Capital Allocation to Risky Assets

2.1 Problem 21

Question:
Consider a risky portfolio with expected return \(E(r_P) = 18\%\) and \(\sigma_P = 28\%\). The T-bill rate is \(R_f = 8\%\).

(a) What is the Sharpe ratio of the risky portfolio?
(b) A client with \(A = 3.5\) invests a proportion \(y\) in the risky portfolio. What is the optimal \(y\)?
(c) What is the expected return and standard deviation of the complete portfolio?

E_rP   <- 0.18
sig_P  <- 0.28
Rf_6   <- 0.08
A      <- 3.5

# (a) Sharpe ratio
sharpe <- (E_rP - Rf_6) / sig_P
cat("(a) Sharpe Ratio:", round(sharpe, 4), "\n")
## (a) Sharpe Ratio: 0.3571
# (b) Optimal allocation y* = (E(rP) - Rf) / (A * sigP^2)
y_star <- (E_rP - Rf_6) / (A * sig_P^2)
cat("(b) Optimal y*:  ", round(y_star, 4),
    paste0("(", round(y_star*100, 1), "% in risky portfolio)\n"))
## (b) Optimal y*:   0.3644 (36.4% in risky portfolio)
# (c) Complete portfolio stats
E_rC   <- Rf_6 + y_star * (E_rP - Rf_6)
sig_C  <- y_star * sig_P
cat("(c) E(r_complete):", round(E_rC*100, 2), "%\n")
## (c) E(r_complete): 11.64 %
cat("    sigma_complete:", round(sig_C*100, 2), "%\n")
##     sigma_complete: 10.2 %
tbl21 <- data.frame(
  Item      = c("Sharpe Ratio", "Optimal y*",
                "E(r) Complete Portfolio", "σ Complete Portfolio"),
  Value     = c(round(sharpe,4),
                paste0(round(y_star*100,1),"%"),
                paste0(round(E_rC*100,2),"%"),
                paste0(round(sig_C*100,2),"%"))
)
kable(tbl21, caption = "Chapter 6 Problem 21 Results") %>%
  kable_styling(bootstrap_options = c("striped","hover"), full_width = FALSE)
Chapter 6 Problem 21 Results
Item Value
Sharpe Ratio 0.3571
Optimal y* 36.4%
E(r) Complete Portfolio 11.64%
σ Complete Portfolio 10.2%

2.2 Problem 22

Question:
For Problem 21, suppose the client’s risk aversion is \(A = 2.0\) instead.

(a) What is the new optimal \(y^*\)?
(b) What are the new expected return and standard deviation of the complete portfolio?
(c) Draw the CAL and indicate both clients’ optimal portfolios.

A2 <- 2.0

y_star2 <- (E_rP - Rf_6) / (A2 * sig_P^2)
E_rC2   <- Rf_6 + y_star2 * (E_rP - Rf_6)
sig_C2  <- y_star2 * sig_P

cat("(a) Optimal y* (A=2):", round(y_star2, 4),
    paste0("(", round(y_star2*100,1), "% in risky portfolio)\n"))
## (a) Optimal y* (A=2): 0.6378 (63.8% in risky portfolio)
cat("(b) E(r_complete):   ", round(E_rC2*100,2), "%\n")
## (b) E(r_complete):    14.38 %
cat("    sigma_complete:  ", round(sig_C2*100,2), "%\n")
##     sigma_complete:   17.86 %
# CAL Plot
sig_range <- seq(0, 0.50, by = 0.001)
cal_return <- Rf_6 + sharpe * sig_range

plot(sig_range * 100, cal_return * 100,
     type = "l", col = "steelblue", lwd = 2,
     xlab = "Standard Deviation (%)",
     ylab = "Expected Return (%)",
     main = "Capital Allocation Line (CAL)",
     xlim = c(0, 50), ylim = c(8, 22))

# Risky portfolio
points(sig_P * 100, E_rP * 100, pch = 19, col = "red", cex = 1.5)
text(sig_P * 100, E_rP * 100, "P (Risky)", pos = 4, cex = 0.85)

# Risk-free
points(0, Rf_6 * 100, pch = 19, col = "black", cex = 1.5)
text(0, Rf_6 * 100, "Rf", pos = 4, cex = 0.85)

# Client A=3.5
points(sig_C * 100, E_rC * 100, pch = 17, col = "darkorange", cex = 1.5)
text(sig_C * 100, E_rC * 100, "A=3.5", pos = 3, cex = 0.85)

# Client A=2.0
points(sig_C2 * 100, E_rC2 * 100, pch = 17, col = "purple", cex = 1.5)
text(sig_C2 * 100, E_rC2 * 100, "A=2.0", pos = 3, cex = 0.85)

legend("topleft",
       legend = c("CAL", "Risky Portfolio", "Rf", "Optimal (A=3.5)", "Optimal (A=2.0)"),
       col    = c("steelblue","red","black","darkorange","purple"),
       pch    = c(NA, 19, 19, 17, 17),
       lty    = c(1, NA, NA, NA, NA),
       lwd    = c(2, NA, NA, NA, NA),
       cex    = 0.85)

Interpretation:
A less risk-averse client (\(A = 2.0\)) allocates a larger proportion (63.8%) to the risky portfolio compared to the more risk-averse client (\(A = 3.5\), 36.4%), resulting in a higher expected return but also greater risk.


2.3 CFA Problem 4

Question:
Which of the following statements about the minimum variance portfolio of all risky securities is/are true?
i. Its variance is lower than any single security.
ii. It may be optimal for a very risk-averse investor.
iii. It lies on the efficient frontier.

Answer:

Statements ii and iii are true.

  • Statement i is false — the MVP has lower variance than any portfolio on the minimum variance frontier, but individual securities with very low variance could theoretically have lower variance than the MVP. More precisely, the MVP minimizes variance across all possible portfolios, not necessarily all individual securities.
  • Statement ii is true — a highly risk-averse investor maximizes utility by minimizing variance, making the MVP potentially optimal.
  • Statement iii is true — the MVP is by definition a point on the efficient frontier (the leftmost point of the minimum variance frontier).

2.4 CFA Problem 5

Question:
Which statement is true regarding the Capital Market Line (CML)?

  1. The CML is the best attainable CAL only for investors who hold the market portfolio.
  2. The CML is a special case of the CAL where the risky portfolio is the market portfolio.
  3. The slope of the CML is the Sharpe ratio of the market portfolio.
  4. All of the above.

Answer: (d) All of the above.

  • The CML uses the market portfolio as the optimal risky asset.
  • It is a special CAL where $P = $ market portfolio \(M\).
  • Its slope is \(\frac{E(r_M) - r_f}{\sigma_M}\), the Sharpe ratio of the market.

2.5 CFA Problem 8

Question:
Assume that expected returns and standard deviations for all securities (including the risk-free rate) are known.
In this case, all investors would hold the same optimal risky portfolio because:

Answer:

All investors would hold the same optimal risky portfolio (the tangency portfolio) because, given the same inputs (expected returns, variances, covariances) and access to the same risk-free asset, the Capital Allocation Line from the risk-free asset tangent to the efficient frontier is unique. The tangency portfolio maximizes the Sharpe ratio and is therefore the same for every investor regardless of their individual risk aversion. Differences in risk aversion only affect how much each investor allocates between the risk-free asset and this common risky portfolio (the separation theorem).


3 Chapter 7 — Optimal Risky Portfolios

3.1 Problem 11

Question:
Stocks A and B have the following data:

Stock A Stock B
Expected Return 10% 15%
Standard Deviation 20% 30%

Correlation \(\rho_{AB} = 0.2\).

(a) Calculate the expected return and standard deviation for a portfolio with weights \(w_A = 0.6\), \(w_B = 0.4\).
(b) Calculate the minimum variance portfolio weights.
(c) Plot the portfolio opportunity set.

# Given
E_A   <- 0.10;  E_B   <- 0.15
sig_A <- 0.20;  sig_B <- 0.30
rho   <- 0.20
cov_AB <- rho * sig_A * sig_B

# (a) w_A = 0.6, w_B = 0.4
wA <- 0.6;  wB <- 0.4
E_port  <- wA * E_A + wB * E_B
var_port <- wA^2 * sig_A^2 + wB^2 * sig_B^2 + 2 * wA * wB * cov_AB
sig_port <- sqrt(var_port)

cat("(a) E(r_portfolio):", round(E_port*100, 2), "%\n")
## (a) E(r_portfolio): 12 %
cat("    σ(portfolio):  ", round(sig_port*100, 2), "%\n")
##     σ(portfolio):   18.59 %
# (b) Minimum Variance Portfolio
# w_A* = (sig_B^2 - cov_AB) / (sig_A^2 + sig_B^2 - 2*cov_AB)
wA_mvp  <- (sig_B^2 - cov_AB) / (sig_A^2 + sig_B^2 - 2*cov_AB)
wB_mvp  <- 1 - wA_mvp
E_mvp   <- wA_mvp * E_A + wB_mvp * E_B
var_mvp <- wA_mvp^2*sig_A^2 + wB_mvp^2*sig_B^2 + 2*wA_mvp*wB_mvp*cov_AB
sig_mvp <- sqrt(var_mvp)

cat("\n(b) MVP Weights: w_A =", round(wA_mvp,4), " w_B =", round(wB_mvp,4), "\n")
## 
## (b) MVP Weights: w_A = 0.7358  w_B = 0.2642
cat("    E(r_MVP):  ", round(E_mvp*100,2), "%\n")
##     E(r_MVP):   11.32 %
cat("    σ(MVP):    ", round(sig_mvp*100,2), "%\n")
##     σ(MVP):     18.06 %
# (c) Portfolio Opportunity Set
weights_A <- seq(-0.5, 1.5, by = 0.01)
port_E    <- weights_A * E_A + (1 - weights_A) * E_B
port_var  <- weights_A^2 * sig_A^2 + (1-weights_A)^2 * sig_B^2 +
             2 * weights_A * (1-weights_A) * cov_AB
port_sig  <- sqrt(port_var)

plot(port_sig * 100, port_E * 100,
     type = "l", col = "steelblue", lwd = 2,
     xlab = "Standard Deviation (%)", ylab = "Expected Return (%)",
     main = "Portfolio Opportunity Set: Stocks A & B")

points(sig_mvp * 100, E_mvp * 100, pch = 19, col = "red", cex = 1.5)
text(sig_mvp * 100,   E_mvp * 100, "MVP", pos = 4, cex = 0.85)

points(sig_A * 100, E_A * 100, pch = 17, col = "darkgreen", cex = 1.5)
text(sig_A  * 100,  E_A * 100, "A", pos = 2, cex = 0.85)

points(sig_B * 100, E_B * 100, pch = 17, col = "darkorange", cex = 1.5)
text(sig_B  * 100,  E_B * 100, "B", pos = 4, cex = 0.85)

points(sig_port * 100, E_port * 100, pch = 15, col = "purple", cex = 1.5)
text(sig_port   * 100, E_port * 100, "w=(0.6,0.4)", pos = 4, cex = 0.85)


3.2 Problem 12

Question:
Using the data from Problem 11 and a risk-free rate of \(r_f = 5\%\):

(a) Compute the Sharpe ratio of Stock A, Stock B, and the MVP.
(b) Find the tangency (optimal risky) portfolio weights.
(c) What is the Sharpe ratio of the tangency portfolio?

Rf7 <- 0.05

# (a) Sharpe ratios
sharpe_A   <- (E_A - Rf7) / sig_A
sharpe_B   <- (E_B - Rf7) / sig_B
sharpe_mvp <- (E_mvp - Rf7) / sig_mvp

cat("(a) Sharpe Ratio — Stock A:", round(sharpe_A, 4),   "\n")
## (a) Sharpe Ratio — Stock A: 0.25
cat("    Sharpe Ratio — Stock B:", round(sharpe_B, 4),   "\n")
##     Sharpe Ratio — Stock B: 0.3333
cat("    Sharpe Ratio — MVP:    ", round(sharpe_mvp, 4), "\n")
##     Sharpe Ratio — MVP:     0.3501
# (b) Tangency Portfolio weights
# For two assets: w_A = [(E_A-Rf)*sig_B^2 - (E_B-Rf)*cov_AB] /
#                       [(E_A-Rf)*sig_B^2 + (E_B-Rf)*sig_A^2
#                        - (E_A-Rf+E_B-Rf)*cov_AB]
num_tan  <- (E_A-Rf7)*sig_B^2    - (E_B-Rf7)*cov_AB
den_tan  <- (E_A-Rf7)*sig_B^2 + (E_B-Rf7)*sig_A^2 - (E_A-Rf7+E_B-Rf7)*cov_AB
wA_tan   <- num_tan / den_tan
wB_tan   <- 1 - wA_tan

E_tan    <- wA_tan * E_A   + wB_tan * E_B
var_tan  <- wA_tan^2*sig_A^2 + wB_tan^2*sig_B^2 + 2*wA_tan*wB_tan*cov_AB
sig_tan  <- sqrt(var_tan)
sharpe_tan <- (E_tan - Rf7) / sig_tan

cat("\n(b) Tangency Portfolio: w_A =", round(wA_tan,4), " w_B =", round(wB_tan,4), "\n")
## 
## (b) Tangency Portfolio: w_A = 0.4925  w_B = 0.5075
cat("    E(r_tangency):      ", round(E_tan*100,2), "%\n")
##     E(r_tangency):       12.54 %
cat("    σ(tangency):        ", round(sig_tan*100,2), "%\n")
##     σ(tangency):         19.72 %
cat("\n(c) Sharpe Ratio (Tangency):", round(sharpe_tan,4), "\n")
## 
## (c) Sharpe Ratio (Tangency): 0.3823
tbl12 <- data.frame(
  Portfolio     = c("Stock A", "Stock B", "MVP", "Tangency"),
  `E(r)`        = paste0(round(c(E_A,E_B,E_mvp,E_tan)*100,2),"%"),
  `σ`           = paste0(round(c(sig_A,sig_B,sig_mvp,sig_tan)*100,2),"%"),
  `Sharpe Ratio`= round(c(sharpe_A,sharpe_B,sharpe_mvp,sharpe_tan),4)
)
kable(tbl12, caption = "Chapter 7 Problem 12 — Portfolio Comparison") %>%
  kable_styling(bootstrap_options = c("striped","hover"), full_width = FALSE)
Chapter 7 Problem 12 — Portfolio Comparison
Portfolio E.r. σ Sharpe.Ratio
Stock A 10% 20% 0.2500
Stock B 15% 30% 0.3333
MVP 11.32% 18.06% 0.3501
Tangency 12.54% 19.72% 0.3823

3.3 CFA Problem 12

Question:
Which of the following portfolios cannot lie on the efficient frontier?

Portfolio E(r) σ
A 15% 36%
B 12% 15%
C 5% 7%
D 9% 21%

Answer:

ef_data <- data.frame(
  Portfolio = c("A","B","C","D"),
  Er        = c(15, 12, 5, 9),
  Sigma     = c(36, 15, 7, 21)
)

# Compute reward-to-variability (Sharpe-like, no Rf specified, use 0)
ef_data$Sharpe_0 <- ef_data$Er / ef_data$Sigma

kable(ef_data, caption = "CFA Problem 12 — Portfolio Data") %>%
  kable_styling(bootstrap_options = c("striped","hover"), full_width = FALSE)
CFA Problem 12 — Portfolio Data
Portfolio Er Sigma Sharpe_0
A 15 36 0.4166667
B 12 15 0.8000000
C 5 7 0.7142857
D 9 21 0.4285714

Portfolio D cannot lie on the efficient frontier.
Portfolio B dominates D: B has a higher expected return (12% > 9%) and a lower standard deviation (15% < 21%). A rational investor would always prefer B over D, so D is inefficient.


4 Chapter 8 — Index Models

4.1 Problem 17

Question:
Consider the following data:

Stock A Stock B Market
Beta 1.2 0.8 1.0
Firm-specific σ (residual) 25% 20%
Market σ 20%

(a) Compute the covariance between Stocks A and B.
(b) Compute the variance of a portfolio with \(w_A = 0.5\), \(w_B = 0.5\).
(c) Break down the portfolio variance into systematic and firm-specific components.

beta_A  <- 1.2;  beta_B  <- 0.8
sig_eA  <- 0.25; sig_eB  <- 0.20   # Residual (firm-specific) std dev
sig_M   <- 0.20                     # Market std dev

# (a) Cov(A,B) under single-index model
# Cov(A,B) = beta_A * beta_B * sigma_M^2
cov_AB_idx <- beta_A * beta_B * sig_M^2
cat("(a) Cov(A,B):", round(cov_AB_idx, 6), "\n")
## (a) Cov(A,B): 0.0384
# Variances
var_A <- beta_A^2 * sig_M^2 + sig_eA^2
var_B <- beta_B^2 * sig_M^2 + sig_eB^2
cat("    Var(A):  ", round(var_A, 6), "\n")
##     Var(A):   0.1201
cat("    Var(B):  ", round(var_B, 6), "\n")
##     Var(B):   0.0656
# (b) Portfolio variance (equal weights)
wA8 <- 0.5;  wB8 <- 0.5
var_port8 <- wA8^2 * var_A + wB8^2 * var_B + 2 * wA8 * wB8 * cov_AB_idx
sig_port8 <- sqrt(var_port8)
cat("\n(b) Portfolio Variance:", round(var_port8, 6), "\n")
## 
## (b) Portfolio Variance: 0.065625
cat("    Portfolio σ:        ", round(sig_port8*100, 2), "%\n")
##     Portfolio σ:         25.62 %
# (c) Decomposition
beta_port      <- wA8 * beta_A + wB8 * beta_B
systematic_var <- beta_port^2 * sig_M^2
firm_spec_var  <- wA8^2 * sig_eA^2 + wB8^2 * sig_eB^2

cat("\n(c) Portfolio Beta:         ", round(beta_port, 4), "\n")
## 
## (c) Portfolio Beta:          1
cat("    Systematic Variance:    ", round(systematic_var, 6),
    paste0("(", round(systematic_var/var_port8*100,1), "% of total)\n"))
##     Systematic Variance:     0.04 (61% of total)
cat("    Firm-Specific Variance: ", round(firm_spec_var,  6),
    paste0("(", round(firm_spec_var/var_port8*100,1),  "% of total)\n"))
##     Firm-Specific Variance:  0.025625 (39% of total)
cat("    Total Variance (check): ", round(systematic_var + firm_spec_var, 6), "\n")
##     Total Variance (check):  0.065625
pie(c(systematic_var, firm_spec_var),
    labels = c(paste0("Systematic\n", round(systematic_var/var_port8*100,1), "%"),
               paste0("Firm-Specific\n", round(firm_spec_var/var_port8*100,1), "%")),
    col    = c("steelblue","tomato"),
    main   = "Portfolio Variance Decomposition")


4.2 CFA Problem 1

Question:
Which of the following factors did Chen, Roll, and Ross identify as significant macro-economic variables in their APT (Arbitrage Pricing Theory) study?

  1. Changes in industrial production
  2. Changes in expected inflation
  3. Changes in unanticipated inflation
  4. Changes in the yield spread (long- vs. short-term bonds)
  5. All of the above

Answer: (e) All of the above.

Chen, Roll, and Ross (1986) identified the following as priced factors in their empirical APT model:

apt_factors <- data.frame(
  Factor = c(
    "IP  — Changes in Industrial Production",
    "EI  — Changes in Expected Inflation",
    "UI  — Unanticipated Inflation",
    "CG  — Yield Spread (default risk premium)",
    "GB  — Term Spread (long minus short-term yield)"
  ),
  Rationale = c(
    "Captures real economic activity and business cycle risk",
    "Affects discount rates and required nominal returns",
    "Transfers wealth between borrowers and lenders",
    "Measures credit/default risk premium in the economy",
    "Reflects time-value and interest rate risk premium"
  )
)
kable(apt_factors, caption = "Chen, Roll & Ross (1986) — APT Macro Factors") %>%
  kable_styling(bootstrap_options = c("striped","hover"), full_width = FALSE) %>%
  column_spec(1, bold = TRUE)
Chen, Roll & Ross (1986) — APT Macro Factors
Factor Rationale
IP — Changes in Industrial Production Captures real economic activity and business cycle risk
EI — Changes in Expected Inflation Affects discount rates and required nominal returns
UI — Unanticipated Inflation Transfers wealth between borrowers and lenders
CG — Yield Spread (default risk premium) Measures credit/default risk premium in the economy
GB — Term Spread (long minus short-term yield) Reflects time-value and interest rate risk premium

These factors represent systematic risks that cannot be diversified away and therefore command a risk premium in equilibrium under APT.


5 Summary

summary <- data.frame(
  Chapter = c("Ch.5 P12","Ch.6 P21","Ch.6 P22","Ch.6 CFA4",
              "Ch.6 CFA5","Ch.6 CFA8","Ch.7 P11","Ch.7 P12",
              "Ch.7 CFA12","Ch.8 P17","Ch.8 CFA1"),
  Topic   = c(
    "Jensen's alpha & Treynor ratio",
    "Optimal allocation y* (A=3.5)",
    "Optimal allocation y* (A=2.0) + CAL plot",
    "Minimum Variance Portfolio properties",
    "Capital Market Line (CML)",
    "Separation Theorem",
    "Two-asset portfolio opportunity set + MVP",
    "Tangency portfolio & Sharpe ratios",
    "Efficient frontier dominance",
    "Single-index model variance decomposition",
    "Chen-Roll-Ross APT macro factors"
  ),
  `Key Result` = c(
    paste0("α = ", round(alpha*100,2), "%  (outperforms)"),
    paste0("y* = ", round(y_star*100,1), "%"),
    paste0("y* = ", round(y_star2*100,1), "%"),
    "Statements ii & iii are true",
    "All of (a)(b)(c) are true",
    "Same tangency portfolio; risk aversion → allocation",
    paste0("MVP: w_A=", round(wA_mvp,3), ", σ=", round(sig_mvp*100,2), "%"),
    paste0("Tangency Sharpe = ", round(sharpe_tan,4)),
    "Portfolio D is dominated by B → inefficient",
    paste0("Systematic = ", round(systematic_var/var_port8*100,1), "% of total variance"),
    "All five macro factors are significant"
  )
)
kable(summary, caption = "Complete Answer Summary") %>%
  kable_styling(bootstrap_options = c("striped","hover","condensed"),
                full_width = TRUE) %>%
  column_spec(1, bold = TRUE, color = "white", background = "steelblue")
Complete Answer Summary
Chapter Topic Key.Result
Ch.5 P12 Jensen’s alpha & Treynor ratio α = 1.4% (outperforms)
Ch.6 P21 Optimal allocation y* (A=3.5) y* = 36.4%
Ch.6 P22 Optimal allocation y* (A=2.0) + CAL plot y* = 63.8%
Ch.6 CFA4 Minimum Variance Portfolio properties Statements ii & iii are true
Ch.6 CFA5 Capital Market Line (CML) All of (a)(b)(c) are true
Ch.6 CFA8 Separation Theorem Same tangency portfolio; risk aversion → allocation
Ch.7 P11 Two-asset portfolio opportunity set + MVP MVP: w_A=0.736, σ=18.06%
Ch.7 P12 Tangency portfolio & Sharpe ratios Tangency Sharpe = 0.3823
Ch.7 CFA12 Efficient frontier dominance Portfolio D is dominated by B → inefficient
Ch.8 P17 Single-index model variance decomposition Systematic = 61% of total variance
Ch.8 CFA1 Chen-Roll-Ross APT macro factors All five macro factors are significant