Given:
- S&P 500 average excess return over T-bills: 8% per year
- S&P 500 standard deviation: σ = 20% per year
- Current T-bill (risk-free) rate: r_f = 5%
- Therefore: E(r_index) = 5% + 8% = 13%
- Utility formula: U = E(r) − ½ × A × σ²
rf <- 0.05 # risk-free rate (T-bill)
rp <- 0.08 # equity risk premium
er_index <- rf + rp # expected return on S&P 500 = 0.13
sigma_index <- 0.20 # standard deviation of S&P 500For a portfolio with weight w in the S&P 500 and
(1 - w) in T-bills:
w_bills <- c(0.0, 0.2, 0.4, 0.6, 0.8, 1.0)
w_index <- 1 - w_bills
Er_p <- w_bills * rf + w_index * er_index
sigma_p <- w_index * sigma_index
var_p <- sigma_p^2
p10 <- data.frame(
W_bills = w_bills,
W_index = w_index,
E_r_p = round(Er_p, 4),
Sigma_p = round(sigma_p, 4),
Variance = round(var_p, 4)
)
kable(p10,
col.names = c("W_bills", "W_index", "E(r_p)", "σ_p", "Variance σ²"),
caption = "Problem 10: Portfolio Expected Returns and Variances",
align = "ccccc")| W_bills | W_index | E(r_p) | σ_p | Variance σ² |
|---|---|---|---|---|
| 0.0 | 1.0 | 0.130 | 0.20 | 0.0400 |
| 0.2 | 0.8 | 0.114 | 0.16 | 0.0256 |
| 0.4 | 0.6 | 0.098 | 0.12 | 0.0144 |
| 0.6 | 0.4 | 0.082 | 0.08 | 0.0064 |
| 0.8 | 0.2 | 0.066 | 0.04 | 0.0016 |
| 1.0 | 0.0 | 0.050 | 0.00 | 0.0000 |
ggplot(p10, aes(x = Sigma_p * 100, y = E_r_p * 100)) +
geom_line(color = "#2C7BB6", linewidth = 1.2) +
geom_point(color = "#D7191C", size = 3) +
geom_text(aes(label = paste0("W=", W_index)),
vjust = -0.8, size = 3.2, color = "gray30") +
labs(
title = "Problem 10: Capital Allocation Line (CAL)",
subtitle = "Risk–Return Tradeoff between T-bills and S&P 500",
x = "Portfolio Standard Deviation σ_p (%)",
y = "Expected Return E(r_p) (%)"
) +
theme_minimal(base_size = 13) +
theme(plot.title = element_text(face = "bold"),
plot.subtitle = element_text(color = "gray40"))\[U = E(r) - \frac{1}{2} \times A \times \sigma^2 = E(r) - \sigma^2 \quad (A = 2)\]
A2 <- 2
U_A2 <- Er_p - 0.5 * A2 * var_p
p11 <- data.frame(
W_bills = w_bills,
W_index = w_index,
E_r_p = round(Er_p, 4),
Variance = round(var_p, 4),
Utility = round(U_A2, 4)
)
kable(p11,
col.names = c("W_bills", "W_index", "E(r_p)", "Variance σ²", "Utility (A=2)"),
caption = "Problem 11: Utility Levels with A = 2",
align = "ccccc")| W_bills | W_index | E(r_p) | Variance σ² | Utility (A=2) |
|---|---|---|---|---|
| 0.0 | 1.0 | 0.130 | 0.0400 | 0.0900 |
| 0.2 | 0.8 | 0.114 | 0.0256 | 0.0884 |
| 0.4 | 0.6 | 0.098 | 0.0144 | 0.0836 |
| 0.6 | 0.4 | 0.082 | 0.0064 | 0.0756 |
| 0.8 | 0.2 | 0.066 | 0.0016 | 0.0644 |
| 1.0 | 0.0 | 0.050 | 0.0000 | 0.0500 |
## Optimal portfolio (A = 2):
## W_bills = 0.0, W_index = 1.0
## E(r_p) = 13.00%, Utility = 0.0900
ggplot(p11, aes(x = W_index, y = Utility)) +
geom_line(color = "#1A9641", linewidth = 1.2) +
geom_point(color = "#D7191C", size = 3) +
geom_point(data = best11, aes(x = W_index, y = Utility),
color = "gold", size = 5, shape = 8, stroke = 2) +
annotate("text", x = best11$W_index, y = best11$Utility,
label = paste0("Max U = ", round(best11$Utility, 4)),
vjust = -1.2, color = "gray20", size = 3.5) +
labs(
title = "Problem 11: Utility vs. Equity Weight (A = 2)",
subtitle = "★ = Maximum utility portfolio",
x = "Weight in S&P 500 (W_index)",
y = "Utility U"
) +
theme_minimal(base_size = 13) +
theme(plot.title = element_text(face = "bold"),
plot.subtitle = element_text(color = "gray40"))Conclusion (A = 2): The investor should hold 100% S&P 500. With only moderate risk aversion, the equity risk premium (8%) outweighs the utility penalty from variance, so utility increases monotonically with equity allocation.
\[U = E(r) - \frac{1}{2} \times 3 \times \sigma^2 = E(r) - 1.5\sigma^2 \quad (A = 3)\]
A3 <- 3
U_A3 <- Er_p - 0.5 * A3 * var_p
p12 <- data.frame(
W_bills = w_bills,
W_index = w_index,
E_r_p = round(Er_p, 4),
Variance = round(var_p, 4),
Utility = round(U_A3, 4)
)
kable(p12,
col.names = c("W_bills", "W_index", "E(r_p)", "Variance σ²", "Utility (A=3)"),
caption = "Problem 12: Utility Levels with A = 3",
align = "ccccc")| W_bills | W_index | E(r_p) | Variance σ² | Utility (A=3) |
|---|---|---|---|---|
| 0.0 | 1.0 | 0.130 | 0.0400 | 0.0700 |
| 0.2 | 0.8 | 0.114 | 0.0256 | 0.0756 |
| 0.4 | 0.6 | 0.098 | 0.0144 | 0.0764 |
| 0.6 | 0.4 | 0.082 | 0.0064 | 0.0724 |
| 0.8 | 0.2 | 0.066 | 0.0016 | 0.0636 |
| 1.0 | 0.0 | 0.050 | 0.0000 | 0.0500 |
## Optimal portfolio (A = 3):
## W_bills = 0.4, W_index = 0.6
## E(r_p) = 9.80%, Utility = 0.0764
# Combined comparison chart A=2 vs A=3
df_combined <- data.frame(
W_index = rep(w_index, 2),
Utility = c(U_A2, U_A3),
Investor = rep(c("A = 2 (Moderate)", "A = 3 (More Risk-Averse)"), each = 6)
)
ggplot(df_combined, aes(x = W_index, y = Utility, color = Investor)) +
geom_line(linewidth = 1.2) +
geom_point(size = 3) +
scale_color_manual(values = c("#1A9641", "#D7191C")) +
labs(
title = "Problems 11 & 12: Utility vs. Equity Weight (A = 2 vs A = 3)",
subtitle = "Higher risk aversion shifts the optimal portfolio toward T-bills",
x = "Weight in S&P 500 (W_index)",
y = "Utility U",
color = "Investor Type"
) +
theme_minimal(base_size = 13) +
theme(plot.title = element_text(face = "bold"),
plot.subtitle = element_text(color = "gray40"),
legend.position = "bottom")Conclusion (A = 3): The optimal portfolio shifts to 40% T-bills / 60% S&P 500. As risk aversion rises from 2 to 3, variance is penalized more heavily, so the investor prefers to sacrifice some expected return for lower risk.
\[U = E(r) - \frac{1}{2} \times 4 \times \sigma^2 = E(r) - 2\sigma^2\]
inv <- data.frame(
Investment = 1:4,
E_r = c(0.12, 0.15, 0.21, 0.24),
sigma = c(0.30, 0.50, 0.16, 0.21)
)
A_cfa <- 4
inv$Variance <- inv$sigma^2
inv$Utility <- round(inv$E_r - 0.5 * A_cfa * inv$Variance, 4)
kable(inv,
col.names = c("Investment", "E(r)", "σ", "σ²", "U (A=4)"),
caption = "CFA Problem 1: Utility with A = 4",
align = "ccccc")| Investment | E(r) | σ | σ² | U (A=4) |
|---|---|---|---|---|
| 1 | 0.12 | 0.30 | 0.0900 | -0.0600 |
| 2 | 0.15 | 0.50 | 0.2500 | -0.3500 |
| 3 | 0.21 | 0.16 | 0.0256 | 0.1588 |
| 4 | 0.24 | 0.21 | 0.0441 | 0.1518 |
best_cfa1 <- inv[which.max(inv$Utility), ]
cat(sprintf("Best investment for A = 4: Investment %d\n", best_cfa1$Investment))## Best investment for A = 4: Investment 3
cat(sprintf(" E(r) = %.2f%%, σ = %.0f%%, U = %.4f\n",
best_cfa1$E_r * 100, best_cfa1$sigma * 100, best_cfa1$Utility))## E(r) = 21.00%, σ = 16%, U = 0.1588
Answer: Investment 3 — highest utility of 0.1588. Despite not having the highest expected return, Investment 3’s low standard deviation (16%) makes it the most attractive once risk is penalized with A = 4.
A risk-neutral investor has A = 0, so:
\[U = E(r) - \frac{1}{2} \times 0 \times \sigma^2 = E(r)\]
Risk is completely ignored; only expected return matters.
inv$Utility_A0 <- inv$E_r
kable(inv[, c("Investment", "E_r", "Utility_A0")],
col.names = c("Investment", "E(r)", "U (A=0)"),
caption = "CFA Problem 2: Utility for Risk-Neutral Investor (A = 0)",
align = "ccc")| Investment | E(r) | U (A=0) |
|---|---|---|
| 1 | 0.12 | 0.12 |
| 2 | 0.15 | 0.15 |
| 3 | 0.21 | 0.21 |
| 4 | 0.24 | 0.24 |
best_cfa2 <- inv[which.max(inv$Utility_A0), ]
cat(sprintf("Best investment for risk-neutral investor: Investment %d\n",
best_cfa2$Investment))## Best investment for risk-neutral investor: Investment 4
## E(r) = 24.00%
Answer: Investment 4 — highest expected return of 24%.
The utility function is:
\[U = E(r) - \frac{1}{2} A \sigma^2\]
The choices are:
Answer: b. Investor’s aversion to risk.
A is the risk-aversion coefficient. A
larger value of A means the investor assigns a greater
penalty to variance (risk) when computing utility. Specifically:
# Illustrate how A shapes utility across different portfolios
A_values <- c(0, 1, 2, 3, 4, 5)
w_seq <- seq(0, 1, by = 0.01)
Er_seq <- w_seq * er_index + (1 - w_seq) * rf
var_seq <- (w_seq * sigma_index)^2
utility_df <- do.call(rbind, lapply(A_values, function(a) {
data.frame(
W_index = w_seq,
Utility = Er_seq - 0.5 * a * var_seq,
A = factor(paste0("A = ", a))
)
}))
ggplot(utility_df, aes(x = W_index, y = Utility, color = A)) +
geom_line(linewidth = 0.9) +
labs(
title = "CFA Problem 3: Effect of Risk-Aversion Coefficient A",
subtitle = "Higher A → steeper penalty on variance → less equity preferred",
x = "Weight in S&P 500 (W_index)",
y = "Utility U",
color = "Risk Aversion"
) +
theme_minimal(base_size = 13) +
theme(plot.title = element_text(face = "bold"),
plot.subtitle = element_text(color = "gray40"),
legend.position = "right")summary_df <- data.frame(
Question = c("Prob 10", "Prob 11 (A=2)", "Prob 12 (A=3)",
"CFA 1 (A=4)", "CFA 2 (A=0)", "CFA 3"),
Answer = c(
"See table: E(r_p) ranges 5%–13%, Var ranges 0–0.04",
"Optimal: 100% S&P 500 (W_index=1.0), U = 0.09",
"Optimal: 40% T-bills / 60% S&P 500, U = 0.0764",
"Investment 3 (E(r)=21%, σ=16%), U = 0.1588",
"Investment 4 (E(r)=24%), U = 0.24",
"b. Investor's aversion to risk"
)
)
kable(summary_df,
col.names = c("Question", "Answer"),
caption = "Homework 3 – Summary of Answers",
align = "ll")| Question | Answer |
|---|---|
| Prob 10 | See table: E(r_p) ranges 5%–13%, Var ranges 0–0.04 |
| Prob 11 (A=2) | Optimal: 100% S&P 500 (W_index=1.0), U = 0.09 |
| Prob 12 (A=3) | Optimal: 40% T-bills / 60% S&P 500, U = 0.0764 |
| CFA 1 (A=4) | Investment 3 (E(r)=21%, σ=16%), U = 0.1588 |
| CFA 2 (A=0) | Investment 4 (E(r)=24%), U = 0.24 |
| CFA 3 | b. Investor’s aversion to risk |