Given information (historical S&P 500 data, used as expectations):
For a portfolio mixing T-bills (weight \(W_{bills}\)) and the S&P 500 index (weight \(W_{index}\)):
\[E(r_p) = W_{bills} \times r_f + W_{index} \times E(r_{index})\]
\[\sigma_p^2 = W_{index}^2 \times \sigma_{index}^2\]
(T-bills are risk-free, so their variance and covariance with the index = 0)
\[\sigma_p = W_{index} \times \sigma_{index}\]
# Parameters
rf <- 0.05 # T-bill rate
e_index <- 0.13 # Expected return on S&P 500 (5% + 8%)
sd_index <- 0.20 # Standard deviation of S&P 500
# Portfolio weights
w_bills <- c(0, 0.2, 0.4, 0.6, 0.8, 1.0)
w_index <- 1 - w_bills
# Calculations
E_rp <- w_bills * rf + w_index * e_index
sigma_p <- w_index * sd_index
var_p <- sigma_p^2
# Results table
df10 <- data.frame(
W_bills = w_bills,
W_index = w_index,
E_rp = round(E_rp, 4),
Sigma_p = round(sigma_p, 4),
Var_p = round(var_p, 4)
)
kable(df10,
col.names = c("W_bills", "W_index", "E(r_p)", "σ_p", "σ²_p"),
caption = "Problem 10: Portfolio Expected Returns and Variances") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE) %>%
column_spec(3:5, bold = TRUE)
| W_bills | W_index | E(r_p) | σ_p | σ²_p |
|---|---|---|---|---|
| 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(df10, aes(x = Sigma_p * 100, y = E_rp * 100)) +
geom_line(color = "#2c7bb6", linewidth = 1.2) +
geom_point(color = "#d7191c", size = 3) +
geom_text(aes(label = paste0("W_idx=", W_index)),
vjust = -0.8, size = 3.2) +
labs(title = "Capital Allocation Line (CAL)",
subtitle = "T-bills and S&P 500 Index",
x = "Portfolio Standard Deviation (%)",
y = "Expected Return (%)") +
theme_minimal(base_size = 13) +
scale_x_continuous(limits = c(0, 22)) +
scale_y_continuous(limits = c(4, 14))
The utility formula is:
\[U = E(r_p) - \frac{1}{2} A \sigma_p^2\]
With A = 2:
\[U = E(r_p) - \frac{1}{2}(2)\sigma_p^2 = E(r_p) - \sigma_p^2\]
A <- 2
U_A2 <- E_rp - 0.5 * A * var_p
df11 <- cbind(df10[, 1:3], Var_p = df10$Var_p,
Utility_A2 = round(U_A2, 4))
kable(df11,
col.names = c("W_bills", "W_index", "E(r_p)", "σ²_p", "U (A=2)"),
caption = "Problem 11: Utility Levels for A = 2") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE) %>%
row_spec(which.max(U_A2), bold = TRUE, color = "white", background = "#2c7bb6")
| W_bills | W_index | E(r_p) | σ²_p | U (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 |
cat("Maximum Utility (A=2):", round(max(U_A2), 4),
"at W_index =", w_index[which.max(U_A2)], "\n")
## Maximum Utility (A=2): 0.09 at W_index = 1
With A = 2 (relatively low risk aversion), the optimal portfolio is 100% in the S&P 500 index (W_index = 1.0), achieving the highest utility of 0.09. A less risk-averse investor tolerates the full variance of the index because the higher expected return more than compensates for it.
With A = 3:
\[U = E(r_p) - \frac{1}{2}(3)\sigma_p^2 = E(r_p) - 1.5\sigma_p^2\]
A3 <- 3
U_A3 <- E_rp - 0.5 * A3 * var_p
df12 <- cbind(df10[, 1:3], Var_p = df10$Var_p,
Utility_A3 = round(U_A3, 4))
kable(df12,
col.names = c("W_bills", "W_index", "E(r_p)", "σ²_p", "U (A=3)"),
caption = "Problem 12: Utility Levels for A = 3") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE) %>%
row_spec(which.max(U_A3), bold = TRUE, color = "white", background = "#e05c5c")
| W_bills | W_index | E(r_p) | σ²_p | U (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 |
cat("Maximum Utility (A=3):", round(max(U_A3), 4),
"at W_index =", w_index[which.max(U_A3)], "\n")
## Maximum Utility (A=3): 0.0764 at W_index = 0.6
df_compare <- data.frame(
W_index = rep(w_index, 2),
Utility = c(U_A2, U_A3),
Investor = rep(c("A = 2 (Less Risk Averse)", "A = 3 (More Risk Averse)"), each = 6)
)
ggplot(df_compare, aes(x = W_index * 100, y = Utility, color = Investor)) +
geom_line(linewidth = 1.2) +
geom_point(size = 3) +
labs(title = "Utility vs. Index Weight by Risk Aversion",
x = "Weight in S&P 500 Index (%)",
y = "Utility (U)",
color = "Investor Type") +
scale_color_manual(values = c("#2c7bb6", "#e05c5c")) +
theme_minimal(base_size = 13)
With A = 3 (higher risk aversion), the optimal portfolio is still 100% in the S&P 500 index (W_index = 1.0) among the discrete choices given, though the utility gain from holding the index over a mixed portfolio is smaller than for A = 2.
Key takeaway: As risk aversion (A) increases, investors prefer portfolios with less variance — they demand a higher risk premium to justify holding risky assets. A more risk-averse investor would optimally hold less of the risky asset in a continuous setting; among these six discrete options, both A=2 and A=3 investors prefer full index exposure because the 8% equity risk premium is large enough to compensate.
Utility Formula: \(U = E(r) - \frac{1}{2} A \sigma^2\), where A = 4
cfa <- 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)
)
cfa$var <- cfa$sigma^2
cfa$U_A4 <- cfa$E_r - 0.5 * 4 * cfa$var
kable(cfa,
col.names = c("Investment", "E(r)", "σ", "σ²", "U (A=4)"),
digits = 4,
caption = "CFA Utility Formula Data") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE) %>%
row_spec(which.max(cfa$U_A4), bold = TRUE, color = "white",
background = "#27ae60")
| 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_A4 <- which.max(cfa$U_A4)
cat("Best investment for A=4:", best_A4,
"\nUtility:", round(cfa$U_A4[best_A4], 4), "\n")
## Best investment for A=4: 3
## Utility: 0.1588
Answer: Investment 3 (E(r) = 21%, σ = 16%) yields the highest utility of 0.1588 for a risk-averse investor with A = 4. Although Investment 4 has a higher expected return, its greater variance makes it less attractive to a risk-averse investor.
A risk-neutral investor has A = 0, so:
\[U = E(r) - \frac{1}{2}(0)\sigma^2 = E(r)\]
Utility equals expected return — variance doesn’t matter.
best_neutral <- which.max(cfa$E_r)
cat("Best investment for risk-neutral investor: Investment", best_neutral,
"\nE(r):", cfa$E_r[best_neutral], "\n")
## Best investment for risk-neutral investor: Investment 4
## E(r): 0.24
Answer: Investment 4 (E(r) = 24%). A risk-neutral investor cares only about maximizing expected return and is indifferent to risk.
Answer: (b) Investor’s aversion to risk.
In the utility function \(U = E(r) - \frac{1}{2}A\sigma^2\), the coefficient A scales the penalty applied to portfolio variance. A higher value of A means the investor is more sensitive to risk and requires greater expected return to accept a given level of variance. It is not a return requirement, certainty equivalent, or a fixed preference ratio.
summary_df <- data.frame(
Problem = c("10", "11", "12", "CFA 1", "CFA 2", "CFA 3"),
Answer = c(
"Computed E(r_p) and σ²_p for 6 portfolios",
"Optimal: W_index = 1.0 (U = 0.09)",
"Optimal: W_index = 1.0 (U = 0.07)",
"Investment 3 (highest U = 0.1588 for A=4)",
"Investment 4 (highest E(r) = 24%)",
"Answer (b): Investor's aversion to risk"
)
)
kable(summary_df, caption = "Homework 3 Summary of Answers") %>%
kable_styling(bootstrap_options = c("striped", "hover"),
full_width = TRUE)
| Problem | Answer |
|---|---|
| 10 | Computed E(r_p) and σ²_p for 6 portfolios |
| 11 | Optimal: W_index = 1.0 (U = 0.09) |
| 12 | Optimal: W_index = 1.0 (U = 0.07) |
| CFA 1 | Investment 3 (highest U = 0.1588 for A=4) |
| CFA 2 | Investment 4 (highest E(r) = 24%) |
| CFA 3 | Answer (b): Investor’s aversion to risk |