7.9 FF model efficacy
On one hand it is good to know that Trump’s attacks are not hurting shareholder value. On the other hand, we might be wrong to conclude this because our analysis totally relies on the efficacy of the FF model as a solid benchmark. Given the large prediction intervals above, I am not sure the model has done a good job of capturing the real risk measures! They look very noisy to me.
We can quickly check the R2 of the regression models to figure out how well FF model described the stock prices over a year.
price_merge %>%
filter(-260 <= event_diff & event_diff < -10 ) %>%
split(.$ticker) %>%
map(~ lm(ret ~ MktRF + SMB + HML + RMW + CMA, data = .)) %>%
map(summary) %>%
map_dbl("r.squared")
## AMZN BA CBS CCZ DAL GM
## 0.43557083 0.49741467 0.28645931 0.01666242 0.36784969 0.41454235
## JWN LMT MKGAF NYT TM
## 0.29005370 0.19749228 0.01666749 0.52996719 0.41700821
Looks like the R2 range from just 1.67% (CCZ and MKGAF) to 53% (NYSE). So, at least in some cases our benchmark model was not very good. Perhaps we can improve the model by using nonlinear transformations of the variables. You could also try other machine learning models such as random Forest and Support Vector Machine. However, a major issue while doing cross-validation for these models on the training data is that you will lose the time-series aspect. Although we are not using the time-series property of data in the linear model either, we are strictly forecasting in future. With cross-validation, the model can be predicting past values based on the future values! So even when the model may perform well in sample, it might be meaningless for predicting future values.