################################################
# Portfolio Utility Analysis – Homework 3
################################################

############################
# 1. GIVEN DATA
############################

rf <- 0.05          # T-bill rate
rm <- 0.13          # Expected market return
sigma_m <- 0.20     # Market standard deviation

# Portfolio weights
w_bills <- c(0,0.2,0.4,0.6,0.8,1.0)
w_index <- 1 - w_bills


############################
# 2. PORTFOLIO CALCULATIONS
############################

# Expected return
ER <- w_bills*rf + w_index*rm

# Standard deviation (T-bill = risk free)
SD <- w_index * sigma_m

# Variance
VAR <- SD^2


############################
# 3. UTILITY CALCULATION
############################

# Risk aversion coefficients
A2 <- 2
A3 <- 3

Utility_A2 <- ER - 0.5*A2*VAR
Utility_A3 <- ER - 0.5*A3*VAR


############################
# 4. RESULT TABLE
############################

portfolio_results <- data.frame(
  Weight_TBills = w_bills,
  Weight_SP500 = w_index,
  Expected_Return = ER,
  Std_Dev = SD,
  Variance = VAR,
  Utility_A2 = Utility_A2,
  Utility_A3 = Utility_A3
)

print("Portfolio Results")
## [1] "Portfolio Results"
print(portfolio_results)
##   Weight_TBills Weight_SP500 Expected_Return Std_Dev Variance Utility_A2
## 1           0.0          1.0           0.130    0.20   0.0400     0.0900
## 2           0.2          0.8           0.114    0.16   0.0256     0.0884
## 3           0.4          0.6           0.098    0.12   0.0144     0.0836
## 4           0.6          0.4           0.082    0.08   0.0064     0.0756
## 5           0.8          0.2           0.066    0.04   0.0016     0.0644
## 6           1.0          0.0           0.050    0.00   0.0000     0.0500
##   Utility_A3
## 1     0.0700
## 2     0.0756
## 3     0.0764
## 4     0.0724
## 5     0.0636
## 6     0.0500
############################
# 5. BEST PORTFOLIO
############################

best_A2 <- portfolio_results[which.max(Utility_A2),]
best_A3 <- portfolio_results[which.max(Utility_A3),]

print("Best Portfolio for A = 2")
## [1] "Best Portfolio for A = 2"
print(best_A2)
##   Weight_TBills Weight_SP500 Expected_Return Std_Dev Variance Utility_A2
## 1             0            1            0.13     0.2     0.04       0.09
##   Utility_A3
## 1       0.07
print("Best Portfolio for A = 3")
## [1] "Best Portfolio for A = 3"
print(best_A3)
##   Weight_TBills Weight_SP500 Expected_Return Std_Dev Variance Utility_A2
## 3           0.4          0.6           0.098    0.12   0.0144     0.0836
##   Utility_A3
## 3     0.0764
################################################
# CFA PROBLEMS 1–3
################################################

ER2 <- c(0.12,0.15,0.21,0.24)
SD2 <- c(0.30,0.50,0.16,0.21)

A <- 4

VAR2 <- SD2^2

Utility <- ER2 - 0.5*A*VAR2

investment_results <- data.frame(
  Investment = 1:4,
  Expected_Return = ER2,
  Std_Dev = SD2,
  Variance = VAR2,
  Utility = Utility
)

print("CFA Investment Results")
## [1] "CFA Investment Results"
print(investment_results)
##   Investment Expected_Return Std_Dev Variance Utility
## 1          1            0.12    0.30   0.0900 -0.0600
## 2          2            0.15    0.50   0.2500 -0.3500
## 3          3            0.21    0.16   0.0256  0.1588
## 4          4            0.24    0.21   0.0441  0.1518
############################
# Best investment
############################

best_risk_averse <- investment_results[which.max(Utility),]
best_risk_neutral <- investment_results[which.max(ER2),]

print("Best Investment (Risk Averse A=4)")
## [1] "Best Investment (Risk Averse A=4)"
print(best_risk_averse)
##   Investment Expected_Return Std_Dev Variance Utility
## 3          3            0.21    0.16   0.0256  0.1588
print("Best Investment (Risk Neutral)")
## [1] "Best Investment (Risk Neutral)"
print(best_risk_neutral)
##   Investment Expected_Return Std_Dev Variance Utility
## 4          4            0.24    0.21   0.0441  0.1518
################################################
# 6. EFFICIENT FRONTIER GRAPH
################################################

plot(
  SD, ER,
  type="b",
  pch=19,
  xlab="Portfolio Risk (Standard Deviation)",
  ylab="Expected Return",
  main="Efficient Frontier: T-Bill and S&P 500 Portfolio"
)

grid()