-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathFamaFrench Visual.R
70 lines (60 loc) · 2.31 KB
/
FamaFrench Visual.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
install.packages("pacman")
pacman::p_load(frenchdata,purrr,tidyr,dplyr,tidyquant,broom,gtools,kableExtra)
ETFs = c("IVV", "VTI", "VOO", "QQQ", "VEA", "IEFA", "AGG", "VWO",
"EFA","IEMG","VTV", "IJH", "IWF","BND", "IJR", "IWM", "VUG",
"GLD", "IWD", "VIG", "VNQ", "USMV", "LQD", "VO", "VYM", "EEM",
"VB", "VCSH", "XLF", "VCIT", "VEU", "XLK", "ITOT", "IVW", "BNDX",
"VGT", "DIA", "BSV", "SHV", "IWB", "IWR", "TIP", "SCHF", "MBB", "SDY",
"MDY", "SCHX", "IEF", "HYG", "DVY", "XLV", "SHY", "IXUS", "TLT", "IVE",
"PFF", "IAU", "VXUS", "RSP", "SCHB", "VV", "GOVT", "EMB", "MUB", "QUAL",
"XLY", "VBR", "EWJ", "XLP", "VGK", "SPLV", "MINT", "BIV", "IGSB", "EFAV",
"VT", "GDX", "XLU", "IWS", "XLI", "SCHD", "IWP", "ACWI", "VMBS", "XLE", "JNK",
"VOE", "FLOT", "IWV", "JPST", "SCZ", "IEI", "IWN", "DGRO", "VBK", "IGIB", "IWO")
start = "2012-01-01" ; end = "2019-01-01"
frenchdata::get_french_data_list()$files_list %>% head
ff3_data = frenchdata::download_french_data("Fama/French 3 Factors")$subsets$data[[1]] %>%
mutate(date = rollback(ymd(parse_date_time(date, "%Y%m") + months(1)))) %>%
mutate_if(is.numeric, function(x) (x/100)) %>%
rename(ExR = `Mkt-RF`) %>%
filter(date >= start & date <= end)
data = tq_get(
ETFs,
from = start,
to = end
) %>%
group_by(symbol) %>%
tq_transmute(
select = adjusted,
mutate_fun = to.monthly,
indexAt = "lastof"
) %>%
tq_transmute(
select = adjusted,
mutate_fun = periodReturn,
type = "log"
) %>%
pivot_wider(
names_from = symbol,
values_from = monthly.returns
) %>%
slice(-1) %>%
right_join(ff3_data,., by="date")
factor_value = tibble(
ETFs = ETFs,
model = map(ETFs, ~ lm(get(.x) ~ ExR + SMB + HML + RF, data = data) %>%
tidy %>%
mutate(pvalue = stars.pval(p.value)))
) %>%
unnest(model) %>%
mutate(value = paste0(round(estimate, digits=3), " ", pvalue)) %>%
select(ETFs,term,value) %>%
pivot_wider(
names_from = term,
values_from = value
)
factor_value$ETFs = cell_spec(factor_value$ETFs, bold = T)
factor_value %>%
kable("html", escape = F) %>%
kable_styling() %>%
add_footnote(c(paste0("Date from: ",data$date[1]," to: ",data$date[nrow(data)]),
"P-value : *** if <0.001, ** if < 0.01, * if < 0.05"))