# Load packages
# Core
library(tidyverse)
library(tidyquant)
symbols <- c("VOO", "IVV", "^IXIC", "VTSAX", "FBGRX")
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] "FBGRX" "IVV" "VOO" "VTSAX" "^IXIC"
# weights
weights <- c(0.2, 0.2, 0.2, 0.2, 0.2)
weights
## [1] 0.2 0.2 0.2 0.2 0.2
w_tbl <- tibble(symbols, weights)
w_tbl
## # A tibble: 5 × 2
## symbols weights
## <chr> <dbl>
## 1 FBGRX 0.2
## 2 IVV 0.2
## 3 VOO 0.2
## 4 VTSAX 0.2
## 5 ^IXIC 0.2
# ?tq_portfolio
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.0474
## 2 2013-02-28 0.0115
## 3 2013-03-28 0.0349
## 4 2013-04-30 0.0180
## 5 2013-05-31 0.0305
## 6 2013-06-28 -0.0157
## 7 2013-07-31 0.0579
## 8 2013-08-30 -0.0224
## 9 2013-09-30 0.0395
## 10 2013-10-31 0.0422
## # ℹ 50 more rows
Market_returns_tbl <- tq_get(x = "^IXIC",
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
## # A tibble: 60 × 3
## date market_returns portfolio_returns
## <date> <dbl> <dbl>
## 1 2013-01-31 0.0398 0.0474
## 2 2013-02-28 0.00573 0.0115
## 3 2013-03-28 0.0334 0.0349
## 4 2013-04-30 0.0186 0.0180
## 5 2013-05-31 0.0375 0.0305
## 6 2013-06-28 -0.0154 -0.0157
## 7 2013-07-31 0.0635 0.0579
## 8 2013-08-30 -0.0101 -0.0224
## 9 2013-09-30 0.0494 0.0395
## 10 2013-10-31 0.0386 0.0422
## # ℹ 50 more rows
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.856
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")
How sensitive is your portfolio? Discuss in terms of the beta coefficient. Does the plot confirm the beta coefficient you calculated.
My Portfolio is not that sensitive the CAPM beta being under 1 indicates my portfolio is less volitile than the market.