#========================================
# FamaFrench_mon_69_98_3stocks
# one factor model
# ff three factor model
#========================================
library(tidyverse)
## ── Attaching packages ────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.1.0 ✔ purrr 0.3.2
## ✔ tibble 2.0.1 ✔ dplyr 0.8.0.1
## ✔ tidyr 0.8.3 ✔ stringr 1.4.0
## ✔ readr 1.3.1 ✔ forcats 0.4.0
## ── Conflicts ───────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
retdata = read_csv('FamaFrench_mon_69_98_3stocks.csv')
## Parsed with column specification:
## cols(
## date = col_double(),
## `Mkt-RF` = col_double(),
## SMB = col_double(),
## HML = col_double(),
## RF = col_double(),
## ge = col_double(),
## ibm = col_double(),
## mobil = col_double(),
## CRSP = col_double()
## )
glimpse(retdata)
## Observations: 360
## Variables: 9
## $ date <dbl> 196901, 196902, 196903, 196904, 196905, 196906, 196907,…
## $ `Mkt-RF` <dbl> -1.20, -5.82, 2.59, 1.52, 0.02, -7.25, -7.05, 4.65, -2.…
## $ SMB <dbl> -0.80, -3.90, -0.28, -0.85, -0.27, -5.31, -3.27, 0.89, …
## $ HML <dbl> 1.57, 0.93, -0.45, 0.06, 0.74, -1.15, 1.36, -3.83, -3.2…
## $ RF <dbl> 0.53, 0.46, 0.46, 0.53, 0.48, 0.51, 0.53, 0.50, 0.62, 0…
## $ ge <dbl> -1.1984, -6.0377, 6.6474, 5.9621, -3.5806, -3.8196, -4.…
## $ ibm <dbl> -5.9524, -0.7004, 7.0303, 4.4586, -2.5000, 5.8777, -3.9…
## $ mobil <dbl> -1.4043, -7.8431, 21.5130, 2.9961, 2.6667, -12.9870, -6…
## $ CRSP <dbl> -0.6714, -5.3641, 3.0505, 2.0528, 0.5038, -6.7388, -6.5…
colnames(retdata)[2]<- 'Mkt_RF'
# attach(retdata)
#Below we use two different approaches to estimate covariance matrix
#===========================================================
# Single index model to compute covariance matrix
#===========================================================
# Method 1: by "lm" function
#===========================
stock.rets<-retdata %>% select(c(2,6,7,8))/100
glimpse(stock.rets)
## Observations: 360
## Variables: 4
## $ Mkt_RF <dbl> -0.0120, -0.0582, 0.0259, 0.0152, 0.0002, -0.0725, -0.070…
## $ ge <dbl> -0.011984, -0.060377, 0.066474, 0.059621, -0.035806, -0.0…
## $ ibm <dbl> -0.059524, -0.007004, 0.070303, 0.044586, -0.025000, 0.05…
## $ mobil <dbl> -0.014043, -0.078431, 0.215130, 0.029961, 0.026667, -0.12…
N <- dim(stock.rets)[1]
Mkt.RF<-retdata %>% select(2)/100
fit = lm(formula = cbind(ge,ibm,mobil)~Mkt_RF, data = stock.rets)
sigF = as.numeric(var(Mkt.RF))
bbeta = as.matrix(fit$coefficients)
bbeta = as.matrix(bbeta[-1,])
bbeta
## [,1]
## ge 1.0580825
## ibm 0.8149949
## mobil 0.8158072
sigeps = crossprod(fit$residuals)/(N-2)
# sigeps = as.matrix(var(fit$residuals)) # you can use this way too
sigeps = diag(diag(sigeps))
sigeps
## [,1] [,2] [,3]
## [1,] 0.001702494 0.000000000 0.000000000
## [2,] 0.000000000 0.003225874 0.000000000
## [3,] 0.000000000 0.000000000 0.002913458
cov_1f = sigF*bbeta%*%t(bbeta)+sigeps
cov_1f
## ge ibm mobil
## ge 0.004070402 0.001823896 0.001825714
## ibm 0.001823896 0.004630742 0.001406268
## mobil 0.001825714 0.001406268 0.004321127
#===================================
#Method 2: by formula "inv(X'X)*X'Y"
#===================================
ones = rep(1,N)
X = as.matrix(cbind(ones, stock.rets$Mkt_RF))
retdata1 = as.matrix(retdata[,c(6,7,8)]/100)
b_hat = solve(t(X)%*%X)%*%t(X)%*%retdata1
E_hat = retdata1 - X%*%b_hat
b_hat = as.matrix(b_hat[-1,])
diagD_hat = diag(t(E_hat)%*%E_hat)/(N-2)
cov_1f.1 = as.numeric(var(Mkt.RF))*b_hat%*%t(b_hat) + diag(diagD_hat);
cov_1f.1
## ge ibm mobil
## ge 0.004070402 0.001823896 0.001825714
## ibm 0.001823896 0.004630742 0.001406268
## mobil 0.001825714 0.001406268 0.004321127
#===================================================================
# Using FF 3 factor model to compute covariance matrix
#===================================================================
# Method 1: by "lm" function
#============================
stock.rets<-retdata %>% select(c(2,3,4,6,7,8))/100
fit3 = lm(formula = cbind(ge, ibm, mobil)~Mkt_RF + SMB + HML, data=stock.rets)
sigF3 = as.matrix(var(cbind(stock.rets$Mkt_RF, stock.rets$SMB, stock.rets$HML)))
bbeta3 = as.matrix(fit3$coefficients)
bbeta3 = bbeta3[-1,]
bbeta3
## ge ibm mobil
## Mkt_RF 1.134331448 0.8050676 0.9803403
## SMB -0.369412445 -0.3099907 -0.3727822
## HML 0.009630701 -0.2981744 0.3726475
sigeps3 = crossprod(fit3$residuals)/(N-4)
sigeps3 = diag(diag(sigeps3))
cov_3f = t(bbeta3) * sigF3 * (bbeta3) + sigeps3
cov_3f
## Mkt_RF SMB HML
## ge 4.332517e-03 -1.258773e-04 -4.819330e-06
## ibm -1.258773e-04 3.199233e-03 -1.196042e-05
## mobil -4.819330e-06 -1.196042e-05 2.841930e-03
#===================================
#Method 2: by formula "inv(X'X)*X'Y"
#===================================
X.3 = cbind(ones, stock.rets$Mkt_RF, stock.rets$SMB, stock.rets$HML)
b_hat.3 = solve(t(X.3)%*%(X.3))%*%t(X.3)%*%retdata1
E_hat.3 = retdata1 - X.3%*%b_hat.3
b_hat.3 = as.matrix(b_hat.3[-1,])
diagD_hat.3 = diag(t(E_hat.3)%*%E_hat.3)/(N-4)
cov_3f.3 = t(b_hat.3)*sigF3*b_hat.3 + diag(diagD_hat.3)
cov_3f.3
##
## ge 4.332517e-03 -1.258773e-04 -4.819330e-06
## ibm -1.258773e-04 3.199233e-03 -1.196042e-05
## mobil -4.819330e-06 -1.196042e-05 2.841930e-03
#======================================================
# Create frontier function to plot efficient frontier
#======================================================
frontier <- function(return, Q) {
#return <- log(tail(assets, -1) / head(assets, -1))
n = ncol(return)
#Q = cov(return)
Ax <- rbind(2*cov(return), colMeans(return), rep(1, n))
Ax <- cbind(Ax, rbind(t(tail(Ax, 2)), matrix(0, 2, 2)))
r <- colMeans(return)
rbase <- seq(min(r), max(r), length = 100)
s <- sapply(rbase, function(x) {
b0 <- c(rep(0, ncol(return)), x, 1)
y <- head(solve(Ax, b0), n)
sqrt(y%*%Q%*%y)
})
efficient.port <- list("call" = call,
"er" = as.vector(rbase),
"sd" = as.vector(s))
class(efficient.port) <- "portfolio"
efficient.port
#plot(s, rbase, xlab = 'Std', ylab = 'Return', type="l")
}
#===============================================================
# Use different covariance matrix to plot efficient frontier: Q
#
#================================================================
#return = retdata1
Q.3f = cov_3f
Q.1f = cov_1f
retdata1
## ge ibm mobil
## [1,] -0.011984 -0.059524 -0.014043
## [2,] -0.060377 -0.007004 -0.078431
## [3,] 0.066474 0.070303 0.215130
## [4,] 0.059621 0.044586 0.029961
## [5,] -0.035806 -0.025000 0.026667
## [6,] -0.038196 0.058777 -0.129870
## [7,] -0.043056 -0.039230 -0.060981
## [8,] -0.027576 0.066256 0.107798
## [9,] 0.022687 0.000725 -0.103520
## [10,] -0.010294 0.044171 -0.044342
## [11,] -0.047548 -0.006935 -0.053790
## [12,] -0.024649 0.021008 -0.049096
## [13,] -0.066129 -0.080247 -0.147283
## [14,] -0.025907 0.018494 0.097087
## [15,] 0.055319 -0.005143 0.017699
## [16,] -0.033898 -0.119645 -0.035362
## [17,] -0.068421 -0.063087 0.073171
## [18,] 0.026742 -0.100719 -0.005682
## [19,] 0.138889 0.013800 0.082286
## [20,] 0.021138 0.055500 0.064171
## [21,] 0.083121 0.095775 0.042714
## [22,] 0.019259 0.011825 0.042892
## [23,] 0.027616 0.045068 0.065421
## [24,] 0.069590 0.034174 0.008772
## [25,] 0.057257 0.024390 -0.076522
## [26,] 0.089421 0.037788 0.038095
## [27,] 0.041850 0.062407 0.013761
## [28,] 0.097098 0.000699 0.068326
## [29,] -0.024415 -0.082320 -0.070664
## [30,] 0.019395 -0.030581 0.027650
## [31,] -0.121399 -0.081230 -0.055605
## [32,] 0.161592 0.048240 -0.057692
## [33,] -0.002419 -0.000822 -0.007653
## [34,] -0.052846 -0.010700 0.023650
## [35,] 0.025751 0.020965 0.015267
## [36,] 0.053975 0.101473 0.095238
## [37,] -0.009980 0.093611 -0.013730
## [38,] -0.022177 0.005027 0.030626
## [39,] 0.071753 0.037313 -0.063781
## [40,] 0.046422 0.009810 0.017032
## [41,] 0.016636 0.033938 0.069856
## [42,] -0.038545 -0.014456 0.018100
## [43,] -0.041825 0.022321 0.057778
## [44,] 0.055556 0.022707 0.141176
## [45,] 0.003383 -0.004896 0.016729
## [46,] -0.037665 -0.051661 0.023035
## [47,] 0.068102 0.017769 0.059567
## [48,] 0.073665 0.028133 0.008518
## [49,] -0.039451 0.083333 0.016216
## [50,] -0.039643 -0.005970 -0.139262
## [51,] -0.035514 0.000000 0.089669
## [52,] -0.081395 -0.054461 -0.044723
## [53,] 0.004219 -0.032261 -0.026966
## [54,] -0.029832 0.007149 0.001946
## [55,] 0.093682 -0.007886 -0.053204
## [56,] -0.057769 -0.039364 -0.020747
## [57,] 0.072304 -0.142857 0.067797
## [58,] 0.037698 0.086240 -0.070238
## [59,] -0.028298 -0.050419 -0.181425
## [60,] -0.001980 -0.068868 0.118734
## [61,] -0.049603 -0.006079 -0.055660
## [62,] -0.047599 -0.024852 -0.098985
## [63,] -0.041943 -0.008933 0.025352
## [64,] -0.059908 -0.036055 -0.040110
## [65,] -0.053922 -0.059274 -0.032070
## [66,] 0.029016 0.001176 -0.033133
## [67,] -0.126904 -0.052291 0.029283
## [68,] -0.119186 -0.040298 -0.086420
## [69,] -0.164356 -0.171875 -0.118243
## [70,] 0.224000 0.189465 0.124138
## [71,] -0.029412 -0.054858 -0.080139
## [72,] -0.090236 -0.052186 0.090909
## [73,] 0.157303 0.120536 0.169444
## [74,] 0.152751 0.152722 0.003030
## [75,] 0.042493 -0.041183 -0.039275
## [76,] 0.000000 0.015729 0.033962
## [77,] -0.013587 0.031566 0.177019
## [78,] 0.168595 -0.027907 0.002639
## [79,] -0.102138 -0.089713 -0.045263
## [80,] -0.021164 -0.011827 -0.008427
## [81,] -0.040000 0.010738 0.011331
## [82,] 0.093750 0.127490 0.047059
## [83,] 0.002597 0.074794 -0.010899
## [84,] -0.035751 -0.009387 0.041322
## [85,] 0.214092 0.149387 0.168783
## [86,] -0.046875 -0.001455 -0.011494
## [87,] -0.008899 0.024939 0.079070
## [88,] 0.023810 -0.032920 0.023707
## [89,] -0.053488 0.019734 0.018526
## [90,] 0.130713 0.078422 0.004193
## [91,] -0.045952 -0.016712 -0.022965
## [92,] -0.027523 0.013780 -0.000427
## [93,] 0.029717 0.028323 0.067245
## [94,] -0.013857 -0.034207 -0.016260
## [95,] -0.051522 0.005520 0.005372
## [96,] 0.107654 0.029982 0.085595
## [97,] -0.049438 -0.013883 0.028846
## [98,] -0.044917 0.011807 0.001121
## [99,] -0.018317 0.001812 0.018939
## [100,] 0.096692 -0.064195 -0.014870
## [101,] 0.006961 -0.041546 -0.015849
## [102,] 0.051613 0.075356 0.058366
## [103,] -0.037611 0.015625 0.005515
## [104,] -0.018391 0.010256 -0.108592
## [105,] -0.029508 -0.027480 0.031250
## [106,] -0.021951 -0.014368 0.000000
## [107,] 0.010973 0.035957 0.049293
## [108,] -0.004988 0.035985 -0.003914
## [109,] -0.082707 -0.029250 -0.046365
## [110,] -0.021858 -0.042825 -0.016771
## [111,] 0.054190 -0.062687 0.049041
## [112,] 0.120643 0.129512 0.077236
## [113,] 0.011962 -0.018308 -0.010566
## [114,] -0.032624 -0.003872 -0.042636
## [115,] 0.061881 0.092323 0.028340
## [116,] 0.011655 0.048950 0.055905
## [117,] -0.013364 -0.050964 0.064394
## [118,] -0.101655 -0.046029 -0.069039
## [119,] 0.005789 0.030766 0.036965
## [120,] 0.000000 0.107607 0.041276
## [121,] 0.023873 0.034338 0.060541
## [122,] -0.033161 -0.017198 -0.001727
## [123,] 0.043478 0.051667 0.029412
## [124,] 0.023438 -0.003962 0.078992
## [125,] 0.014249 -0.021671 -0.086293
## [126,] 0.017812 -0.034539 0.088388
## [127,] 0.035000 -0.049404 0.018471
## [128,] 0.028986 0.015914 0.111111
## [129,] -0.033803 -0.032143 0.180000
## [130,] -0.046798 -0.079336 -0.031477
## [131,] -0.032041 0.059880 0.050761
## [132,] 0.097561 -0.013410 0.062802
## [133,] 0.086420 0.066019 0.075000
## [134,] -0.073636 -0.062149 0.366167
## [135,] -0.042289 -0.122047 -0.175549
## [136,] -0.012987 -0.015695 0.119392
## [137,] 0.057895 0.024784 0.003436
## [138,] 0.040404 0.060948 -0.023973
## [139,] 0.092233 0.110638 0.054035
## [140,] -0.031111 0.017011 -0.058923
## [141,] -0.020642 -0.020992 0.007156
## [142,] 0.028504 0.038986 0.058615
## [143,] 0.143187 0.035422 0.192953
## [144,] 0.002020 -0.003670 -0.081081
## [145,] 0.000000 -0.051565 -0.082043
## [146,] 0.089796 0.011417 -0.066667
## [147,] 0.014981 -0.029183 -0.042125
## [148,] -0.020522 -0.060120 -0.024857
## [149,] 0.001905 0.016802 -0.091633
## [150,] -0.046768 -0.014894 0.052632
## [151,] -0.014141 -0.030238 0.020833
## [152,] -0.084016 -0.002494 -0.057143
## [153,] -0.003579 -0.018141 -0.105727
## [154,] -0.011390 -0.048499 0.024631
## [155,] 0.112903 0.074951 0.038462
## [156,] -0.036439 0.043578 -0.089623
## [157,] 0.089325 0.118681 -0.015544
## [158,] 0.006000 -0.013988 -0.015789
## [159,] 0.020676 -0.034343 -0.038251
## [160,] 0.011834 0.075314 -0.011364
## [161,] -0.035088 -0.029416 0.091954
## [162,] 0.042020 -0.014228 -0.037634
## [163,] 0.033399 0.082474 -0.072626
## [164,] 0.144487 0.087390 0.156627
## [165,] 0.004651 0.040780 0.042553
## [166,] 0.148829 0.088586 0.020408
## [167,] 0.087045 0.093709 -0.040000
## [168,] 0.025676 0.112717 0.069149
## [169,] 0.090909 0.027273 0.054726
## [170,] 0.048309 0.009962 0.009434
## [171,] -0.024424 0.027778 0.095238
## [172,] 0.065476 0.149877 0.091304
## [173,] -0.075978 -0.041026 -0.051793
## [174,] 0.073277 0.080899 0.076923
## [175,] -0.093182 0.001040 -0.059524
## [176,] 0.025063 0.000623 0.118143
## [177,] 0.041076 0.061715 -0.049808
## [178,] -0.018957 -0.000985 -0.032258
## [179,] 0.113527 -0.066469 -0.033333
## [180,] 0.026258 0.039404 0.008772
## [181,] -0.072495 -0.064549 0.084348
## [182,] -0.043678 -0.025630 0.024490
## [183,] 0.064904 0.034014 -0.027888
## [184,] 0.011390 -0.002193 0.028689
## [185,] -0.042793 -0.044396 -0.145817
## [186,] -0.002353 -0.018561 0.009524
## [187,] 0.000000 0.047281 -0.092453
## [188,] 0.078571 0.127314 0.260638
## [189,] -0.006623 0.004040 0.012658
## [190,] 0.031390 0.011871 0.014167
## [191,] -0.027391 -0.023069 -0.041841
## [192,] 0.022573 0.011294 -0.052402
## [193,] 0.128035 0.107614 0.052535
## [194,] 0.004697 -0.009349 0.071429
## [195,] -0.070727 -0.052239 0.000000
## [196,] 0.000000 -0.003937 0.026667
## [197,] 0.034672 0.025494 0.028926
## [198,] 0.020619 -0.037901 -0.032129
## [199,] 0.036364 0.061616 0.001660
## [200,] -0.048733 -0.027783 -0.012658
## [201,] -0.048361 -0.021718 0.004274
## [202,] 0.002174 0.048436 0.099574
## [203,] 0.138829 0.084504 -0.007874
## [204,] 0.117410 0.112701 -0.039683
## [205,] -0.025773 -0.025723 -0.020661
## [206,] 0.101658 0.003135 -0.002532
## [207,] 0.012903 0.004143 -0.025862
## [208,] -0.004777 0.031353 0.041593
## [209,] 0.020800 -0.017760 0.082251
## [210,] 0.022947 -0.038556 0.012000
## [211,] -0.098765 -0.095563 -0.022134
## [212,] 0.077055 0.055472 0.172840
## [213,] -0.078474 -0.030631 0.052632
## [214,] 0.060870 -0.080855 0.020000
## [215,] 0.088525 0.037209 0.043791
## [216,] 0.043735 -0.056047 0.019048
## [217,] 0.165698 0.072917 0.093458
## [218,] 0.031172 0.092039 -0.021652
## [219,] 0.020605 0.076165 0.123894
## [220,] -0.013111 0.066611 -0.006824
## [221,] 0.004831 0.006089 -0.002674
## [222,] 0.052019 0.015625 0.091153
## [223,] 0.089655 -0.009231 0.031941
## [224,] 0.054852 0.052640 0.029524
## [225,] -0.010720 -0.104677 -0.081776
## [226,] -0.229675 -0.187396 -0.178117
## [227,] -0.105541 -0.086939 -0.150464
## [228,] 0.049558 0.042889 0.159259
## [229,] 0.022663 -0.027056 0.127796
## [230,] 0.008310 0.055395 0.009632
## [231,] -0.104945 -0.084043 0.005682
## [232,] 0.000000 0.053426 0.056497
## [233,] 0.040248 0.001985 -0.027273
## [234,] 0.052976 0.132222 -0.030641
## [235,] -0.025641 -0.012758 0.028736
## [236,] -0.055556 -0.104573 -0.017318
## [237,] 0.082972 0.034753 -0.017291
## [238,] 0.005764 0.062839 0.041056
## [239,] 0.031519 -0.024669 0.016338
## [240,] 0.003556 0.028481 0.022472
## [241,] 0.081006 0.071795 0.076374
## [242,] -0.054264 -0.061435 -0.036176
## [243,] -0.018361 -0.101852 0.050938
## [244,] 0.098315 0.044674 0.035714
## [245,] 0.117647 -0.027763 0.027586
## [246,] -0.047414 0.020525 -0.041262
## [247,] 0.133172 0.027933 0.037975
## [248,] -0.014957 0.029000 0.083415
## [249,] -0.012408 -0.067236 0.022779
## [250,] -0.019912 -0.082380 0.004900
## [251,] 0.119639 -0.014115 0.056054
## [252,] 0.047903 -0.035851 0.063694
## [253,] -0.034884 0.047809 -0.045509
## [254,] -0.000482 0.065501 0.044397
## [255,] 0.040486 0.021661 -0.004049
## [256,] -0.003891 0.027091 -0.020325
## [257,] 0.083516 0.112018 0.055602
## [258,] 0.005445 -0.020833 -0.017893
## [259,] 0.034296 -0.051064 0.068421
## [260,] -0.134380 -0.075471 -0.021073
## [261,] -0.113387 0.044172 -0.015656
## [262,] -0.045872 -0.009401 -0.083897
## [263,] 0.052885 0.089775 0.035165
## [264,] 0.057260 -0.005501 -0.014862
## [265,] 0.115468 0.121681 -0.009052
## [266,] 0.070469 0.025325 0.110132
## [267,] 0.023897 -0.115534 0.023810
## [268,] 0.016158 -0.095499 0.062016
## [269,] 0.099081 0.042087 -0.026642
## [270,] -0.042071 -0.084806 -0.024668
## [271,] -0.010135 0.042471 0.064981
## [272,] 0.022184 -0.031259 0.011091
## [273,] -0.066644 0.069677 -0.003656
## [274,] -0.005405 -0.051870 0.042936
## [275,] -0.061594 -0.046209 -0.078292
## [276,] 0.189961 -0.037838 0.048263
## [277,] -0.016340 0.011236 -0.058932
## [278,] 0.044850 -0.021278 -0.018787
## [279,] -0.029571 -0.038849 -0.038384
## [280,] 0.011551 0.086826 0.086134
## [281,] -0.003263 0.013333 0.018182
## [282,] 0.025205 0.078512 -0.053846
## [283,] -0.016077 -0.031928 0.058943
## [284,] -0.032680 -0.072982 0.008445
## [285,] 0.065405 -0.067821 0.005780
## [286,] -0.019169 -0.171827 -0.034483
## [287,] 0.084691 0.038654 -0.023016
## [288,] 0.034595 -0.261905 0.039095
## [289,] 0.007310 0.022333 0.007921
## [290,] -0.023222 0.066311 0.071513
## [291,] 0.066924 -0.064368 0.020408
## [292,] 0.016830 -0.044226 0.030909
## [293,] 0.023448 0.095938 -0.004586
## [294,] 0.039137 -0.063981 0.071685
## [295,] 0.028721 -0.098734 0.008361
## [296,] -0.002538 0.033708 0.042123
## [297,] -0.017761 -0.081967 0.049839
## [298,] 0.011734 0.095238 -0.001531
## [299,] 0.014175 0.176630 -0.052454
## [300,] 0.073393 0.048724 0.036007
## [301,] 0.027414 0.000000 0.023697
## [302,] -0.022042 -0.059735 -0.018827
## [303,] -0.044176 0.033097 -0.054054
## [304,] -0.047500 0.052632 0.052101
## [305,] 0.044619 0.100000 0.046006
## [306,] -0.055578 -0.067460 0.006173
## [307,] 0.080429 0.053191 0.029141
## [308,] -0.012407 0.111111 0.016095
## [309,] -0.025427 0.016423 -0.062222
## [310,] 0.015584 0.070018 0.086888
## [311,] -0.058824 -0.046980 0.001163
## [312,] 0.117609 0.038869 -0.011730
## [313,] 0.009804 -0.018707 0.035312
## [314,] 0.063107 0.046794 0.007236
## [315,] -0.006210 0.091362 0.064655
## [316,] 0.037037 0.152207 0.024291
## [317,] 0.035714 -0.014531 0.058498
## [318,] -0.020948 0.032258 -0.035176
## [319,] 0.046563 0.134115 0.018229
## [320,] -0.002119 -0.048220 -0.016113
## [321,] 0.089766 -0.085852 0.045932
## [322,] -0.007843 0.029101 0.011292
## [323,] 0.061265 -0.003856 0.045161
## [324,] 0.079479 -0.054334 0.070659
## [325,] 0.065972 0.187414 -0.008949
## [326,] -0.016287 0.132488 -0.001806
## [327,] 0.037550 -0.092762 0.057013
## [328,] -0.008026 -0.031461 -0.007551
## [329,] 0.071197 -0.006032 -0.009783
## [330,] 0.048338 -0.072600 -0.004430
## [331,] -0.046571 0.085859 -0.018910
## [332,] 0.010638 0.067209 0.034014
## [333,] 0.100271 0.088525 0.024336
## [334,] 0.063187 0.036145 0.008639
## [335,] 0.074935 0.238178 0.046039
## [336,] -0.044279 -0.049412 0.009288
## [337,] 0.046776 0.035479 0.073620
## [338,] -0.006039 -0.081434 -0.056686
## [339,] -0.030182 -0.045217 0.064155
## [340,] 0.118388 0.169399 -0.004785
## [341,] 0.087838 0.079128 0.084115
## [342,] 0.076605 0.043353 -0.000894
## [343,] 0.082846 0.171745 0.102397
## [344,] -0.107843 -0.039480 -0.049020
## [345,] 0.092068 0.045623 0.017182
## [346,] -0.050505 -0.070755 -0.008885
## [347,] 0.143133 0.113706 -0.012017
## [348,] -0.002707 -0.044521 0.003475
## [349,] 0.056218 -0.056153 -0.051082
## [350,] 0.003226 0.059620 0.063066
## [351,] 0.112379 -0.005386 0.060554
## [352,] -0.011603 0.115523 0.032626
## [353,] -0.021277 0.015922 -0.007014
## [354,] 0.089955 -0.022872 -0.017628
## [355,] -0.012517 0.154056 -0.082284
## [356,] -0.105521 -0.148340 -0.008961
## [357,] -0.001719 0.140954 0.098553
## [358,] 0.099764 0.155642 -0.003292
## [359,] 0.032857 0.113434 0.143782
## [360,] 0.132503 0.116578 0.013081
Q = cov(retdata1)
#========================================
# draw overlay frontiers on the same graph
#=========================================
xy.3f = frontier(retdata1, Q.3f)
xy.1f = frontier(retdata1, Q.1f)
xy = frontier(retdata1, Q)
#
#xx<-c(xy$sd, xy.1f$sd, xy.3f$sd)
#yy<-c(xy$er, xy.1f$er, xy.3f$er)
#type<-rep(c("hist", "1.factor", "3.factor"), c(100,100,100))
#xy.all<-data.frame(xx, yy, type)
#head(xy.all)
#
#library(lattice)
#xyplot(yy ~ xx, xy.all, groups = xy.all$type, pch= 20)
#ggplot(xy.all, aes(x = xx, y = yy, colour = type))+
# geom_line(type)
#plot(xx, yy)
plot(xy$sd, xy$er, type = 'l', col="red")
lines(xy.1f$sd, xy.1f$er, col = "green")
lines(xy.3f$sd, xy.3f$er, col = "red")

#==========================================================================
# Another way to draw overlay frontiers on the same graph
# Ref: http://www.sixhat.net/plotting-multiple-data-series-in-r.html
#==========================================================================
plot(xy.3f$sd, xy.3f$er, type="l",col="red", xlab="risk", ylab="return")
par(new=TRUE)
plot(xy.1f$sd, xy.1f$er, axes=F, type="l",col="blue", xlab="", ylab="")
par(new=TRUE)
plot(xy$sd, xy$er, axes=F, type="l",col="black", xlab="", ylab="")

#text(locator(), labels = c("red line", "black line)"))