Cleaning Environment
rm(list=ls())
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(pdfetch)
## Warning: package 'pdfetch' was built under R version 4.2.2
library(ggplot2)
Fetching S&P500 data from Yahoo
SnP_500 = pdfetch_YAHOO("^GSPC", from = "2013-01-01", to = "2022-12-31") %>% data.frame() %>% tibble::rownames_to_column("date") %>% select(date,contains(".open"),contains(".close"))
SnP_500 = SnP_500 %>% mutate(Year = format(as.Date(SnP_500$date, format="%Y-%m-%d"),"%Y"))
SnP_500_2013 = SnP_500 %>% filter(Year == "2013") %>% na.omit()
SnP_500_2014 = SnP_500 %>% filter(Year == "2014") %>% na.omit()
SnP_500_2015 = SnP_500 %>% filter(Year == "2015") %>% na.omit()
SnP_500_2016 = SnP_500 %>% filter(Year == "2016") %>% na.omit()
SnP_500_2017 = SnP_500 %>% filter(Year == "2017") %>% na.omit()
SnP_500_2018 = SnP_500 %>% filter(Year == "2018") %>% na.omit()
SnP_500_2019 = SnP_500 %>% filter(Year == "2019") %>% na.omit()
SnP_500_2020 = SnP_500 %>% filter(Year == "2020") %>% na.omit()
SnP_500_2021 = SnP_500 %>% filter(Year == "2021") %>% na.omit()
SnP_500_2022 = SnP_500 %>% filter(Year == "2022") %>% na.omit()
Creating CAGR Function to use later
CAGR = function(EV,BV,n){
Rate = ((EV/BV)^(1/n) - 1) * 100
return(Rate)
}
Applying CAGR Function to our data
SnP_500_2013_2015_CAGR = CAGR(SnP_500_2015[nrow(SnP_500_2015),3],SnP_500_2013[1,2],3) %>% round(2)
SnP_500_2014_2016_CAGR = CAGR(SnP_500_2016[nrow(SnP_500_2016),3],SnP_500_2014[1,2],3) %>% round(2)
SnP_500_2015_2017_CAGR = CAGR(SnP_500_2017[nrow(SnP_500_2017),3],SnP_500_2015[1,2],3) %>% round(2)
SnP_500_2016_2018_CAGR = CAGR(SnP_500_2018[nrow(SnP_500_2018),3],SnP_500_2016[1,2],3) %>% round(2)
SnP_500_2017_2019_CAGR = CAGR(SnP_500_2019[nrow(SnP_500_2019),3],SnP_500_2017[1,2],3) %>% round(2)
SnP_500_2018_2020_CAGR = CAGR(SnP_500_2020[nrow(SnP_500_2020),3],SnP_500_2018[1,2],3) %>% round(2)
SnP_500_2019_2021_CAGR = CAGR(SnP_500_2021[nrow(SnP_500_2021),3],SnP_500_2019[1,2],3) %>% round(2)
SnP_500_2020_2022_CAGR = CAGR(SnP_500_2022[nrow(SnP_500_2022),3],SnP_500_2020[1,2],3) %>% round(2)
Creating df to visualize returns
df = data.frame(rbind(SnP_500_2013_2015_CAGR,
SnP_500_2014_2016_CAGR,
SnP_500_2015_2017_CAGR,
SnP_500_2016_2018_CAGR,
SnP_500_2017_2019_CAGR,
SnP_500_2018_2020_CAGR,
SnP_500_2019_2021_CAGR,
SnP_500_2020_2022_CAGR)) %>% tibble::rownames_to_column("Index")
names(df)[1] = "Index"
names(df)[2] = "Percent_Change"
df$Year = c("1","2","3","4","5","6","7","8")
Using ggplot2 package to create graphical visualization
ggplot(df, aes(x = Year, y = Percent_Change)) +
geom_bar(stat = "identity", color = "blue", fill=rgb(0.1,0.4,0.5,0.7)) +
geom_text(label = df$Percent_Change, nudge_x = 0.0, nudge_y = -0.6) +
labs(x = "Index", y = "CAGR") +
scale_x_discrete(labels=c('SnP500_2013-15', 'SnP500_2014-16','SnP500_2015-17', 'SnP500_2016-18','SnP500_2017-19', 'SnP500_2018-20', 'SnP500_2019-21', 'SnP500_2019-22'))
