# Load packages
# Core
library(tidyverse)
library(tidyquant)
symbols <- c("LULU", "NKE","UA")
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
symbols <- asset_returns_tbl %>% distinct(asset) %>% pull()
symbols
## [1] "LULU" "NKE" "UA"
# weights
weights <- c(0.35, 0.45, 0.2)
weights
## [1] 0.35 0.45 0.20
w_tbl <- tibble(symbols, weights)
w_tbl
## # A tibble: 3 × 2
## symbols weights
## <chr> <dbl>
## 1 LULU 0.35
## 2 NKE 0.45
## 3 UA 0.2
# ?tq_portfolio
portfolio_returns_tbl <- asset_returns_tbl %>%
tq_portfolio(assets_col = asset,
returns_col = returns,
weights = w_tbl,
rebalance_on = "months")
portfolio_returns_tbl
## # A tibble: 60 × 2
## date portfolio.returns
## <date> <dbl>
## 1 2013-01-31 -0.0140
## 2 2013-02-28 -0.00489
## 3 2013-03-28 0.0107
## 4 2013-04-30 0.104
## 5 2013-05-31 -0.00480
## 6 2013-06-28 -0.0458
## 7 2013-07-31 0.0157
## 8 2013-08-30 0.00711
## 9 2013-09-30 0.0765
## 10 2013-10-31 -0.000965
## # ℹ 50 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.401
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(y="Portfolio Returns",
x = "Market Returns")
The beta coefficient or slope is 0.401 which less volatile than the market since it is less than one. The dots are not close to the regression line, so there is not a strong linear relationship between the portfolio returns and the market returns.