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
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
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"
stock.gmvp$er
## [1] 0.008949007
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