# Load packages
# Core
library(tidyverse)
library(tidyquant)
Calculate and visualize your portfolio’s beta.
Choose your stocks and the baseline market.
from 2012-12-31 to present
symbols <- c("AAPL", "TSLA", "NFLX", "DIS", "MTN")
prices <- tq_get(x = symbols,
get = "stock.prices",
from = "2012-12-31",
to = "2017-12-31")
asset_returns_tbl <- prices %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
type = "log") %>%
slice(-1) %>%
ungroup() %>%
set_names(c("asset", "date", "returns"))
symbols <- asset_returns_tbl %>% distinct(asset) %>% pull()
symbols
## [1] "AAPL" "DIS" "MTN" "NFLX" "TSLA"
weight <- c(0.25, 0.25, 0.2, 0.2, 0.1)
weight
## [1] 0.25 0.25 0.20 0.20 0.10
w_tbl <- tibble(symbols, weight)
w_tbl
## # A tibble: 5 × 2
## symbols weight
## <chr> <dbl>
## 1 AAPL 0.25
## 2 DIS 0.25
## 3 MTN 0.2
## 4 NFLX 0.2
## 5 TSLA 0.1
portfolio_returns_tbl <- asset_returns_tbl %>%
tq_portfolio(assets_col = asset,
returns_col = returns,
weights = w_tbl,
rebalance_on = "months",
col_rename = "returns")
portfolio_returns_tbl
## # A tibble: 60 × 2
## date returns
## <date> <dbl>
## 1 2013-01-31 0.102
## 2 2013-02-28 0.0242
## 3 2013-03-28 0.0451
## 4 2013-04-30 0.0806
## 5 2013-05-31 0.0871
## 6 2013-06-28 -0.0431
## 7 2013-07-31 0.108
## 8 2013-08-30 0.0608
## 9 2013-09-30 0.0437
## 10 2013-10-31 0.0315
## # ℹ 50 more rows
market_returns_tbl <- tq_get("SPY",
get = "stock.prices",
from = "2012-12-31",
to = "2017-12-31") %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
type = "log",
col_rename = "returns") %>%
slice(-1)
portfolio_market_returns_tbl <- portfolio_returns_tbl %>%
mutate(market_returns = market_returns_tbl %>% pull(returns))
portfolio_market_returns_tbl %>%
tq_performance(Ra = returns,
Rb = market_returns,
performance_fun = CAPM.beta)
## # A tibble: 1 × 1
## CAPM.beta.1
## <dbl>
## 1 1.07
portfolio_market_returns_tbl %>%
ggplot(aes(market_returns, returns)) +
geom_point(color = "cornflowerblue") +
geom_smooth(method = "lm", se = FALSE,
size = 1.5, color = tidyquant::palette_light()[3]) +
labs(x = "market returns",
y = "portfolio returns")
How sensitive is your portfolio to the market? Discuss in terms of the beta coefficient. Does the plot confirm the beta coefficient you calculated?
The Beta of my portfolio is 1.07. This means that my portfolio is slightly more sensitive to the market as it has a little bit more volatility. This plot can confirm the beta coefficient that was calculated as it has more points closer to the regresion line with only a few outliers.