R Markdown
library(tidyquant)
library(tidyverse)
library(dplyr)
###2004-2005
#ESG stock returns
ESGstock_returns_monthly2004 <- c("A", "TXN", "VOYA", "TIF", "BBY", "HPQ", "CSCO", "GWW", "AVT", "ADSK", "NVDA", "PVH", "CBRE", "MAN", "ON", "BLL", "ECL", "HAS", "MSI", "AVY", "VFC", "AWK", "ORA", "CLX", "K", "CL", "UNF", "NEE", "ADBE", "VZ", "CRM", "WSM", "APD", "HBI", "ITRI", "TROW", "OSK", "KEYS", "DAL", "PRU", "VAR", "MSFT", "CTL", "KO", "FSLR", "RHI", "LRCX", "ATR", "SBUX", "CMI") %>%
tq_get(get = "stock.prices",
from = "2003-01-01",
to = "2005-12-31") %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "Ra")
ESGstock_returns_monthly2004
## # A tibble: 1,528 x 3
## # Groups: symbol [44]
## symbol date Ra
## <chr> <date> <dbl>
## 1 A 2003-01-31 -0.139
## 2 A 2003-02-28 -0.199
## 3 A 2003-03-31 -0.00379
## 4 A 2003-04-30 0.218
## 5 A 2003-05-30 0.132
## 6 A 2003-06-30 0.0783
## 7 A 2003-07-31 0.112
## 8 A 2003-08-29 0.119
## 9 A 2003-09-30 -0.0909
## 10 A 2003-10-31 0.127
## # ... with 1,518 more rows
#Monthly Returns for individual ESG stocks
ESGmonthly2004 <- ESGstock_returns_monthly2004 %>%
tq_repeat_df(n = 1)
ESGmonthly2004
## # A tibble: 1,528 x 4
## # Groups: portfolio [1]
## portfolio symbol date Ra
## <int> <chr> <date> <dbl>
## 1 1 A 2003-01-31 -0.139
## 2 1 A 2003-02-28 -0.199
## 3 1 A 2003-03-31 -0.00379
## 4 1 A 2003-04-30 0.218
## 5 1 A 2003-05-30 0.132
## 6 1 A 2003-06-30 0.0783
## 7 1 A 2003-07-31 0.112
## 8 1 A 2003-08-29 0.119
## 9 1 A 2003-09-30 -0.0909
## 10 1 A 2003-10-31 0.127
## # ... with 1,518 more rows
weighting for ESG portfolio
weights <- c(.02439, .02439, 0, .02439, .02439, .02439, .02439, .02439, 0, 0,
.02439, .02439, .02439, .02439, .02439, .02439, .02439, .02439, .02439, .02439,
.02439, 0, .02439, 0, .02439, .02439, .02439, .02439, .02439, .02439,
.02439, .02439, .02439, 0, .02439, .02439, .02439, 0, 0, .02439,
.02439, .02439, .02439, .02439, 0, .02439, .02439, .02439, .02439, .02439)
ESGstocks <- c("A", "TXN", "VOYA", "TIF", "BBY", "HPQ", "CSCO", "GWW", "AVT", "ADSK", "NVDA", "PVH", "CBRE", "MAN", "ON", "BLL", "ECL", "HAS", "MSI", "AVY", "VFC", "AWK", "ORA", "CLX", "K", "CL", "UNF", "NEE", "ADBE", "VZ", "CRM", "WSM", "APD", "HBI", "ITRI", "TROW", "OSK", "KEYS", "DAL", "PRU", "VAR", "MSFT", "CTL", "KO", "FSLR", "RHI", "LRCX", "ATR", "SBUX", "CMI")
weights_table <- tibble(ESGstocks) %>%
tq_repeat_df(n = 1) %>%
bind_cols(tibble(weights)) %>%
group_by(portfolio)
weights_table
## # A tibble: 50 x 3
## # Groups: portfolio [1]
## portfolio ESGstocks weights
## <int> <chr> <dbl>
## 1 1 A 0.0244
## 2 1 TXN 0.0244
## 3 1 VOYA 0
## 4 1 TIF 0.0244
## 5 1 BBY 0.0244
## 6 1 HPQ 0.0244
## 7 1 CSCO 0.0244
## 8 1 GWW 0.0244
## 9 1 AVT 0
## 10 1 ADSK 0
## # ... with 40 more rows
ESG portfolio returns
ESGportfolio2004 <-
ESGmonthly2004 %>%
tq_portfolio(assets_col = symbol,
returns_col = Ra,
weights = weights_table,
col_rename = "Ra")
ESGportfolio2004
## # A tibble: 36 x 3
## # Groups: portfolio [1]
## portfolio date Ra
## <int> <date> <dbl>
## 1 1 2003-01-31 -0.0466
## 2 1 2003-02-28 -0.00899
## 3 1 2003-03-31 0.0136
## 4 1 2003-04-30 0.0745
## 5 1 2003-05-30 0.111
## 6 1 2003-06-30 0.0102
## 7 1 2003-07-31 0.0449
## 8 1 2003-08-29 0.0754
## 9 1 2003-09-30 -0.0407
## 10 1 2003-10-31 0.102
## # ... with 26 more rows
S&P for baseline
baseline_returns_monthly2004 <- "^GSPC" %>%
tq_get(get = "stock.prices",
from = "2003-01-01",
to = "2005-12-31") %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "Rb")
baseline_returns_monthly2004
## # A tibble: 36 x 2
## date Rb
## <date> <dbl>
## 1 2003-01-31 -0.0587
## 2 2003-02-28 -0.0170
## 3 2003-03-31 0.00836
## 4 2003-04-30 0.0810
## 5 2003-05-30 0.0509
## 6 2003-06-30 0.0113
## 7 2003-07-31 0.0162
## 8 2003-08-29 0.0179
## 9 2003-09-30 -0.0119
## 10 2003-10-31 0.0550
## # ... with 26 more rows
Merged S&P and ESG
RaRb_single_portfolio2004 <- left_join(ESGportfolio2004 ,
baseline_returns_monthly2004,
by = "date")
RaRb_single_portfolio2004
## # A tibble: 36 x 4
## # Groups: portfolio [1]
## portfolio date Ra Rb
## <int> <date> <dbl> <dbl>
## 1 1 2003-01-31 -0.0466 -0.0587
## 2 1 2003-02-28 -0.00899 -0.0170
## 3 1 2003-03-31 0.0136 0.00836
## 4 1 2003-04-30 0.0745 0.0810
## 5 1 2003-05-30 0.111 0.0509
## 6 1 2003-06-30 0.0102 0.0113
## 7 1 2003-07-31 0.0449 0.0162
## 8 1 2003-08-29 0.0754 0.0179
## 9 1 2003-09-30 -0.0407 -0.0119
## 10 1 2003-10-31 0.102 0.0550
## # ... with 26 more rows
2003-2005 ESG CAPM Table, S&P 500 Baseline
RaRb_single_portfolio2004 %>%
tq_performance(Ra = Ra, Rb = Rb, performance_fun = table.CAPM) %>%
t()
## [,1]
## portfolio 1.0000
## ActivePremium 0.1514
## Alpha 0.0080
## AnnualizedAlpha 0.0998
## Beta 1.3731
## Beta- 1.0230
## Beta+ 1.1221
## Correlation 0.8438
## Correlationp-value 0.0000
## InformationRatio 1.6398
## R-squared 0.7120
## TrackingError 0.0923
## TreynorRatio 0.1914
Dirtystock_returns_monthly2004 <- c("WMB", "DVN", "SLB", "BKR", "VLO", "PSX", "NBL", "KMI", "OKE", "HES","EMN", "ECL", "NBR", "VAL", "CF", "SEE", "NEM", "VMC", "MLM", "SWN", "MPC", "CWEN", "DUK", "COG", "XOM") %>%
tq_get(get = "stock.prices",
from = "2003-01-01",
to = "2005-12-31") %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "Rc")
Dirtystock_returns_monthly2004
## # A tibble: 725 x 3
## # Groups: symbol [21]
## symbol date Rc
## <chr> <date> <dbl>
## 1 WMB 2003-01-31 0.149
## 2 WMB 2003-02-28 0.176
## 3 WMB 2003-03-31 0.206
## 4 WMB 2003-04-30 0.517
## 5 WMB 2003-05-30 0.138
## 6 WMB 2003-06-30 0.000195
## 7 WMB 2003-07-31 -0.196
## 8 WMB 2003-08-29 0.440
## 9 WMB 2003-09-30 0.0318
## 10 WMB 2003-10-31 0.0828
## # ... with 715 more rows
Monthly Returns for individual Dirty Investing
Dirtymonthly2004 <- Dirtystock_returns_monthly2004 %>%
tq_repeat_df(n = 1)
Dirtymonthly2004
## # A tibble: 725 x 4
## # Groups: portfolio [1]
## portfolio symbol date Rc
## <int> <chr> <date> <dbl>
## 1 1 WMB 2003-01-31 0.149
## 2 1 WMB 2003-02-28 0.176
## 3 1 WMB 2003-03-31 0.206
## 4 1 WMB 2003-04-30 0.517
## 5 1 WMB 2003-05-30 0.138
## 6 1 WMB 2003-06-30 0.000195
## 7 1 WMB 2003-07-31 -0.196
## 8 1 WMB 2003-08-29 0.440
## 9 1 WMB 2003-09-30 0.0318
## 10 1 WMB 2003-10-31 0.0828
## # ... with 715 more rows
weighting for dirty portfolio
weights1 <- c(.05, .05, .05, .05, .05, 0, .05, 0, .05, .05,
.05, .05, .05, .05, 0, .05, .05, .05, .05, .05,
0, 0, .05, .05, .05)
Dirtystocks <- c("WMB", "DVN", "SLB", "BKR", "VLO", "PSX", "NBL", "KMI", "OKE", "HES","EMN", "ECL", "NBR", "VAL", "CF", "SEE", "NEM", "VMC", "MLM", "SWN", "MPC", "CWEN", "DUK", "COG", "XOM")
weights_table1 <- tibble(Dirtystocks) %>%
tq_repeat_df(n = 1) %>%
bind_cols(tibble(weights1)) %>%
group_by(portfolio)
weights_table1
## # A tibble: 25 x 3
## # Groups: portfolio [1]
## portfolio Dirtystocks weights1
## <int> <chr> <dbl>
## 1 1 WMB 0.05
## 2 1 DVN 0.05
## 3 1 SLB 0.05
## 4 1 BKR 0.05
## 5 1 VLO 0.05
## 6 1 PSX 0
## 7 1 NBL 0.05
## 8 1 KMI 0
## 9 1 OKE 0.05
## 10 1 HES 0.05
## # ... with 15 more rows
Dirty portfolio returns
Dirtyportfolio2004 <-
Dirtymonthly2004 %>%
tq_portfolio(assets_col = symbol,
returns_col = Rc,
weights = weights_table1,
col_rename = "Rc")
Dirtyportfolio2004
## # A tibble: 36 x 3
## # Groups: portfolio [1]
## portfolio date Rc
## <int> <date> <dbl>
## 1 1 2003-01-31 -0.0622
## 2 1 2003-02-28 0.0109
## 3 1 2003-03-31 0.0194
## 4 1 2003-04-30 0.0684
## 5 1 2003-05-30 0.105
## 6 1 2003-06-30 -0.00297
## 7 1 2003-07-31 -0.0314
## 8 1 2003-08-29 0.103
## 9 1 2003-09-30 -0.0207
## 10 1 2003-10-31 0.0475
## # ... with 26 more rows
Merged S&P and Dirty
RcRb_single_portfolio2004 <- left_join(Dirtyportfolio2004 ,
baseline_returns_monthly2004,
by = "date")
RcRb_single_portfolio2004
## # A tibble: 36 x 4
## # Groups: portfolio [1]
## portfolio date Rc Rb
## <int> <date> <dbl> <dbl>
## 1 1 2003-01-31 -0.0622 -0.0587
## 2 1 2003-02-28 0.0109 -0.0170
## 3 1 2003-03-31 0.0194 0.00836
## 4 1 2003-04-30 0.0684 0.0810
## 5 1 2003-05-30 0.105 0.0509
## 6 1 2003-06-30 -0.00297 0.0113
## 7 1 2003-07-31 -0.0314 0.0162
## 8 1 2003-08-29 0.103 0.0179
## 9 1 2003-09-30 -0.0207 -0.0119
## 10 1 2003-10-31 0.0475 0.0550
## # ... with 26 more rows
RcRb_single_portfolio2004 %>%
tq_performance(Ra = Rc, Rb = Rb, performance_fun = table.CAPM) %>%
t()
## [,1]
## portfolio 1.0000
## ActivePremium 0.3399
## Alpha 0.0236
## AnnualizedAlpha 0.3237
## Beta 1.0011
## Beta- 1.9649
## Beta+ 0.7743
## Correlation 0.5243
## Correlationp-value 0.0010
## InformationRatio 2.1511
## R-squared 0.2749
## TrackingError 0.1580
## TreynorRatio 0.4509
Merged ESG and Dirty
RaRc_single_portfolio2004 <- left_join(Dirtyportfolio2004 ,
ESGportfolio2004,
by = "date")
RaRc_single_portfolio2004
## # A tibble: 36 x 5
## # Groups: portfolio.x [1]
## portfolio.x date Rc portfolio.y Ra
## <int> <date> <dbl> <int> <dbl>
## 1 1 2003-01-31 -0.0622 1 -0.0466
## 2 1 2003-02-28 0.0109 1 -0.00899
## 3 1 2003-03-31 0.0194 1 0.0136
## 4 1 2003-04-30 0.0684 1 0.0745
## 5 1 2003-05-30 0.105 1 0.111
## 6 1 2003-06-30 -0.00297 1 0.0102
## 7 1 2003-07-31 -0.0314 1 0.0449
## 8 1 2003-08-29 0.103 1 0.0754
## 9 1 2003-09-30 -0.0207 1 -0.0407
## 10 1 2003-10-31 0.0475 1 0.102
## # ... with 26 more rows
2003-2005 Non-ESG CAPM Table, S&P 500 Baseline
RaRc_single_portfolio2004 %>%
tq_performance(Ra = Ra, Rb = Rc, performance_fun = table.CAPM) %>%
t()
## [,1]
## portfolio.x 1.0000
## ActivePremium -0.1886
## Alpha 0.0072
## AnnualizedAlpha 0.0901
## Beta 0.4080
## Beta- 0.5901
## Beta+ 0.5004
## Correlation 0.4787
## Correlationp-value 0.0031
## InformationRatio -1.0649
## R-squared 0.2291
## TrackingError 0.1771
## TreynorRatio 0.6443
ggplot(ESGportfolio2004,
aes(x = Ra, fill = "Return Density")) +
geom_density(alpha = 0.4) +
labs(title = "ESG Returns 2003-2005",x = "Percentage Return", y = "Return Occurences (Monthly)")
ggplot(ESGportfolio2004,
aes(x = date,
y = Ra)) +
geom_line() +
labs(title = "ESG Portfolio Returns 2003-2005",x = "Date", y = "Percentage Return")
ggplot(Dirtyportfolio2004,
aes(x = Rc, fill = "Return Density")) +
geom_density(alpha = 0.4) +
labs(title = "Non-ESG Portfolio Returns 2003-2005",x = "Percentage Return", y = "Return Occurences (Monthly)")
ggplot(Dirtyportfolio2004,
aes(x = date,
y = Rc)) +
geom_line() +
labs(title = "Non-ESG Portfolio Returns 2003-2005",x = "Date", y = "Percentage Return")
##2008-2010
ESG stock returns
ESGstock_returns_monthly2009 <- c("A", "TXN", "VOYA", "TIF", "BBY", "HPQ", "CSCO", "GWW", "AVT", "ADSK", "NVDA", "PVH", "CBRE", "MAN", "ON", "BLL", "ECL", "HAS", "MSI", "AVY", "VFC", "AWK", "ORA", "CLX", "K", "CL", "UNF", "NEE", "ADBE", "VZ", "CRM", "WSM", "APD", "HBI", "ITRI", "TROW", "OSK", "KEYS", "DAL", "PRU", "VAR", "MSFT", "CTL", "KO", "FSLR", "RHI", "LRCX", "ATR", "SBUX", "CMI") %>%
tq_get(get = "stock.prices",
from = "2008-01-01",
to = "2010-12-31") %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "Ra")
ESGstock_returns_monthly2009
## # A tibble: 1,725 x 3
## # Groups: symbol [48]
## symbol date Ra
## <chr> <date> <dbl>
## 1 A 2008-01-31 -0.0672
## 2 A 2008-02-29 -0.0960
## 3 A 2008-03-31 -0.0255
## 4 A 2008-04-30 0.0127
## 5 A 2008-05-30 0.238
## 6 A 2008-06-30 -0.0495
## 7 A 2008-07-31 0.0146
## 8 A 2008-08-29 -0.0361
## 9 A 2008-09-30 -0.147
## 10 A 2008-10-31 -0.252
## # ... with 1,715 more rows
Monthly Returns for individual ESG stocks
ESGmonthly2009 <- ESGstock_returns_monthly2009 %>%
tq_repeat_df(n = 1)
ESGmonthly2009
## # A tibble: 1,725 x 4
## # Groups: portfolio [1]
## portfolio symbol date Ra
## <int> <chr> <date> <dbl>
## 1 1 A 2008-01-31 -0.0672
## 2 1 A 2008-02-29 -0.0960
## 3 1 A 2008-03-31 -0.0255
## 4 1 A 2008-04-30 0.0127
## 5 1 A 2008-05-30 0.238
## 6 1 A 2008-06-30 -0.0495
## 7 1 A 2008-07-31 0.0146
## 8 1 A 2008-08-29 -0.0361
## 9 1 A 2008-09-30 -0.147
## 10 1 A 2008-10-31 -0.252
## # ... with 1,715 more rows
weighting for ESG portfolio
weights <- c(.02222, .02222, 0, .02222, .02222, .02222, .02222, .02222, 0, 0,
.02222, .02222, .02222, .02222, .02222, .02222, .02222, .02222, .02222, .02222,
.02222, .02222, .02222, 0, .02222, .02222, .02222, .02222, .02222, .02222,
.02222, .02222, .02222, .02222, .02222, .02222, .02222, 0, .02222, .02222,
.02222, .02222, .02222, .02222, .02222, .02222, .02222, .02222, .02222, .02222)
ESGstocks <- c("A", "TXN", "VOYA", "TIF", "BBY", "HPQ", "CSCO", "GWW", "AVT", "ADSK", "NVDA", "PVH", "CBRE", "MAN", "ON", "BLL", "ECL", "HAS", "MSI", "AVY", "VFC", "AWK", "ORA", "CLX", "K", "CL", "UNF", "NEE", "ADBE", "VZ", "CRM", "WSM", "APD", "HBI", "ITRI", "TROW", "OSK", "KEYS", "DAL", "PRU", "VAR", "MSFT", "CTL", "KO", "FSLR", "RHI", "LRCX", "ATR", "SBUX", "CMI")
weights_table <- tibble(ESGstocks) %>%
tq_repeat_df(n = 1) %>%
bind_cols(tibble(weights)) %>%
group_by(portfolio)
weights_table
## # A tibble: 50 x 3
## # Groups: portfolio [1]
## portfolio ESGstocks weights
## <int> <chr> <dbl>
## 1 1 A 0.0222
## 2 1 TXN 0.0222
## 3 1 VOYA 0
## 4 1 TIF 0.0222
## 5 1 BBY 0.0222
## 6 1 HPQ 0.0222
## 7 1 CSCO 0.0222
## 8 1 GWW 0.0222
## 9 1 AVT 0
## 10 1 ADSK 0
## # ... with 40 more rows
ESG portfolio returns
ESGportfolio2009 <-
ESGmonthly2009 %>%
tq_portfolio(assets_col = symbol,
returns_col = Ra,
weights = weights_table,
col_rename = "Ra")
ESGportfolio2009
## # A tibble: 36 x 3
## # Groups: portfolio [1]
## portfolio date Ra
## <int> <date> <dbl>
## 1 1 2008-01-31 -0.0593
## 2 1 2008-02-29 -0.0274
## 3 1 2008-03-31 -0.00972
## 4 1 2008-04-30 0.0770
## 5 1 2008-05-30 0.0343
## 6 1 2008-06-30 -0.0894
## 7 1 2008-07-31 -0.0181
## 8 1 2008-08-29 0.0324
## 9 1 2008-09-30 -0.0967
## 10 1 2008-10-31 -0.226
## # ... with 26 more rows
S&P for baseline
baseline_returns_monthly2009 <- "^GSPC" %>%
tq_get(get = "stock.prices",
from = "2008-01-01",
to = "2010-12-31") %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "Rb")
baseline_returns_monthly2009
## # A tibble: 36 x 2
## date Rb
## <date> <dbl>
## 1 2008-01-31 -0.0474
## 2 2008-02-29 -0.0348
## 3 2008-03-31 -0.00596
## 4 2008-04-30 0.0475
## 5 2008-05-30 0.0107
## 6 2008-06-30 -0.0860
## 7 2008-07-31 -0.00986
## 8 2008-08-29 0.0122
## 9 2008-09-30 -0.0908
## 10 2008-10-31 -0.169
## # ... with 26 more rows
Merged S&P and ESG
RaRb_single_portfolio2009 <- left_join(ESGportfolio2009 ,
baseline_returns_monthly2009,
by = "date")
RaRb_single_portfolio2009
## # A tibble: 36 x 4
## # Groups: portfolio [1]
## portfolio date Ra Rb
## <int> <date> <dbl> <dbl>
## 1 1 2008-01-31 -0.0593 -0.0474
## 2 1 2008-02-29 -0.0274 -0.0348
## 3 1 2008-03-31 -0.00972 -0.00596
## 4 1 2008-04-30 0.0770 0.0475
## 5 1 2008-05-30 0.0343 0.0107
## 6 1 2008-06-30 -0.0894 -0.0860
## 7 1 2008-07-31 -0.0181 -0.00986
## 8 1 2008-08-29 0.0324 0.0122
## 9 1 2008-09-30 -0.0967 -0.0908
## 10 1 2008-10-31 -0.226 -0.169
## # ... with 26 more rows
2008-2010 ESG CAPM Table, S&P 500 Baseline
RaRb_single_portfolio2009 %>%
tq_performance(Ra = Ra, Rb = Rb, performance_fun = table.CAPM) %>%
t()
## [,1]
## portfolio 1.0000
## ActivePremium 0.0997
## Alpha 0.0099
## AnnualizedAlpha 0.1249
## Beta 1.2152
## Beta- 1.1908
## Beta+ 1.0933
## Correlation 0.9669
## Correlationp-value 0.0000
## InformationRatio 1.1698
## R-squared 0.9349
## TrackingError 0.0852
## TreynorRatio 0.0444
Dirtystock_returns_monthly2009 <- c("WMB", "DVN", "SLB", "BKR", "VLO", "PSX", "NBL", "KMI", "OKE", "HES","EMN", "ECL", "NBR", "VAL", "CF", "SEE", "NEM", "VMC", "MLM", "SWN", "MPC", "CWEN", "DUK", "COG", "XOM") %>%
tq_get(get = "stock.prices",
from = "2008-01-01",
to = "2010-12-31") %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "Rc")
Dirtystock_returns_monthly2009
## # A tibble: 756 x 3
## # Groups: symbol [21]
## symbol date Rc
## <chr> <date> <dbl>
## 1 WMB 2008-01-31 -0.106
## 2 WMB 2008-02-29 0.127
## 3 WMB 2008-03-31 -0.0811
## 4 WMB 2008-04-30 0.0764
## 5 WMB 2008-05-30 0.0715
## 6 WMB 2008-06-30 0.0634
## 7 WMB 2008-07-31 -0.205
## 8 WMB 2008-08-29 -0.0317
## 9 WMB 2008-09-30 -0.234
## 10 WMB 2008-10-31 -0.113
## # ... with 746 more rows
Monthly Returns for individual Dirty Investing
Dirtymonthly2009 <- Dirtystock_returns_monthly2009 %>%
tq_repeat_df(n = 1)
Dirtymonthly2009
## # A tibble: 756 x 4
## # Groups: portfolio [1]
## portfolio symbol date Rc
## <int> <chr> <date> <dbl>
## 1 1 WMB 2008-01-31 -0.106
## 2 1 WMB 2008-02-29 0.127
## 3 1 WMB 2008-03-31 -0.0811
## 4 1 WMB 2008-04-30 0.0764
## 5 1 WMB 2008-05-30 0.0715
## 6 1 WMB 2008-06-30 0.0634
## 7 1 WMB 2008-07-31 -0.205
## 8 1 WMB 2008-08-29 -0.0317
## 9 1 WMB 2008-09-30 -0.234
## 10 1 WMB 2008-10-31 -0.113
## # ... with 746 more rows
weighting for dirty portfolio
weights1 <- c(.047619, .047619, .047619, .047619, .047619, 0, .047619, 0, .047619, .047619,
.047619, .047619, .047619, .047619, .047619, .047619, .047619, .047619, .047619, .047619,
0, 0, .047619, .047619, .047619)
Dirtystocks <- c("WMB", "DVN", "SLB", "BKR", "VLO", "PSX", "NBL", "KMI", "OKE", "HES","EMN", "ECL", "NBR", "VAL", "CF", "SEE", "NEM", "VMC", "MLM", "SWN", "MPC", "CWEN", "DUK", "COG", "XOM")
weights_table1 <- tibble(Dirtystocks) %>%
tq_repeat_df(n = 1) %>%
bind_cols(tibble(weights1)) %>%
group_by(portfolio)
weights_table1
## # A tibble: 25 x 3
## # Groups: portfolio [1]
## portfolio Dirtystocks weights1
## <int> <chr> <dbl>
## 1 1 WMB 0.0476
## 2 1 DVN 0.0476
## 3 1 SLB 0.0476
## 4 1 BKR 0.0476
## 5 1 VLO 0.0476
## 6 1 PSX 0
## 7 1 NBL 0.0476
## 8 1 KMI 0
## 9 1 OKE 0.0476
## 10 1 HES 0.0476
## # ... with 15 more rows
Dirty portfolio returns
Dirtyportfolio2009 <-
Dirtymonthly2009 %>%
tq_portfolio(assets_col = symbol,
returns_col = Rc,
weights = weights_table1,
col_rename = "Rc")
Dirtyportfolio2009
## # A tibble: 36 x 3
## # Groups: portfolio [1]
## portfolio date Rc
## <int> <date> <dbl>
## 1 1 2008-01-31 -0.0549
## 2 1 2008-02-29 0.0475
## 3 1 2008-03-31 -0.0255
## 4 1 2008-04-30 0.107
## 5 1 2008-05-30 0.0560
## 6 1 2008-06-30 0.00951
## 7 1 2008-07-31 -0.124
## 8 1 2008-08-29 0.00759
## 9 1 2008-09-30 -0.155
## 10 1 2008-10-31 -0.210
## # ... with 26 more rows
Merged S&P and Dirty
RcRb_single_portfolio2009 <- left_join(Dirtyportfolio2009 ,
baseline_returns_monthly2009,
by = "date")
RcRb_single_portfolio2009
## # A tibble: 36 x 4
## # Groups: portfolio [1]
## portfolio date Rc Rb
## <int> <date> <dbl> <dbl>
## 1 1 2008-01-31 -0.0549 -0.0474
## 2 1 2008-02-29 0.0475 -0.0348
## 3 1 2008-03-31 -0.0255 -0.00596
## 4 1 2008-04-30 0.107 0.0475
## 5 1 2008-05-30 0.0560 0.0107
## 6 1 2008-06-30 0.00951 -0.0860
## 7 1 2008-07-31 -0.124 -0.00986
## 8 1 2008-08-29 0.00759 0.0122
## 9 1 2008-09-30 -0.155 -0.0908
## 10 1 2008-10-31 -0.210 -0.169
## # ... with 26 more rows
2008-2010 Non-ESG CAPM Table, S&P 500 Baseline
RcRb_single_portfolio2009 %>%
tq_performance(Ra = Rc, Rb = Rb, performance_fun = table.CAPM) %>%
t()
## [,1]
## portfolio 1.0000
## ActivePremium 0.0429
## Alpha 0.0048
## AnnualizedAlpha 0.0593
## Beta 1.0244
## Beta- 1.0143
## Beta+ 1.1701
## Correlation 0.8285
## Correlationp-value 0.0000
## InformationRatio 0.2805
## R-squared 0.6864
## TrackingError 0.1529
## TreynorRatio -0.0027
Merged ESG and Dirty
RaRc_single_portfolio2009 <- left_join(Dirtyportfolio2009 ,
ESGportfolio2009,
by = "date")
RaRc_single_portfolio2009
## # A tibble: 36 x 5
## # Groups: portfolio.x [1]
## portfolio.x date Rc portfolio.y Ra
## <int> <date> <dbl> <int> <dbl>
## 1 1 2008-01-31 -0.0549 1 -0.0593
## 2 1 2008-02-29 0.0475 1 -0.0274
## 3 1 2008-03-31 -0.0255 1 -0.00972
## 4 1 2008-04-30 0.107 1 0.0770
## 5 1 2008-05-30 0.0560 1 0.0343
## 6 1 2008-06-30 0.00951 1 -0.0894
## 7 1 2008-07-31 -0.124 1 -0.0181
## 8 1 2008-08-29 0.00759 1 0.0324
## 9 1 2008-09-30 -0.155 1 -0.0967
## 10 1 2008-10-31 -0.210 1 -0.226
## # ... with 26 more rows
To find Correlation between ESG and Dirty 2008-2010
RaRc_single_portfolio2009 %>%
tq_performance(Ra = Ra, Rb = Rc, performance_fun = table.CAPM) %>%
t()
## [,1]
## portfolio.x 1.0000
## ActivePremium 0.0568
## Alpha 0.0052
## AnnualizedAlpha 0.0644
## Beta 0.8192
## Beta- 0.7876
## Beta+ 0.8565
## Correlation 0.8060
## Correlationp-value 0.0000
## InformationRatio 0.3312
## R-squared 0.6496
## TrackingError 0.1714
## TreynorRatio 0.0659
ggplot(ESGportfolio2009,
aes(x = Ra, fill = "Return Density")) +
geom_density(alpha = 0.4) +
labs(title = "ESG Returns 2008-2010",x = "Percentage Return", y = "Return Occurences (Monthly)")
ggplot(ESGportfolio2009,
aes(x = date,
y = Ra)) +
geom_line() +
labs(title = "ESG Portfolio Returns 2008-2010",x = "Date", y = "Percentage Return")
ggplot(Dirtyportfolio2009,
aes(x = Rc, fill = "Return Density")) +
geom_density(alpha = 0.4) +
labs(title = "Non-ESG Portfolio Returns 2008-2010",x = "Percentage Return", y = "Return Occurences (Monthly)")
ggplot(Dirtyportfolio2009,
aes(x = date,
y = Rc)) +
geom_line() +
labs(title = "Non-ESG Portfolio Returns 2008-2010",x = "Date", y = "Percentage Return")
###2017-2019
ESG stock returns
ESGstock_returns_monthly2017 <- c("A", "TXN", "VOYA", "TIF", "BBY", "HPQ", "CSCO", "GWW", "AVT", "ADSK", "NVDA", "PVH", "CBRE", "MAN", "ON", "BLL", "ECL", "HAS", "MSI", "AVY", "VFC", "AWK", "ORA", "CLX", "K", "CL", "UNF", "NEE", "ADBE", "VZ", "CRM", "WSM", "APD", "HBI", "ITRI", "TROW", "OSK", "KEYS", "DAL", "PRU", "VAR", "MSFT", "CTL", "KO", "FSLR", "RHI", "LRCX", "ATR", "SBUX", "CMI") %>%
tq_get(get = "stock.prices",
from = "2017-01-01",
to = "2019-12-31") %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "Ra")
ESGstock_returns_monthly2017
## # A tibble: 1,800 x 3
## # Groups: symbol [50]
## symbol date Ra
## <chr> <date> <dbl>
## 1 A 2017-01-31 0.0533
## 2 A 2017-02-28 0.0476
## 3 A 2017-03-31 0.0332
## 4 A 2017-04-28 0.0412
## 5 A 2017-05-31 0.0961
## 6 A 2017-06-30 -0.0149
## 7 A 2017-07-31 0.00809
## 8 A 2017-08-31 0.0825
## 9 A 2017-09-29 -0.00803
## 10 A 2017-10-31 0.0618
## # ... with 1,790 more rows
Monthly Returns for individual ESG stocks
ESGmonthly2017 <- ESGstock_returns_monthly2017 %>%
tq_repeat_df(n = 1)
ESGmonthly2017
## # A tibble: 1,800 x 4
## # Groups: portfolio [1]
## portfolio symbol date Ra
## <int> <chr> <date> <dbl>
## 1 1 A 2017-01-31 0.0533
## 2 1 A 2017-02-28 0.0476
## 3 1 A 2017-03-31 0.0332
## 4 1 A 2017-04-28 0.0412
## 5 1 A 2017-05-31 0.0961
## 6 1 A 2017-06-30 -0.0149
## 7 1 A 2017-07-31 0.00809
## 8 1 A 2017-08-31 0.0825
## 9 1 A 2017-09-29 -0.00803
## 10 1 A 2017-10-31 0.0618
## # ... with 1,790 more rows
weighting for ESG portfolio
weights <- c(.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02,.02)
ESGstocks <- c("A", "TXN", "VOYA", "TIF", "BBY", "HPQ", "CSCO", "GWW", "AVT", "ADSK", "NVDA", "PVH", "CBRE", "MAN", "ON", "BLL", "ECL", "HAS", "MSI", "AVY", "VFC", "AWK", "ORA", "CLX", "K", "CL", "UNF", "NEE", "ADBE", "VZ", "CRM", "WSM", "APD", "HBI", "ITRI", "TROW", "OSK", "KEYS", "DAL", "PRU", "VAR", "MSFT", "CTL", "KO", "FSLR", "RHI", "LRCX", "ATR", "SBUX", "CMI")
weights_table <- tibble(ESGstocks) %>%
tq_repeat_df(n = 1) %>%
bind_cols(tibble(weights)) %>%
group_by(portfolio)
weights_table
## # A tibble: 50 x 3
## # Groups: portfolio [1]
## portfolio ESGstocks weights
## <int> <chr> <dbl>
## 1 1 A 0.02
## 2 1 TXN 0.02
## 3 1 VOYA 0.02
## 4 1 TIF 0.02
## 5 1 BBY 0.02
## 6 1 HPQ 0.02
## 7 1 CSCO 0.02
## 8 1 GWW 0.02
## 9 1 AVT 0.02
## 10 1 ADSK 0.02
## # ... with 40 more rows
ESG portfolio returns
ESGportfolio2017 <-
ESGmonthly2017 %>%
tq_portfolio(assets_col = symbol,
returns_col = Ra,
weights = weights_table,
col_rename = "Ra")
ESGportfolio2017
## # A tibble: 36 x 3
## # Groups: portfolio [1]
## portfolio date Ra
## <int> <date> <dbl>
## 1 1 2017-01-31 0.0104
## 2 1 2017-02-28 0.0403
## 3 1 2017-03-31 0.0132
## 4 1 2017-04-28 0.00948
## 5 1 2017-05-31 0.0359
## 6 1 2017-06-30 0.00779
## 7 1 2017-07-31 0.0268
## 8 1 2017-08-31 0.00712
## 9 1 2017-09-29 0.0250
## 10 1 2017-10-31 0.0551
## # ... with 26 more rows
S&P for baseline
baseline_returns_monthly2017 <- "^GSPC" %>%
tq_get(get = "stock.prices",
from = "2017-01-01",
to = "2019-12-31") %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "Rb")
baseline_returns_monthly2017
## # A tibble: 36 x 2
## date Rb
## <date> <dbl>
## 1 2017-01-31 0.00932
## 2 2017-02-28 0.0372
## 3 2017-03-31 -0.000389
## 4 2017-04-28 0.00909
## 5 2017-05-31 0.0116
## 6 2017-06-30 0.00481
## 7 2017-07-31 0.0193
## 8 2017-08-31 0.000546
## 9 2017-09-29 0.0193
## 10 2017-10-31 0.0222
## # ... with 26 more rows
Merged S&P and ESG
RaRb_single_portfolio2017 <- left_join(ESGportfolio2017 ,
baseline_returns_monthly2017,
by = "date")
RaRb_single_portfolio2017
## # A tibble: 36 x 4
## # Groups: portfolio [1]
## portfolio date Ra Rb
## <int> <date> <dbl> <dbl>
## 1 1 2017-01-31 0.0104 0.00932
## 2 1 2017-02-28 0.0403 0.0372
## 3 1 2017-03-31 0.0132 -0.000389
## 4 1 2017-04-28 0.00948 0.00909
## 5 1 2017-05-31 0.0359 0.0116
## 6 1 2017-06-30 0.00779 0.00481
## 7 1 2017-07-31 0.0268 0.0193
## 8 1 2017-08-31 0.00712 0.000546
## 9 1 2017-09-29 0.0250 0.0193
## 10 1 2017-10-31 0.0551 0.0222
## # ... with 26 more rows
2017-2019 ESG CAPM Table, S&P 500 Baseline
RaRb_single_portfolio2017 %>%
tq_performance(Ra = Ra, Rb = Rb, performance_fun = table.CAPM) %>%
t()
## [,1]
## portfolio 1.0000
## ActivePremium 0.0680
## Alpha 0.0035
## AnnualizedAlpha 0.0427
## Beta 1.1650
## Beta- 1.3241
## Beta+ 1.2751
## Correlation 0.9628
## Correlationp-value 0.0000
## InformationRatio 1.5360
## R-squared 0.9269
## TrackingError 0.0443
## TreynorRatio 0.1663
Dirtystock_returns_monthly2017 <- c("WMB", "DVN", "SLB", "BKR", "VLO", "PSX", "NBL", "KMI", "OKE", "HES","EMN", "ECL", "NBR", "VAL", "CF", "SEE", "NEM", "VMC", "MLM", "SWN", "MPC", "CWEN", "DUK", "COG", "XOM") %>%
tq_get(get = "stock.prices",
from = "2017-01-01",
to = "2019-12-31") %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "Rc")
Dirtystock_returns_monthly2017
## # A tibble: 900 x 3
## # Groups: symbol [25]
## symbol date Rc
## <chr> <date> <dbl>
## 1 WMB 2017-01-31 -0.0833
## 2 WMB 2017-02-28 -0.0173
## 3 WMB 2017-03-31 0.0549
## 4 WMB 2017-04-28 0.0351
## 5 WMB 2017-05-31 -0.0663
## 6 WMB 2017-06-30 0.0697
## 7 WMB 2017-07-31 0.0495
## 8 WMB 2017-08-31 -0.0645
## 9 WMB 2017-09-29 0.0196
## 10 WMB 2017-10-31 -0.0503
## # ... with 890 more rows
Monthly Returns for individual Dirty Investing
Dirtymonthly2017 <- Dirtystock_returns_monthly2017 %>%
tq_repeat_df(n = 1)
Dirtymonthly2017
## # A tibble: 900 x 4
## # Groups: portfolio [1]
## portfolio symbol date Rc
## <int> <chr> <date> <dbl>
## 1 1 WMB 2017-01-31 -0.0833
## 2 1 WMB 2017-02-28 -0.0173
## 3 1 WMB 2017-03-31 0.0549
## 4 1 WMB 2017-04-28 0.0351
## 5 1 WMB 2017-05-31 -0.0663
## 6 1 WMB 2017-06-30 0.0697
## 7 1 WMB 2017-07-31 0.0495
## 8 1 WMB 2017-08-31 -0.0645
## 9 1 WMB 2017-09-29 0.0196
## 10 1 WMB 2017-10-31 -0.0503
## # ... with 890 more rows
weighting for dirty portfolio
weights1 <- c(.04,.04,.04,.04,.04,.04,.04,.04,.04,.04,.04,.04,.04,.04,.04,.04,.04,.04,.04,.04,.04,.04,.04,.04,.04)
Dirtystocks <- c("WMB", "DVN", "SLB", "BKR", "VLO", "PSX", "NBL", "KMI", "OKE", "HES","EMN", "ECL", "NBR", "VAL", "CF", "SEE", "NEM", "VMC", "MLM", "SWN", "MPC", "CWEN", "DUK", "COG", "XOM")
weights_table1 <- tibble(Dirtystocks) %>%
tq_repeat_df(n = 1) %>%
bind_cols(tibble(weights1)) %>%
group_by(portfolio)
weights_table1
## # A tibble: 25 x 3
## # Groups: portfolio [1]
## portfolio Dirtystocks weights1
## <int> <chr> <dbl>
## 1 1 WMB 0.04
## 2 1 DVN 0.04
## 3 1 SLB 0.04
## 4 1 BKR 0.04
## 5 1 VLO 0.04
## 6 1 PSX 0.04
## 7 1 NBL 0.04
## 8 1 KMI 0.04
## 9 1 OKE 0.04
## 10 1 HES 0.04
## # ... with 15 more rows
Dirty portfolio returns
Dirtyportfolio2017 <-
Dirtymonthly2017 %>%
tq_portfolio(assets_col = symbol,
returns_col = Rc,
weights = weights_table1,
col_rename = "Rc")
Dirtyportfolio2017
## # A tibble: 36 x 3
## # Groups: portfolio [1]
## portfolio date Rc
## <int> <date> <dbl>
## 1 1 2017-01-31 -0.0113
## 2 1 2017-02-28 -0.0327
## 3 1 2017-03-31 -0.00751
## 4 1 2017-04-28 -0.0255
## 5 1 2017-05-31 -0.0366
## 6 1 2017-06-30 0.00816
## 7 1 2017-07-31 0.0223
## 8 1 2017-08-31 -0.0305
## 9 1 2017-09-29 0.0640
## 10 1 2017-10-31 -0.0118
## # ... with 26 more rows
Merged S&P and Dirty
RcRb_single_portfolio2017 <- left_join(Dirtyportfolio2017,
baseline_returns_monthly2017,
by = "date")
RcRb_single_portfolio2017
## # A tibble: 36 x 4
## # Groups: portfolio [1]
## portfolio date Rc Rb
## <int> <date> <dbl> <dbl>
## 1 1 2017-01-31 -0.0113 0.00932
## 2 1 2017-02-28 -0.0327 0.0372
## 3 1 2017-03-31 -0.00751 -0.000389
## 4 1 2017-04-28 -0.0255 0.00909
## 5 1 2017-05-31 -0.0366 0.0116
## 6 1 2017-06-30 0.00816 0.00481
## 7 1 2017-07-31 0.0223 0.0193
## 8 1 2017-08-31 -0.0305 0.000546
## 9 1 2017-09-29 0.0640 0.0193
## 10 1 2017-10-31 -0.0118 0.0222
## # ... with 26 more rows
2017-2019 Non-ESG CAPM Table, S&P 500 Baseline
RcRb_single_portfolio2017 %>%
tq_performance(Ra = Rc, Rb = Rb, performance_fun = table.CAPM) %>%
t()
## [,1]
## portfolio 1.0000
## ActivePremium -0.1222
## Alpha -0.0100
## AnnualizedAlpha -0.1137
## Beta 1.0925
## Beta- 1.2132
## Beta+ 1.0397
## Correlation 0.7732
## Correlationp-value 0.0000
## InformationRatio -1.1229
## R-squared 0.5978
## TrackingError 0.1088
## TreynorRatio 0.0032
Merged ESG and Dirty
RaRc_single_portfolio2017 <- left_join(Dirtyportfolio2017 ,
ESGportfolio2017,
by = "date")
RaRc_single_portfolio2017
## # A tibble: 36 x 5
## # Groups: portfolio.x [1]
## portfolio.x date Rc portfolio.y Ra
## <int> <date> <dbl> <int> <dbl>
## 1 1 2017-01-31 -0.0113 1 0.0104
## 2 1 2017-02-28 -0.0327 1 0.0403
## 3 1 2017-03-31 -0.00751 1 0.0132
## 4 1 2017-04-28 -0.0255 1 0.00948
## 5 1 2017-05-31 -0.0366 1 0.0359
## 6 1 2017-06-30 0.00816 1 0.00779
## 7 1 2017-07-31 0.0223 1 0.0268
## 8 1 2017-08-31 -0.0305 1 0.00712
## 9 1 2017-09-29 0.0640 1 0.0250
## 10 1 2017-10-31 -0.0118 1 0.0551
## # ... with 26 more rows
To find Correlation between ESG and Dirty 2017-2019
RaRc_single_portfolio2017 %>%
tq_performance(Ra = Ra, Rb = Rc, performance_fun = table.CAPM) %>%
t()
## [,1]
## portfolio.x 1.0000
## ActivePremium 0.1902
## Alpha 0.0148
## AnnualizedAlpha 0.1927
## Beta 0.6408
## Beta- 1.0293
## Beta+ 0.5486
## Correlation 0.7482
## Correlationp-value 0.0000
## InformationRatio 1.6574
## R-squared 0.5598
## TrackingError 0.1148
## TreynorRatio 0.3024
ggplot(ESGportfolio2017,
aes(x = Ra, fill = "Return Density")) +
geom_density(alpha = 0.4) +
labs(title = "ESG Returns 2017-2019",x = "Percentage Return", y = "Return Occurences (Monthly)")
ggplot(ESGportfolio2017,
aes(x = date,
y = Ra)) +
geom_line() +
labs(title = "ESG Portfolio Returns 2017-2019",x = "Date", y = "Percentage Return")
ggplot(Dirtyportfolio2017,
aes(x = Rc, fill = "Return Density")) +
geom_density(alpha = 0.4) +
labs(title = "Non-ESG Portfolio Returns 2017-2019",x = "Percentage Return", y = "Return Occurences (Monthly)")
ggplot(Dirtyportfolio2017,
aes(x = date,
y = Rc)) +
geom_line() +
labs(title = "Non-ESG Portfolio Returns 2017-2019",x = "Date", y = "Percentage Return")