Ran:
require(fPortfolio)
lppData=100*LPP2005.RET[,1:6]
maxRetSpec=portfolioSpec()
setTargetRisk(maxRetSpec)=0.3
setSolver(maxRetSpec)="solveRsocp"
efficientPortfolio(data=lppData, spec=maxRetSpec,constraints="LongOnly")
我明白了:
Error in eqsumW[2, -1] : subscript out of bounds
消息本身很清楚,但我不知道应该填充eqsumW [2,-1]
我查看了solveRsocp
,设法调整它以便它不需要eqsumW[2, -1]
,将其替换为1,因为0不起作用(我得到与{{相同的错误消息) 3}}并且解决方案似乎没有帮助),然后我得到一个结果,但权重总和超过1。
我也尝试将求解器更改为Rdonlp2
,但我获得了一个不受约束的等权重投资组合。
答案 0 :(得分:0)
因此代码中存在错误,至少我认为这是一个错误。
eqsumW[2, -1]
应该引用Equal Matrix Constraints中的Budget行。
但是,当您没有设定目标回报时,预算行实际上是第一个。因此,您需要在eqsumW[2,-1]
eqsumW[2,1]
和eqsumW[1,-1]
替换为eqsumW[1,1]
和.rsocpArguments