# Load packages
# Core
library(tidyverse)
library(tidyquant)
Visualize and examine changes in the underlying trend in the downside risk of your portfolio in terms of kurtosis.
Choose your stocks.
from 2012-12-31 to present
symbol <- c("SPY", "EFA", "IJS", "EEM", "AGG")
prices <- tq_get(x = symbol,
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"))
## asset date returns
## "asset" "date" "returns"
symbols <- asset_returns_tbl %>% distinct(symbol) %>% pull()
symbols
## [1] "AGG" "EEM" "EFA" "IJS" "SPY"
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)
# ?tq_portfolio
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: 60 × 2
## date returns
## <date> <dbl>
## 1 2013-01-31 0.0204
## 2 2013-02-28 -0.00239
## 3 2013-03-28 0.0121
## 4 2013-04-30 0.0174
## 5 2013-05-31 -0.0128
## 6 2013-06-28 -0.0247
## 7 2013-07-31 0.0321
## 8 2013-08-30 -0.0224
## 9 2013-09-30 0.0511
## 10 2013-10-31 0.0301
## # ℹ 50 more rows
portfolio_skew_tq_builtin_percent <- portfolio_returns_tbl %>%
tq_performance(Ra = returns,
performance_fun = table.Stats) %>%
select(Skewness)
portfolio_skew_tq_builtin_percent
## # A tibble: 1 × 1
## Skewness
## <dbl>
## 1 -0.168
window = 24
# Transform Data: Calculate 24-Month Rolling Kurtosis
rolling_kurt_tbl <- portfolio_returns_tbl %>%
tq_mutate(select = returns,
mutate_fun = rollapply,
width = window,
FUN = kurtosis,
col_rename = "kurt") %>%
na.omit() %>%
select(-returns)
#plot
rolling_kurt_tbl %>%
ggplot(aes(x = date, y = kurt)) +
geom_line(color = "cornflowerblue")+
#formatting
scale_y_continuous(breaks = seq(-1, 4, 0.5)) +
scale_x_date(breaks = scales::pretty_breaks(n = 7)) +
theme(plot.title = element_text(hjust = 0.5)) +
#labeling
labs(x = NULL,
y = "Kurtosis",
title = paste0("Rolling " , window, " Month Kurtosis")) +
annotate(geom = "text",
x = as.Date("2016-07-01"),
y = 3,
size = 5,
color = "red",
label = str_glue("Risk greatly rose throughout 2016 toward the end of 2017 from -0.5 to 3.5"))
Has the downside risk of your portfolio increased or decreased over
time? Explain using the plot you created. You may also refer to the
skewness of the returns distribution you plotted in the previous
assignment.
Overall, downside risk has increased throughout 2015-2018 with small
risk decreases. Greater downside risk appeared mid-year in 2017 and
skyrocketed into 2018.