# 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("FDX", "MSFT", "UPS")
prices <- tq_get(x = symbols,
get = "stock.prices",
from = "2012-12-31",
to = "2023-04-10")
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"))
## asset date returns
## "asset" "date" "returns"
# symbols
symbols <- asset_returns_tbl %>% distinct(symbol) %>% pull()
# weights
weights <- c(0.5, 0.3, 0.2)
weights
## [1] 0.5 0.3 0.2
w_tbl <- tibble(symbols, weights)
w_tbl
## # A tibble: 3 × 2
## symbols weights
## <chr> <dbl>
## 1 FDX 0.5
## 2 MSFT 0.3
## 3 UPS 0.2
portfolio_returns_tbl <- asset_returns_tbl %>%
tq_portfolio(assets_col = symbol,
returns_col = monthly.returns,
weights = w_tbl,
rebalance_on = "months",
col_rename = "returns")
portfolio_returns_tbl
## # A tibble: 124 × 2
## date returns
## <date> <dbl>
## 1 2013-01-31 0.0732
## 2 2013-02-28 0.0353
## 3 2013-03-28 -0.0185
## 4 2013-04-30 0.0218
## 5 2013-05-31 0.0318
## 6 2013-06-28 0.0105
## 7 2013-07-31 0.0126
## 8 2013-08-30 0.0214
## 9 2013-09-30 0.0432
## 10 2013-10-31 0.102
## # … with 114 more rows
market_retruns_tbl <- tq_get(x = "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 <- left_join(market_retruns_tbl,
portfolio_returns_tbl,
"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 1.15
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]) +
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 beta coefficient of my is 1.15. This means that it is more volotile than the market. It is a psoitve number which means it is expected to move in the same direction of the market. I used the S&P 500 for my market because I have a variety of types of stocks in my portfolio. This makes it more difficult to pinpoint an exact market return. This could explain why my data does not confirm to closely to the beta coefficient. Only a few returns land on the line and many of the dots are pretty far away from it, both above and below. This means it is not a great indicator for how the stocks will perform in relation to the market.