# Load packages
# Core
library(tidyverse)
library(tidyquant)
Visualize and compare skewness of your portfolio and its assets.
Choose your stocks.
from 2012-12-31 to 2017-12-31
symbols <- c("NVDA", "AAPL", "NFLX", "MSFT", "TSLA")
prices <- tq_get (x = symbols,
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
symbol <- asset_returns_tbl %>% distinct(asset) %>% pull()
symbols
## [1] "NVDA" "AAPL" "NFLX" "MSFT" "TSLA"
# Weights
weights <- c(0.25, 0.25, 0.2, 0.2, 0.1)
weights
## [1] 0.25 0.25 0.20 0.20 0.10
w_tbl <- tibble(symbols, weights)
w_tbl
## # A tibble: 5 × 2
## symbols weights
## <chr> <dbl>
## 1 NVDA 0.25
## 2 AAPL 0.25
## 3 NFLX 0.2
## 4 MSFT 0.2
## 5 TSLA 0.1
# ?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.0926
## 2 2013-02-28 0.0258
## 3 2013-03-28 0.0195
## 4 2013-04-30 0.109
## 5 2013-05-31 0.0998
## 6 2013-06-28 -0.0456
## 7 2013-07-31 0.0755
## 8 2013-08-30 0.0906
## 9 2013-09-30 0.0378
## 10 2013-10-31 0.0188
## # … with 50 more rows
# Data Transformation: calculate skewness
asset_skewness_tbl <- asset_returns_tbl %>%
group_by(asset) %>%
summarise(skew = skewness(returns)) %>%
ungroup() %>%
# Add Portfolio Skewness
add_row(tibble(asset = "Portfolio",
skew = skewness(portfolio_returns_tbl$returns)))
asset_skewness_tbl
## # A tibble: 6 × 2
## asset skew
## <chr> <dbl>
## 1 AAPL -0.555
## 2 MSFT 0.0825
## 3 NFLX 0.909
## 4 NVDA 0.899
## 5 TSLA 0.944
## 6 Portfolio -0.306
# Plot Skewness
asset_skewness_tbl %>%
ggplot(aes(x = asset, y = skew, color = asset)) +
geom_point() +
ggrepel::geom_text_repel(aes(label = asset),
data = asset_skewness_tbl %>%
filter(asset == "Portfolio")) +
labs(y = "skewness")
Is any asset in your portfolio more likely to return extreme positive returns than your portfolio collectively? Discuss in terms of skewness. You may also refer to the distribution of returns you plotted in Code along 4.
I have three assets in my portfolio that are more likely to return extreme positive returns compared to my portfolio as a whole. Those three assets are Netflix, Nvidia, and Tesla. When looking at the history of these three stocks it doesn’t surprise me that they have a high skewness because they are known to have large gains. Microsoft has a positive skew too, like the other three stocks. But I didn’t include it with the others because it will most likely not be able to compete with them. Netflix, Nvidia, and Tesla are the upper echelon in my portfolio when it comes to having a positive skewness.