library(tidyverse)
## ── Attaching packages ─────────────────────────────────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.2.1     ✓ purrr   0.3.3
## ✓ tibble  2.1.3     ✓ dplyr   0.8.3
## ✓ tidyr   1.0.0     ✓ stringr 1.4.0
## ✓ readr   1.3.1     ✓ forcats 0.4.0
## ── Conflicts ────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
retdata = read_csv('FamaFrench_mon_69_98_3stocks.csv')
## Parsed with column specification:
## cols(
##   date = col_double(),
##   `Mkt-RF` = col_double(),
##   SMB = col_double(),
##   HML = col_double(),
##   RF = col_double(),
##   ge = col_double(),
##   ibm = col_double(),
##   mobil = col_double(),
##   CRSP = col_double()
## )
glimpse(retdata)
## Observations: 360
## Variables: 9
## $ date     <dbl> 196901, 196902, 196903, 196904, 196905, 196906, 196907, 1969…
## $ `Mkt-RF` <dbl> -1.20, -5.82, 2.59, 1.52, 0.02, -7.25, -7.05, 4.65, -2.88, 4…
## $ SMB      <dbl> -0.80, -3.90, -0.28, -0.85, -0.27, -5.31, -3.27, 0.89, 1.20,…
## $ HML      <dbl> 1.57, 0.93, -0.45, 0.06, 0.74, -1.15, 1.36, -3.83, -3.24, -3…
## $ RF       <dbl> 0.53, 0.46, 0.46, 0.53, 0.48, 0.51, 0.53, 0.50, 0.62, 0.60, …
## $ ge       <dbl> -1.1984, -6.0377, 6.6474, 5.9621, -3.5806, -3.8196, -4.3056,…
## $ ibm      <dbl> -5.9524, -0.7004, 7.0303, 4.4586, -2.5000, 5.8777, -3.9230, …
## $ mobil    <dbl> -1.4043, -7.8431, 21.5130, 2.9961, 2.6667, -12.9870, -6.0981…
## $ CRSP     <dbl> -0.6714, -5.3641, 3.0505, 2.0528, 0.5038, -6.7388, -6.5173, …
colnames(retdata)[2]<- 'Mkt_RF' 

Using FF 3 factor model to compute covariance matrix

stock.rets<-retdata %>% select(c(2,3,4,6,7,8))/100
N <- dim(stock.rets)[1]
fit3 = lm(formula = cbind(ge, ibm, mobil)~Mkt_RF + SMB + HML, data=stock.rets)
sigF3 = as.matrix(var(cbind(stock.rets$Mkt_RF, 
                            stock.rets$SMB, 
                            stock.rets$HML)))
bbeta3 = as.matrix(fit3$coefficients)
bbeta3 = bbeta3[-1,]

bbeta3
##                  ge        ibm      mobil
## Mkt_RF  1.134331448  0.8050676  0.9803403
## SMB    -0.369412445 -0.3099907 -0.3727822
## HML     0.009630701 -0.2981744  0.3726475
sigeps3 = crossprod(fit3$residuals)/(N-4)
sigeps3 = diag(diag(sigeps3))
cov_3f = t(bbeta3) * sigF3 * (bbeta3) + sigeps3
cov_3f
##              Mkt_RF           SMB           HML
## ge     4.332517e-03 -1.258773e-04 -4.819330e-06
## ibm   -1.258773e-04  3.199233e-03 -1.196042e-05
## mobil -4.819330e-06 -1.196042e-05  2.841930e-03