Given information:
The portfolio expected return and variance formulas are:
\[E(r_p) = w_{bills} \cdot r_f + w_{index} \cdot E(r_{index})\]
\[\sigma^2_p = (w_{index})^2 \cdot \sigma^2_{index}\]
# Given parameters
rf <- 0.05 # T-bill rate
r_index <- 0.13 # E(r) of S&P 500 = rf + 8% risk premium
sigma <- 0.20 # S&P 500 standard deviation
# Portfolio weights
w_bills <- c(0, 0.2, 0.4, 0.6, 0.8, 1.0)
w_index <- 1 - w_bills
# Expected return
E_rp <- w_bills * rf + w_index * r_index
# Variance
var_p <- (w_index * sigma)^2
# Combine into a data frame
df10 <- data.frame(
W_bills = w_bills,
W_index = w_index,
E_rp = round(E_rp, 4),
Var_p = round(var_p, 4)
)
knitr::kable(df10,
col.names = c("W_bills", "W_index", "E(r_p)", "Variance"),
caption = "Problem 10: Expected Return and Variance of Portfolios")
| W_bills | W_index | E(r_p) | Variance |
|---|---|---|---|
| 0.0 | 1.0 | 0.130 | 0.0400 |
| 0.2 | 0.8 | 0.114 | 0.0256 |
| 0.4 | 0.6 | 0.098 | 0.0144 |
| 0.6 | 0.4 | 0.082 | 0.0064 |
| 0.8 | 0.2 | 0.066 | 0.0016 |
| 1.0 | 0.0 | 0.050 | 0.0000 |
Interpretation: As the weight in T-bills increases, both expected return and variance decrease. A fully-invested S&P 500 portfolio has the highest expected return (13%) and highest variance (0.04), while a 100% T-bill portfolio has expected return of 5% and zero variance.
The utility function is:
\[U = E(r_p) - \frac{1}{2} A \sigma^2_p\]
A2 <- 2
U_A2 <- E_rp - 0.5 * A2 * var_p
df11 <- data.frame(
W_bills = w_bills,
W_index = w_index,
E_rp = round(E_rp, 4),
Var_p = round(var_p, 4),
Utility = round(U_A2, 4)
)
knitr::kable(df11,
col.names = c("W_bills", "W_index", "E(r_p)", "Variance", "Utility (A=2)"),
caption = "Problem 11: Utility Levels for A = 2")
| 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 |
cat("Maximum utility achieved at W_bills =", w_bills[which.max(U_A2)],
"with utility =", round(max(U_A2), 4))
## Maximum utility achieved at W_bills = 0 with utility = 0.09
Conclusion (A = 2): The investor with moderate risk aversion (A = 2) achieves the highest utility at 100% invested in the S&P 500 index (W_bills = 0, W_index = 1). The risk penalty is relatively small for this investor, so the higher expected return from the index dominates.
A3 <- 3
U_A3 <- E_rp - 0.5 * A3 * var_p
df12 <- data.frame(
W_bills = w_bills,
W_index = w_index,
E_rp = round(E_rp, 4),
Var_p = round(var_p, 4),
Utility = round(U_A3, 4)
)
knitr::kable(df12,
col.names = c("W_bills", "W_index", "E(r_p)", "Variance", "Utility (A=3)"),
caption = "Problem 12: Utility Levels for A = 3")
| 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 |
cat("Maximum utility achieved at W_bills =", w_bills[which.max(U_A3)],
"with utility =", round(max(U_A3), 4))
## Maximum utility achieved at W_bills = 0.4 with utility = 0.0764
Conclusion (A = 3): The investor with higher risk aversion (A = 3) also achieves the highest utility at 100% in the S&P 500 index (W_bills = 0). However, compared to A = 2, the utility values are lower across all portfolios because the risk penalty is steeper. A more risk-averse investor would be willing to accept a lower allocation to equities for a given level of utility compared to an investor with A = 2.
Note: The optimal continuous allocation can be found via the formula \(w^* = \frac{E(r_p) - r_f}{A \cdot \sigma^2}\). For A = 2: \(w^* = \frac{0.08}{2 \times 0.04} = 1.0\); for A = 3: \(w^* = \frac{0.08}{3 \times 0.04} \approx 0.667\). The discrete table only shows integer steps, so 100% index is the best available option for both.
library(ggplot2)
plot_df <- data.frame(
W_index = rep(w_index, 2),
Utility = c(U_A2, U_A3),
A = rep(c("A = 2", "A = 3"), each = length(w_index))
)
ggplot(plot_df, aes(x = W_index, y = Utility, color = A, group = A)) +
geom_line(size = 1.2) +
geom_point(size = 3) +
scale_x_continuous(breaks = w_index) +
labs(
title = "Utility vs. Portfolio Weight in S&P 500 Index",
x = "Weight in S&P 500 (W_index)",
y = "Utility",
color = "Risk Aversion"
) +
theme_minimal(base_size = 13) +
theme(legend.position = "top")
Utility vs. W_index for A=2 and A=3
Given data (U = E(r) − ½Aσ², A = 4):
| Investment | E(r) | σ |
|---|---|---|
| 1 | 0.12 | 0.30 |
| 2 | 0.15 | 0.50 |
| 3 | 0.21 | 0.16 |
| 4 | 0.24 | 0.21 |
E_r <- c(0.12, 0.15, 0.21, 0.24)
sigma_cfa <- c(0.30, 0.50, 0.16, 0.21)
A_cfa <- 4
U_cfa <- E_r - 0.5 * A_cfa * sigma_cfa^2
df_cfa <- data.frame(
Investment = 1:4,
E_r = E_r,
Sigma = sigma_cfa,
Utility = round(U_cfa, 4)
)
knitr::kable(df_cfa,
col.names = c("Investment", "E(r)", "σ", "Utility (A=4)"),
caption = "CFA Problem 1: Utility for Risk-Averse Investor (A = 4)")
| Investment | E(r) | σ | Utility (A=4) |
|---|---|---|---|
| 1 | 0.12 | 0.30 | -0.0600 |
| 2 | 0.15 | 0.50 | -0.3500 |
| 3 | 0.21 | 0.16 | 0.1588 |
| 4 | 0.24 | 0.21 | 0.1518 |
cat("Best investment for A = 4:", which.max(U_cfa),
"with utility =", round(max(U_cfa), 4))
## Best investment for A = 4: 3 with utility = 0.1588
Answer: A risk-averse investor with A = 4 should select Investment 3, which has the highest utility (≈ 0.1588). Although Investment 4 has a higher expected return, its variance is large enough that the risk penalty reduces its utility below Investment 3.
A risk-neutral investor has A = 0, so the utility function simplifies to:
\[U = E(r)\]
The investor simply maximizes expected return, ignoring risk entirely.
U_neutral <- E_r # A = 0, so utility = E(r)
df_cfa2 <- data.frame(
Investment = 1:4,
E_r = E_r,
Utility = U_neutral
)
knitr::kable(df_cfa2,
col.names = c("Investment", "E(r)", "Utility (A=0)"),
caption = "CFA Problem 2: Utility for Risk-Neutral Investor (A = 0)")
| Investment | E(r) | Utility (A=0) |
|---|---|---|
| 1 | 0.12 | 0.12 |
| 2 | 0.15 | 0.15 |
| 3 | 0.21 | 0.21 |
| 4 | 0.24 | 0.24 |
cat("Best investment for risk-neutral investor:", which.max(U_neutral),
"with E(r) =", max(U_neutral))
## Best investment for risk-neutral investor: 4 with E(r) = 0.24
Answer: A risk-neutral investor selects Investment 4 (E(r) = 0.24), as it offers the highest expected return. Risk is irrelevant to this investor.
Answer: (b) Investor’s aversion to risk.
The coefficient A in the utility function \(U = E(r) - \frac{1}{2}A\sigma^2\) measures the degree of risk aversion:
The other options are incorrect: - (a) Return requirement is a constraint, not a preference parameter. - (c) The certainty equivalent rate is the output of the utility function (the risk-free rate that gives the same utility), not A itself. - (d) A does not capture a “4 units of risk per unit of return” ratio—that is a misinterpretation.