R 应用共轭梯度法寻找投资组合的最优权向量

R 应用共轭梯度法寻找投资组合的最优权向量,r,optimization,R,Optimization,我有10只股票的样本数据 a<-replicate(10,rnorm(100)) cov.Rt<-cov(a) 我尝试了以下方法: 首先,我找到第一个共轭组合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(

我有10只股票的样本数据

a<-replicate(10,rnorm(100))
cov.Rt<-cov(a)
我尝试了以下方法:

首先,我找到第一个共轭组合
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)
DeMiguel等人()在ec4()页上写道,如果我们将这个过程迭代N-1次,我会得到一个与最小方差投资组合相同的投资组合权重向量。其中N是权重向量的长度。 然而,对于最小方差投资组合,我并没有得到相同的结果

我的方法有什么问题?
我使用的方法是否满足以下条件:由
optim()
输出的权重向量相对于起始向量
wcg1
(即
W1%*%cov.Rt%*%W2=0
)共轭?

首先,从纯财务角度来看,您希望在投资组合中最小化的风险将是通过函数写入的总方差:

fn<-function(x, cov.Rt) as.numeric(t(x) %*% cov.Rt %*% x)

为什么不构建一个成本函数(以权重向量为参数)来返回投资组合的风险(方差乘以权重向量),并使用optim最小化此函数?谢谢,现在它可以工作了。该方法是否满足上述要求,即w2与w1共轭?i、 e.W1%*%cov.Rt%*%W2=0?共轭梯度法适用于某一极小化问题上的正定矩阵。你的协方差矩阵肯定是半正的,但是你可以用特征值来检查它的正性。第二,也是最重要的一点,您没有正确地表述初始问题(这不是一个地方,因为它只是一个代码的地方):您的初始问题状态是在解决Ax=b形式的系统还是直接变量最小化(受最终约束?)感谢您的帮助。我对我的问题进行了编辑,以明确我正在努力解决的问题。谢谢嘿,只是想让你知道它仍然不清楚:N不是定义的,也不是sample.data。但最重要的是,它是一个代码论坛,而不是一个建模论坛,没有你关注的论文的链接,你很难赶上你想去的地方。它试图帮助您使用sandard Markowitz方法,并纠正您使用optim这一原始问题。恐怕比较两种方法超出了范围,但您仍然可以提供链接。您好,谢谢您的帮助。我在论文中添加了链接,并修改了问题中的错误。基本上,我试图复制上面链接的附录中所写的内容。我设法得到了wcg1,但我无法想出如何迭代进程N-1次。非常感谢你的帮助。当然,我接受你的回答,因为它回答了我最初的问题。
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
fn<-function(x, cov.Rt) as.numeric(t(x) %*% cov.Rt %*% x)
optim(w1, fn, cov.Rt=cov.rt)