# Load packages
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.2
## ✔ ggplot2 3.5.2 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tidyquant)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## ── Attaching core tidyquant packages ─────────────────────── tidyquant 1.0.11 ──
## ✔ PerformanceAnalytics 2.0.8 ✔ TTR 0.24.4
## ✔ quantmod 0.4.28 ✔ xts 0.14.1── Conflicts ────────────────────────────────────────── tidyquant_conflicts() ──
## ✖ zoo::as.Date() masks base::as.Date()
## ✖ zoo::as.Date.numeric() masks base::as.Date.numeric()
## ✖ dplyr::filter() masks stats::filter()
## ✖ xts::first() masks dplyr::first()
## ✖ dplyr::lag() masks stats::lag()
## ✖ xts::last() masks dplyr::last()
## ✖ PerformanceAnalytics::legend() masks graphics::legend()
## ✖ quantmod::summary() masks base::summary()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
symbols <- c("AMZN", "MSFT", "NFLX")
prices <- tq_get(x = symbols,
get = "stock.prices",
from = "2022-01-01",
to = "2022-12-31")
asset_returns_tbl <- prices %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "quarterly",
type = "log") %>%
ungroup () %>%
set_names(c("asset", "date", "returns"))
asset_returns_tbl
## # A tibble: 12 × 3
## asset date returns
## <chr> <date> <dbl>
## 1 AMZN 2022-03-31 -0.0444
## 2 AMZN 2022-06-30 -0.428
## 3 AMZN 2022-09-30 0.0620
## 4 AMZN 2022-12-30 -0.297
## 5 MSFT 2022-03-31 -0.0802
## 6 MSFT 2022-06-30 -0.180
## 7 MSFT 2022-09-30 -0.0957
## 8 MSFT 2022-12-30 0.0321
## 9 NFLX 2022-03-31 -0.467
## 10 NFLX 2022-06-30 -0.762
## 11 NFLX 2022-09-30 0.297
## 12 NFLX 2022-12-30 0.225
asset_returns_tbl %>%
ggplot(aes(x = returns)) +
geom_density(aes(color = asset), show.legend = FALSE, alpha = 1) +
geom_histogram(aes(fill = asset), show.legend = FALSE, alpha = 0.3, binwidth = 0.01) +
facet_wrap(~asset, ncol = 1) +
# labeling
labs(title = "Distribution of Quarterly Returns, 2022",
y = "Frequency",
x = "Weight of Returns",
caption = "A typical monthly return is higher for SPY and IJS than for AGG, EEM, and EFA.")
For the year of 2022, Microsoft had the highest return among Amazon and Netflix, sitting at a -27.8%, then Amazon was behind at -49.62% and then finally Netflix being -51.05%.