library(fit.models)
library(robust)
library(readr)
FamaFrench_mon_69_98_3stocks <- read.csv("FamaFrench_mon_69_98_3stocks.csv")
retdata <- read.csv("famaFrench_mon_69_98_3stocks.csv")
attach(retdata)
fit = lm(formula = cbind(ge, ibm, mobil) ~ Mkt.RF + SMB + HML)
coef(fit)
##                       ge        ibm      mobil
## (Intercept)  0.894224681  0.6960039  0.7134499
## Mkt.RF       1.134331448  0.8050676  0.9803403
## SMB         -0.369412445 -0.3099907 -0.3727822
## HML          0.009630701 -0.2981744  0.3726475
covRob(data = fit$residuals, corr = T)
## Call:
## covRob(data = fit$residuals, corr = T)
## 
## Robust Estimate of Correlation: 
##             ge      ibm    mobil
## ge     1.00000  0.04436 -0.24996
## ibm    0.04436  1.00000 -0.07258
## mobil -0.24996 -0.07258  1.00000
## 
## Robust Estimate of Location: 
##       ge      ibm    mobil 
## -0.26939  0.03288 -0.12610
sigF = as.matrix(var(cbind(Mkt.RF, SMB, HML)))
sigF
##           Mkt.RF       SMB       HML
## Mkt.RF 21.150745  4.232563 -5.104485
## SMB     4.232563  8.181134 -1.076021
## HML    -5.104485 -1.076021  7.179737
bbeta = as.matrix(fit$coefficients)
bbeta = t(bbeta[-1, ])
bbeta
##          Mkt.RF        SMB          HML
## ge    1.1343314 -0.3694124  0.009630701
## ibm   0.8050676 -0.3099907 -0.298174424
## mobil 0.9803403 -0.3727822  0.372647515
n = dim(CRSP)
sigeps = (n-1)/(n-4)*var(as.matrix(fit$residuals))
sigeps = diag(diag(as.matrix(sigeps)))
cov_equities = as.vector(bbeta %*% sigF %*% t(bbeta)) + sigeps
cov(cbind(ge, ibm, mobil))
##             ge      ibm    mobil
## ge    40.65659 20.61864 14.01833
## ibm   20.61864 46.21756 11.26794
## mobil 14.01833 11.26794 43.13012