Loading data

library(readr)
library(quantmod)
library(dplyr)
library(PerformanceAnalytics)
library(IntroCompFinR)
data <- read.csv("C:/Users/admin/Documents/m-fac9003.csv")
data = data/100
head(data)
##        AA     AGE     CAT       F     FDX      GM     HPQ     KMB     MEL
## 1 -0.1640 -0.1217 -0.0444 -0.0006 -0.0228 -0.0212 -0.0619 -0.1101 -0.1077
## 2  0.0404  0.0495  0.0884  0.0602  0.1047  0.0897 -0.0401 -0.0520  0.0034
## 3  0.0012  0.1308  0.0017  0.0206  0.1084  0.0157  0.0567  0.0321 -0.0017
## 4 -0.0428 -0.1106  0.0025 -0.0567 -0.0244 -0.0419 -0.0529 -0.0065 -0.0220
## 5  0.0581  0.1970  0.0852  0.0389 -0.1617  0.1094  0.0881  0.0883  0.1185
## 6 -0.0405 -0.0144 -0.2210 -0.0579 -0.0281 -0.0270 -0.0147  0.0155 -0.0776
##       NYT      PG     TRB     TXN   SP500
## 1 -0.0630 -0.0889 -0.1304 -0.0761 -0.0752
## 2 -0.0462 -0.0084 -0.0037  0.0497  0.0021
## 3 -0.0066  0.0541  0.0236  0.0269  0.0177
## 4 -0.1060  0.0426 -0.0798 -0.0685 -0.0334
## 5  0.1159  0.1635  0.0882  0.2288  0.0855
## 6 -0.0012  0.0480 -0.0064 -0.0587 -0.0153

Computing covariance matrix

Using single model to generate covariance matrix:

stock <- as.matrix(data[, 1:13])
market <- as.matrix(data[, 14])
TT <- dim(stock)[1]

