You are considering three index funds that follow the three major market indexes: the Dow Jones Industrial Average, the S&P 500, and the NASDAQ Compsite Index.

Q1. Load tidyquant and tidyverse packages.

library(tidyquant)
library(tidyverse)

Q2. Import the Dow Jones Industrial Average, the S&P 500, and the NASDAQ Compsite Index for the last 30 years. Save the imported data under Stocks.

Hint: Add group_by(symbol) at the end of the code so that calculations below will be done per stock.

from = today() - years(30)
Stocks <-
  tq_get(c("^DJI", "^GSPC", "^IXIC"), get = "stock.prices", from = from) %>%
  group_by(symbol)
Stocks
## # A tibble: 22,677 x 8
## # Groups:   symbol [3]
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 ^DJI   1989-04-17 2332. 2348. 2324. 2338. 13760000    2338.
##  2 ^DJI   1989-04-18 2357. 2386  2351. 2379. 25240000    2379.
##  3 ^DJI   1989-04-19 2377. 2398. 2370. 2387. 21700000    2387.
##  4 ^DJI   1989-04-20 2390. 2399. 2357. 2377. 21410000    2377.
##  5 ^DJI   1989-04-21 2383. 2413. 2373. 2409. 27210000    2409.
##  6 ^DJI   1989-04-24 2397. 2416. 2385. 2403. 18550000    2403.
##  7 ^DJI   1989-04-25 2408. 2422. 2379. 2387. 21850000    2387.
##  8 ^DJI   1989-04-26 2393. 2404. 2374. 2389. 17050000    2389.
##  9 ^DJI   1989-04-27 2393. 2433. 2388. 2419. 25780000    2419.
## 10 ^DJI   1989-04-28 2420. 2430. 2404. 2419. 17410000    2419.
## # ... with 22,667 more rows

Q3. Calculate yearly returns, and save the result under returns_yearly.

Hint: Take Stocks and pipe it to tidyquant::tq_transmute. Assign the result to returns_yearly.

returns_yearly <-
  Stocks %>%
    tq_transmute(select = adjusted, mutate_fun = periodReturn, period = "yearly")
returns_yearly
## # A tibble: 93 x 3
## # Groups:   symbol [3]
##    symbol date       yearly.returns
##    <chr>  <date>              <dbl>
##  1 ^DJI   1989-12-29         0.178 
##  2 ^DJI   1990-12-31        -0.0434
##  3 ^DJI   1991-12-31         0.203 
##  4 ^DJI   1992-12-31         0.0417
##  5 ^DJI   1993-12-31         0.137 
##  6 ^DJI   1994-12-30         0.0214
##  7 ^DJI   1995-12-29         0.335 
##  8 ^DJI   1996-12-31         0.260 
##  9 ^DJI   1997-12-31         0.226 
## 10 ^DJI   1998-12-31         0.161 
## # ... with 83 more rows

Q4. Create a density plot for returns of all considered index funds.

Hint: Refer to the ggplot2 cheatsheet. Look for geom_density under One Variable. Use the fill argument to create the plot per each stock.

returns_yearly %>%
  ggplot(aes(x = yearly.returns, fill = symbol)) +
  geom_density(alpha = 0.3)

Q5. Which of the considered index funds has the highest expected yearly return?

Hint: Take returns_yearly and pipe it to summarise. Calculate the mean yearly returns.

returns_yearly %>%
  summarise(returns_avg = mean(yearly.returns))
## # A tibble: 3 x 2
##   symbol returns_avg
##   <chr>        <dbl>
## 1 ^DJI        0.0917
## 2 ^GSPC       0.0895
## 3 ^IXIC       0.134

Q6. Which of the considered index funds is the riskiest?

Hint: Discuss your answer in terms of standard deviation. Take returns_yearly and pipe it to tidyquant::tq_performance. Use the performance_fun argument to compute sd (standard deviation).

According to standard deviation NASDAQ index fund is the riskiest for investors.

returns_yearly %>%
    tq_performance(Ra = yearly.returns,
                   Rb = NULL, # Calculataing downside risk measures doesn't require Rb
                   performance_fun = sd)
