# Load Packages
library(tidyquant)
library(tidyverse)

1 Get Stock Prices And Convert To Returns

Ra <- c("UAL", "AAL", "LUV") %>%
    tq_get(get = "stock.prices",
           from = "2024-01-01") %>%
    group_by(symbol) %>%
    tq_transmute(select     = adjusted,
                 mutate_fun = periodReturn,
                 period     = "monthly",
                 col_rename = "Ra")
Ra
## # A tibble: 51 × 3
## # Groups:   symbol [3]
##    symbol date            Ra
##    <chr>  <date>       <dbl>
##  1 UAL    2024-01-31  0.0162
##  2 UAL    2024-02-29  0.0993
##  3 UAL    2024-03-28  0.0525
##  4 UAL    2024-04-30  0.0748
##  5 UAL    2024-05-31  0.0297
##  6 UAL    2024-06-28 -0.0817
##  7 UAL    2024-07-31 -0.0666
##  8 UAL    2024-08-30 -0.0304
##  9 UAL    2024-09-30  0.296 
## 10 UAL    2024-10-31  0.372 
## # ℹ 41 more rows

2 Get baseline and convert to returns

Rb <- "^IXIC" %>%
    tq_get(get = "stock.prices",
           from = "2024-01-01") %>%
    tq_transmute(select     = adjusted,
                 mutate_fun = periodReturn,
                 period     = "monthly",
                 col_rename = "Rb")
Rb
## # A tibble: 17 × 2
##    date             Rb
##    <date>        <dbl>
##  1 2024-01-31  0.0270 
##  2 2024-02-29  0.0612 
##  3 2024-03-28  0.0179 
##  4 2024-04-30 -0.0441 
##  5 2024-05-31  0.0688 
##  6 2024-06-28  0.0596 
##  7 2024-07-31 -0.00751
##  8 2024-08-30  0.00649
##  9 2024-09-30  0.0268 
## 10 2024-10-31 -0.00517
## 11 2024-11-29  0.0621 
## 12 2024-12-31  0.00482
## 13 2025-01-31  0.0164 
## 14 2025-02-28 -0.0397 
## 15 2025-03-31 -0.0821 
## 16 2025-04-30  0.00850
## 17 2025-05-23  0.0740

3 Join the two tables

RaRb <- left_join(Ra, Rb, by = c("date" = "date"))
RaRb
## # A tibble: 51 × 4
## # Groups:   symbol [3]
##    symbol date            Ra       Rb
##    <chr>  <date>       <dbl>    <dbl>
##  1 UAL    2024-01-31  0.0162  0.0270 
##  2 UAL    2024-02-29  0.0993  0.0612 
##  3 UAL    2024-03-28  0.0525  0.0179 
##  4 UAL    2024-04-30  0.0748 -0.0441 
##  5 UAL    2024-05-31  0.0297  0.0688 
##  6 UAL    2024-06-28 -0.0817  0.0596 
##  7 UAL    2024-07-31 -0.0666 -0.00751
##  8 UAL    2024-08-30 -0.0304  0.00649
##  9 UAL    2024-09-30  0.296   0.0268 
## 10 UAL    2024-10-31  0.372  -0.00517
## # ℹ 41 more rows

4 Calculate CAPM

RaRb_capm <- RaRb %>%
    tq_performance(Ra = Ra,
                   Rb = Rb,
                   performance_fun = table.CAPM)
RaRb_capm
## # A tibble: 3 × 18
## # Groups:   symbol [3]
##   symbol ActivePremium   Alpha AlphaRobust AnnualizedAlpha  Beta `Beta-`
##   <chr>          <dbl>   <dbl>       <dbl>           <dbl> <dbl>   <dbl>
## 1 UAL            0.351  0.0246     -0.0111          0.339  1.48    5.43 
## 2 AAL           -0.304 -0.0257     -0.0501         -0.268  1.52    4.55 
## 3 LUV           -0.101  0.0009      0.0023          0.0112 0.648  -0.970
## # ℹ 11 more variables: `Beta-Robust` <dbl>, `Beta+` <dbl>, `Beta+Robust` <dbl>,
## #   BetaRobust <dbl>, Correlation <dbl>, `Correlationp-value` <dbl>,
## #   InformationRatio <dbl>, `R-squared` <dbl>, `R-squaredRobust` <dbl>,
## #   TrackingError <dbl>, TreynorRatio <dbl>

United Airlines

Which Stock Has A Positively Skewed Distribution Of Returns?

RaRb_skew <- RaRb %>%
    tq_performance(Ra = Ra,
                   performance_fun = skewness)
RaRb_skew
## # A tibble: 3 × 2
## # Groups:   symbol [3]
##   symbol skewness.1
##   <chr>       <dbl>
## 1 UAL         0.334
## 2 AAL        -0.197
## 3 LUV        -0.667

United Airlines