# 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("TSLA", "NVDA", "LLY", "HD", "UAA")
prices <- tq_get(x = symbols,
get. = "stock.prices",
from = "2012-12-31",
to = Sys.Date()) # Fetches data until present
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
symbols <- asset_returns_tbl %>% distinct(asset) %>% pull()
symbols
## [1] "HD" "LLY" "NVDA" "TSLA" "UAA"
# weights
weights <- c(0.25, 0.25, 0.2, 0.2, 0.1)
weights
## [1] 0.25 0.25 0.20 0.20 0.10
w_tbl <- tibble(symbols, weights)
w_tbl
## # A tibble: 5 × 2
## symbols weights
## <chr> <dbl>
## 1 HD 0.25
## 2 LLY 0.25
## 3 NVDA 0.2
## 4 TSLA 0.2
## 5 UAA 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: 155 × 2
## date returns
## <date> <dbl>
## 1 2013-01-31 0.0660
## 2 2013-02-28 0.00224
## 3 2013-03-28 0.0389
## 4 2013-04-30 0.102
## 5 2013-05-31 0.147
## 6 2013-06-28 -0.0134
## 7 2013-07-31 0.0866
## 8 2013-08-30 0.0384
## 9 2013-09-30 0.0472
## 10 2013-10-31 -0.0366
## # ℹ 145 more rows
market_returns_tbl <- tq_get(x = "SPY",
get. = "stock.prices",
from = "2012-12-31",
to = "2017-12-31") %>%
# Convert prices to returns
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
type = "log",
col_rename = "returns") %>%
slice(-1)
portfolio_market_returns_tbl <- left_join(market_returns_tbl,
portfolio_returns_tbl,
by = "date") %>%
set_names("date", "market_returns", "portfolio_returns")
portfolio_market_returns_tbl %>%
tq_performance(Ra = portfolio_returns,
Rb = market_returns,
performance_fun = CAPM.beta)
## # A tibble: 1 × 1
## CAPM.beta.1
## <dbl>
## 1 0.755
portfolio_market_returns_tbl %>%
ggplot(aes(x = market_returns,
y = portfolio_returns)) +
geom_point(color = "cornflowerblue") +
geom_smooth(method = "lm",
se = FALSE,
size = 1.5,
color = tidyquant::palette_light()[3]) +
# Labeling
labs(x = "Portfolio Returns",
y = "Market 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 calculated Beta coefficient of .755, this shows that my portfolio is slightly less volatile than the market, in this case, the S&P500. This means that when the market is moving up or down, my portfolio will receive a little less in returns than what the market is generating.
The slope of the regression line in the graph represents my Beta coefficient and the sensitivity of the portfolio’s returns to the changing returns of the market. As my slope is a .755, this shows that my portfolio is going to move .755 times whatever the market is moving at, so slightly slower than the market.