retdata <- read.csv("m-fac9003.csv")
head(retdata)
## AA AGE CAT F FDX GM HPQ KMB MEL NYT PG
## 1 -16.40 -12.17 -4.44 -0.06 -2.28 -2.12 -6.19 -11.01 -10.77 -6.30 -8.89
## 2 4.04 4.95 8.84 6.02 10.47 8.97 -4.01 -5.20 0.34 -4.62 -0.84
## 3 0.12 13.08 0.17 2.06 10.84 1.57 5.67 3.21 -0.17 -0.66 5.41
## 4 -4.28 -11.06 0.25 -5.67 -2.44 -4.19 -5.29 -0.65 -2.20 -10.60 4.26
## 5 5.81 19.70 8.52 3.89 -16.17 10.94 8.81 8.83 11.85 11.59 16.35
## 6 -4.05 -1.44 -22.10 -5.79 -2.81 -2.70 -1.47 1.55 -7.76 -0.12 4.80
## TRB TXN SP500
## 1 -13.04 -7.61 -7.52
## 2 -0.37 4.97 0.21
## 3 2.36 2.69 1.77
## 4 -7.98 -6.85 -3.34
## 5 8.82 22.88 8.55
## 6 -0.64 -5.87 -1.53
retdata <- retdata / 100
head(retdata)
## 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
# Method 1: Using lm function to estimate regression ----
stockret <- as.matrix(retdata[, 1:13])
mktret <- as.matrix(retdata[, 14])
TT <- dim(stockret)[1]
fit <- lm(formula = stockret ~ mktret)
fit
##
## Call:
## lm(formula = stockret ~ mktret)
##
## Coefficients:
## AA AGE CAT F FDX GM
## (Intercept) 0.005491 0.007218 0.008394 0.004544 0.007996 0.001982
## mktret 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
## mktret 1.627951 0.549805 1.122871 0.770649 0.468803 0.717881
## TXN
## (Intercept) 0.014389
## mktret 1.796412
sigF = as.numeric(var(mktret))
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)
# Method to compute sigeps:
# sigeps.1 = as.matrix(var(fit$residuals))
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_1f = sigF*bbeta%*%t(bbeta)+sigeps
cov_1f
## 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
# Method 2: Use formula "inv(X'X)*X'Y" ----
ones = rep(1, TT)
X = as.matrix(cbind(ones, mktret))
Y = stockret
b_hat = solve(t(X)%*%X)%*%t(X) %*% stockret
E_hat = Y - X %*% b_hat
# Excluding constant term
b_hat = as.matrix(b_hat[-1,])
diagD_hat = diag(t(E_hat) %*% E_hat)/(TT-2)
# Covariance matrix by single factor model
cov_1f.1 = as.numeric(var(mktret))*b_hat%*%t(b_hat) + diag(diagD_hat);
cov_1f.1
## 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