knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "VIGNETTE-"
)
library(FFdownload)
library(dplyr)
library(ggplot2)
library(tidyr)
outd <- paste0(tempdir(),"/",format(Sys.time(), "%F_%H-%M"))
outfile <- paste0(outd,"FFData_xts.RData")
library(FFdownload)
library(tidyverse)
outd <- paste0("data/",format(Sys.time(), "%F_%H-%M"))
outfile <- paste0(outd,"FFData_xts.RData")

For a detailed how-to on checking the available data sets, as well as downloading and processing the data in separate steps, please check the vignette("FFD-how-to-xts"). In the following we download and process the selected files all in one step. Note, that here we purposefully set the "format" to tibble.

inputlist <- c("F-F_Research_Data_Factors_CSV","F-F_Momentum_Factor_CSV")
FFdownload(exclude_daily=TRUE, tempd=outd, download=TRUE, download_only=FALSE, inputlist=inputlist, output_file = outfile, format = "tibble")

Now, we load the file and check the structure of the created list (after loading into the current workspace).

load(outfile)
ls.str(FFdata)

To make sure, we have actually created a list of tibbles, we check:

str(FFdata$`x_F-F_Research_Data_Factors`$monthly$Temp2)

In a next step we merge the two data sets. I believe there is an efficient way to join the data automatically, if you know it please email me!

FFfour <- FFdata$`x_F-F_Research_Data_Factors`$monthly$Temp2 %>% 
  left_join(FFdata$`x_F-F_Momentum_Factor`$monthly$Temp2 ,by="date") 
FFfour %>% head()
  1. Finally we plot wealth indices for 6 of these factors. For this, we first pivot_longer() to create a tidy data.frame, before we filter() the data to start in 1960 and delete the risk-free rate. Next we calculate a wealth index and plot using ggplot(). Be aware, that the y-axis is set to a log-scale using scale_y_log10().
FFfour %>% 
  pivot_longer(Mkt.RF:Mom,names_to="FFVar",values_to="FFret") %>% 
  mutate(FFret=FFret/100,date=as.Date(date)) %>% # divide returns by 100
  filter(date>="1960-01-01",!FFVar=="RF") %>% group_by(FFVar) %>% 
  arrange(FFVar,date) %>%
  mutate(FFret=ifelse(date=="1960-01-01",1,FFret),FFretv=cumprod(1+FFret)-1) %>% 
  ggplot(aes(x=date,y=FFretv,col=FFVar,type=FFVar)) + geom_line(lwd=1.2) + scale_y_log10() +
  labs(title="FF5 Factors plus Momentum", subtitle="Cumulative wealth plots",ylab="cum. returns") + 
  scale_colour_viridis_d("FFvar") +
  theme_bw() + theme(legend.position="bottom")


Diffform/ffdownload documentation built on Oct. 18, 2023, 11:11 a.m.