我有10支股票的样本数据。
a<-replicate(10,rnorm(100))
cov.Rt<-cov(a)
我正在尝试找到一个最小化回报方差的权重向量。 要做到这一点,我有一个起始权重向量W1,我试图找到导致方差减少的最大边际率的权重向量。
使用共轭梯度法我试图找到一个矢量W2,其条件是它是共轭的
W1 %*% cov.Rt %*% W2 = 0.
我尝试了以下内容:
首先,我找到了第一个共轭组合wcg1
:
mat1<-rep(-1,N-1)
mat2<-diag(1,N-1,N-1)
mat<-rbind(mat1,mat2)
rownames(mat)<-NULL
Z<- mat %*% solve(t(mat) %*% mat) %*% t(mat)
e<-rep(1,10)
cov.Rt<-cov(a)
wcg1<- as.vector(-Z%*% t(Z) %*% cov.Rt %*% e/N)
然后使用optim()
n.iters=1
fn<-function(x,cov.Rt){as.numeric(t(x)%*%cov.Rt%*%x)}
wc<-matrix(NA,ncol=10,nrow=n.iters+1)
wc[1,]<-wcg1
for(i in n.iters) wc[i+1,]<-optim(wc[i,],fn, cov.Rt=cov.Rt)$par
DeMiguel等人。 (http://faculty.london.edu/avmiguel/DeMiguelGarlappiNogalesUppalMS.pdf)写在页面ec4(http://pubsonline.informs.org/doi/suppl/10.1287/mnsc.1080.0986/suppl_file/mnsc.1080.0986-sm-ec.pdf)上,如果我们迭代这个过程N-1次,我得到一个与最小方差组合相同的投资组合权重向量。其中N是权重向量的长度。 但是,我对最小方差组合没有得到相同的结果。
我的做法有什么问题?
我使用的方法是否满足条件,即optim()
输出的权重向量与起始向量wcg1
共轭(即W1 %*% cov.Rt %*% W2 = 0
)?
答案 0 :(得分:1)
首先,从纯粹的财务角度来看,您希望在投资组合中最小化的风险将是通过该函数写入的总差异:
fn<-function(x, cov.Rt) as.numeric(t(x) %*% cov.Rt %*% x)
回到代码,fn
的第一个参数必须是您使用optim更改的参数....所以x
。
然后在cov.Rt
中指定optim
参数:
optim(w1, fn, cov.Rt=cov.rt)