# Load packages
# Core
library(tidyverse)
library(tidyquant)
Collect individual returns into a portfolio by assigning a weight to each stock
five stocks: “SPY”, “EFA”, “IJS”, “EEM”, “AGG”
from 2012-12-31 to 2017-12-31
# Choose stocks
symbols <- c("SPY", "NVDA", "VOOG")
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()
weights <- c (.25, .50, .25)
weights
## [1] 0.25 0.50 0.25
weights_tbl <- tibble(symbols, weights)
weights_tbl
## # A tibble: 3 × 2
## symbols weights
## <chr> <dbl>
## 1 NVDA 0.25
## 2 SPY 0.5
## 3 VOOG 0.25
portfolio_returns_tbl <- asset_returns_tbl %>%
tq_portfolio(assets_col = asset,
returns_col = returns,
weights = weights_tbl,
col_rename = "returns",
rebalance_on = "months")
portfolio_returns_tbl
## # A tibble: 60 × 2
## date returns
## <date> <dbl>
## 1 2013-01-31 0.0347
## 2 2013-02-28 0.0193
## 3 2013-03-28 0.0310
## 4 2013-04-30 0.0322
## 5 2013-05-31 0.0311
## 6 2013-06-28 -0.0173
## 7 2013-07-31 0.0436
## 8 2013-08-30 -0.0150
## 9 2013-09-30 0.0384
## 10 2013-10-31 0.0286
## # ℹ 50 more rows
portfolio_skew_tidyquant_building_percent <- portfolio_returns_tbl %>%
tq_performance(Ra = returns,
performance_fun = table.Stats) %>%
select(Kurtosis)
portfolio_skew_tidyquant_building_percent
## # A tibble: 1 × 1
## Kurtosis
## <dbl>
## 1 -0.0101
portfolio_returns_tbl %>%
ggplot(aes(x = returns)) +
geom_histogram()
#transform data
mean_kurt_tbl<-asset_returns_tbl %>%
#calculate Mean return
group_by(asset) %>%
summarise(mean = mean(returns),
kurt = kurtosis(returns)) %>%
ungroup()
#add portfolio stats
add_row(portfolio_returns_tbl %>%
summarise(mean = mean(returns),
kurt = kurtosis(returns)) %>%
mutate(asset = "portfolio"))
## # A tibble: 2 × 3
## mean kurt asset
## <dbl> <dbl> <chr>
## 1 0.0211 -0.0101 portfolio
## 2 NA NA <NA>
#plot
mean_kurt_tbl %>%
ggplot(aes(x = kurt, y = mean)) +
geom_point() +
ggrepel::geom_text_repel(aes(label = asset, color = asset)) +
#formatting
theme(legend.position = "none") +
scale_y_continuous(labels = scales :: percent_format(accuracy = 0.1))+
#labeling
labs(x = "kurtosis",
y = "Expected Returns")
### Rolling 24 month Kurtosis
#assign a value for window
window = 12
#transform data:: calc 24 month rolling kurt
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") +
#formating
scale_y_continuous(breaks = seq(-1,4,0.5)) +
scale_x_continuous(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("downside Risk skyrocketed
toward the end of 2017"))
## NULL
Has the downside risk of your portfolio increased or decreased overtime? explain using the plot you created. You may also refer to the skewness of the returns of distribution you plotted in the previous assignment.
Anwser: the downside risk of my portfolio has increased during this time period.This is because the risk level increased a decent amount because the kurtosis levels are begining to rise from the start date.When you look at the skewness of the previous assignment it was a negative skewed number, and shows no signs of thjis changing.