retdata = read.csv('m-fac9003.csv')
t = dim(retdata)[1]
market = retdata[,14]
riskfree = retdata[,14]
retdata1 = retdata[,c(-14, -15)]
retdata1 = as.matrix(retdata1)
n = dim(retdata1)[2]
ones = rep(1,t)
X = cbind(ones,market)
b_hat = solve(t(X)%*%X)%*%t(X)%*%retdata1
E_hat = retdata1 - X%*%b_hat
diagD_hat = diag(t(E_hat)%*%E_hat)/(t-2)

#r_square

retvar = apply(retdata1,2,var) 
R_2 = 1 - diag(t(E_hat)%*%E_hat)/((t-1)*retvar)
res_std = sqrt(diagD_hat)
cov_factor = var(market)*t(b_hat)%*%b_hat + diag(diagD_hat); 
sd = sqrt(diag(cov_factor));
cor_factor = cov_factor/(sd%*%t(sd));
# sample variance and correlation matrix
cov_sample = cov(retdata1);
cor_sample = cor(retdata1);
# use factor covariance matrix to compute global minimum variance portfolio
one.vec = rep(1,13)
a = solve(cov_factor)%*%one.vec
b = t(one.vec)%*%a
mvp.w =a / as.numeric(b)
mvp.w
##            [,1]
## AA   0.03501615
## AGE -0.03373670
## CAT  0.05314427
## F    0.05576422
## FDX  0.06451069
## GM   0.12369835
## HPQ -0.03290554
## KMB  0.28022778
## MEL  0.01901912
## NYT  0.19373120
## PG   0.19019732
## TRB  0.14314200
## TXN -0.09180887