fit <- lm(formula = stock ~ market)
fit
## 
## Call:
## lm(formula = stock ~ market)
## 
## Coefficients:
##              AA        AGE       CAT       F         FDX       GM      
## (Intercept)  0.005491  0.007218  0.008394  0.004544  0.007996  0.001982
## market       1.291591  1.514136  0.940693  1.219245  0.805117  1.045702
##              HPQ       KMB       MEL       NYT       PG        TRB     
## (Intercept)  0.006836  0.005463  0.008849  0.004904  0.008881  0.006512
## market       1.627951  0.549805  1.122871  0.770649  0.468803  0.717881
##              TXN     
## (Intercept)  0.014389
## market       1.796412
sigF = as.numeric(var(market))
bbeta = as.matrix(fit$coefficients)
bbeta = as.matrix(bbeta[-1,])
bbeta
##          [,1]
## AA  1.2915911
## AGE 1.5141359
## CAT 0.9406928
## F   1.2192453
## FDX 0.8051166
## GM  1.0457019
## HPQ 1.6279512
## KMB 0.5498052
## MEL 1.1228708
## NYT 0.7706495
## PG  0.4688034
## TRB 0.7178808
## TXN 1.7964117
sigeps = crossprod(fit$residuals)/(TT-2)
sigeps = diag(diag(sigeps))
sigeps
##              [,1]        [,2]        [,3]        [,4]        [,5]        [,6]
##  [1,] 0.005919846 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
##  [2,] 0.000000000 0.006095651 0.000000000 0.000000000 0.000000000 0.000000000
##  [3,] 0.000000000 0.000000000 0.005966741 0.000000000 0.000000000 0.000000000
##  [4,] 0.000000000 0.000000000 0.000000000 0.006791031 0.000000000 0.000000000
##  [5,] 0.000000000 0.000000000 0.000000000 0.000000000 0.007839072 0.000000000
##  [6,] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.006609876
##  [7,] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
##  [8,] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
##  [9,] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
## [10,] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
## [11,] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
## [12,] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
## [13,] 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
##              [,7]       [,8]        [,9]      [,10]       [,11]       [,12]
##  [1,] 0.000000000 0.00000000 0.000000000 0.00000000 0.000000000 0.000000000
##  [2,] 0.000000000 0.00000000 0.000000000 0.00000000 0.000000000 0.000000000
##  [3,] 0.000000000 0.00000000 0.000000000 0.00000000 0.000000000 0.000000000
##  [4,] 0.000000000 0.00000000 0.000000000 0.00000000 0.000000000 0.000000000
##  [5,] 0.000000000 0.00000000 0.000000000 0.00000000 0.000000000 0.000000000
##  [6,] 0.000000000 0.00000000 0.000000000 0.00000000 0.000000000 0.000000000
##  [7,] 0.008966712 0.00000000 0.000000000 0.00000000 0.000000000 0.000000000
##  [8,] 0.000000000 0.00368461 0.000000000 0.00000000 0.000000000 0.000000000
##  [9,] 0.000000000 0.00000000 0.003745483 0.00000000 0.000000000 0.000000000
## [10,] 0.000000000 0.00000000 0.000000000 0.00434329 0.000000000 0.000000000
## [11,] 0.000000000 0.00000000 0.000000000 0.00000000 0.004171711 0.000000000
## [12,] 0.000000000 0.00000000 0.000000000 0.00000000 0.000000000 0.005205835
## [13,] 0.000000000 0.00000000 0.000000000 0.00000000 0.000000000 0.000000000
##            [,13]
##  [1,] 0.00000000
##  [2,] 0.00000000
##  [3,] 0.00000000
##  [4,] 0.00000000
##  [5,] 0.00000000
##  [6,] 0.00000000
##  [7,] 0.00000000
##  [8,] 0.00000000
##  [9,] 0.00000000
## [10,] 0.00000000
## [11,] 0.00000000
## [12,] 0.00000000
## [13,] 0.01316524
# Covariance matrix by single factor model 
cov = sigF*bbeta%*%t(bbeta)+sigeps
cov
##              AA         AGE          CAT           F          FDX          GM
## AA  0.009046736 0.003665662 0.0022773795 0.002951744 0.0019491551 0.002531602
## AGE 0.003665662 0.010392918 0.0026697784 0.003460338 0.0022850000 0.002967804
## CAT 0.002277380 0.002669778 0.0076254044 0.002149817 0.0014196104 0.001843819
## F   0.002951744 0.003460338 0.0021498168 0.009577439 0.0018399772 0.002389800
## FDX 0.001949155 0.002285000 0.0014196104 0.001839977 0.0090540833 0.001578081
## GM  0.002531602 0.002967804 0.0018438188 0.002389800 0.0015780808 0.008659520
## HPQ 0.003941205 0.004620285 0.0028704615 0.003720446 0.0024567600 0.003190890
## KMB 0.001331056 0.001560401 0.0009694362 0.001256500 0.0008297174 0.001077654
## MEL 0.002718425 0.003186817 0.0019798858 0.002566158 0.0016945373 0.002200899
## NYT 0.001865711 0.002187179 0.0013588366 0.001761207 0.0011629960 0.001510523
## PG  0.001134954 0.001330510 0.0008266108 0.001071382 0.0007074766 0.000918885
## TRB 0.001737961 0.002037416 0.0012657930 0.001640612 0.0010833622 0.001407093
## TXN 0.004349041 0.005098393 0.0031674972 0.004105438 0.0027109857 0.003521083
##             HPQ          KMB          MEL          NYT           PG
## AA  0.003941205 0.0013310564 0.0027184251 0.0018657114 0.0011349541
## AGE 0.004620285 0.0015604012 0.0031868174 0.0021871787 0.0013305099
## CAT 0.002870462 0.0009694362 0.0019798858 0.0013588366 0.0008266108
## F   0.003720446 0.0012565001 0.0025661582 0.0017612075 0.0010713820
## FDX 0.002456760 0.0008297174 0.0016945373 0.0011629960 0.0007074766
## GM  0.003190890 0.0010776539 0.0022008995 0.0015105229 0.0009188850
## HPQ 0.013934297 0.0016776942 0.0034263656 0.0023515856 0.0014305223
## KMB 0.001677694 0.0042512149 0.0011571807 0.0007941971 0.0004831279
## MEL 0.003426366 0.0011571807 0.0061088004 0.0016219938 0.0009866952
## NYT 0.002351586 0.0007941971 0.0016219938 0.0054564979 0.0006771894
## PG  0.001430522 0.0004831279 0.0009866952 0.0006771894 0.0045836602
## TRB 0.002190566 0.0007398161 0.0015109311 0.0010369833 0.0006308202
## TXN 0.005481631 0.0018513021 0.0037809262 0.0025949280 0.0015785529
##              TRB         TXN
## AA  0.0017379606 0.004349041
## AGE 0.0020374161 0.005098393
## CAT 0.0012657930 0.003167497
## F   0.0016406124 0.004105438
## FDX 0.0010833622 0.002710986
## GM  0.0014070929 0.003521083
## HPQ 0.0021905656 0.005481631
## KMB 0.0007398161 0.001851302
## MEL 0.0015109311 0.003780926
## NYT 0.0010369833 0.002594928
## PG  0.0006308202 0.001578553
## TRB 0.0061718134 0.002417246
## TXN 0.0024172455 0.019214110

Calculate GMVP

stock.rt <- colMeans(stock,na.rm = TRUE)
stock.names <- names(stock.rt) 
cov.mat <- as.matrix(cov)
dimnames(cov.mat) = list(stock.names, stock.names)
stock.gmvp = globalMin.portfolio(stock.rt,cov.mat)
attributes(stock.gmvp)
## $names
## [1] "call"    "er"      "sd"      "weights"
## 
## $class
## [1] "portfolio"

Global Minimum Variance Portfolio: Return

stock.gmvp$er
## [1] 0.008949007

Global Minimum Variance Portfolio: Weights

stock.gmvp$weights
##          AA         AGE         CAT           F         FDX          GM 
##  0.01171552 -0.03060051  0.07924266  0.02246168  0.08020173  0.05326574 
##         HPQ         KMB         MEL         NYT          PG         TRB 
## -0.03539714  0.25030240  0.07031147  0.15387826  0.24340218  0.14003743 
##         TXN 
## -0.03882144