#========================================
# 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)"))