## # A tibble: 3 x 2
## # Groups:   symbol [3]
##   symbol  sd.1
##   <chr>  <dbl>
## 1 ^DJI   0.146
## 2 ^GSPC  0.165
## 3 ^IXIC  0.276

Q7. Would you consider the standard deviation as an appropriate measure of risk for the considered index funds?

Hint: Discuss your answer in terms of whether the returns are normally distributed. The normality of the distribution may be measured by skewness and kurtosis. To compute the metrics, take returns_yearly and pipe it to tidyquant::tq_performance. Use the performance_fun argument to compute skewness. Do the same for kurtosis.

For these three considered index funds, standard deviation is not an appropriate measure of risk.

returns_yearly %>%
    tq_performance(Ra = yearly.returns,
                   Rb = NULL, # Calculataing downside risk measures doesn't require Rb
                   performance_fun = kurtosis)
## # A tibble: 3 x 2
## # Groups:   symbol [3]
##   symbol kurtosis.1
##   <chr>       <dbl>
## 1 ^DJI        0.750
## 2 ^GSPC       0.631
## 3 ^IXIC       0.435

Q8. Which of the considered index funds poses the greatest downside risks?

Hint: Discuss your answer in terms of HistoricalES(95%), HistoricalVaR(95%), and SemiDeviation. To compute the metrics, take returns_yearly and pipe it to tidyquant::tq_performance. Use the performance_fun argument to compute table.DownsideRisk.

Dow Jones index fund poses as the greatest downside risk investment.

returns_yearly %>%
    tq_performance(Ra = yearly.returns,
                   Rb = NULL, # Calculataing downside risk measures doesn't require Rb
                   performance_fun = table.DownsideRisk) %>% t()
##                                           [,1]      [,2]      [,3]     
## symbol                                    "^DJI"    "^GSPC"   "^IXIC"  
## DownsideDeviation(0%)                     "0.0712"  "0.0877"  "0.1266" 
## DownsideDeviation(MAR=0.833333333333333%) "0.0741"  "0.0908"  "0.1300" 
## DownsideDeviation(Rf=0%)                  "0.0712"  "0.0877"  "0.1266" 
## GainDeviation                             "0.0888"  "0.0928"  "0.2028" 
## HistoricalES(95%)                         "-0.2530" "-0.3093" "-0.3991"
## HistoricalVaR(95%)                        "-0.1193" "-0.1820" "-0.3541"
## LossDeviation                             "0.1092"  "0.1261"  "0.1606" 
## MaximumDrawdown                           "0.3384"  "0.4012"  "0.6718" 
## ModifiedES(95%)                           "-0.2584" "-0.3013" "-0.4083"
## ModifiedVaR(95%)                          "-0.1718" "-0.2116" "-0.2957"
## SemiDeviation                             "0.1105"  "0.1268"  "0.1883"

Q9. Which of the considered index funds would you choose if you were a risk-averse investor?

Hint: Discuss your answer in terms of Sharpe Ratio. Take returns_yearly and pipe it to tidyquant:: tq_performance. Use the performance_fun argument to compute SharpeRatio. The function returns Sharpe Ratios adjusted to three different types of risks: 1) standard deviation, 2) expected shortfall (5% worst loss), and 3) value at risk (the largest loss at the 95% confidence level).

If I was a risk-averse investor I would choose to invest in S&P 500 because they have lower returns with known risks rather than higher returns with unknown risks.

returns_yearly %>%
    tq_performance(Ra = yearly.returns,
                   Rb = NULL, # Calculataing downside risk measures doesn't require Rb
                   performance_fun = SharpeRatio)
## # A tibble: 3 x 4
## # Groups:   symbol [3]
##   symbol `ESSharpe(Rf=0%,p=95~ `StdDevSharpe(Rf=0%,p=~ `VaRSharpe(Rf=0%,p=~
##   <chr>                  <dbl>                   <dbl>                <dbl>
## 1 ^DJI                   0.355                   0.630                0.534
## 2 ^GSPC                  0.297                   0.542                0.423
## 3 ^IXIC                  0.328                   0.486                0.454

Q10.a. Display both code and the results of the code on the webpage.

Q10.b. Display the title and your name correctly at the top of the webpage.

Q10.c. Use the correct slug.