我正在嘗試使用R包投資回報率進行簡單的投資組合優化問題。
我可以使用quadprog求解器「手動」得到結果,但我真的很想了解ROI包的工作原理。
不幸的是我遇到了一個錯誤,即使我在http://statmath.wu.ac.at/courses/optimization/Presentations/ROI-2011.pdf堅持提供的示例由斯特凡Theussl(幻燈片26,27)R:使用投資回報包
下面是代碼:
library(fPortfolio)
library(ROI)
data(LPP2005.RET)
lppData <- 100 * LPP2005.RET[, 1:6]
r <- mean(lppData)
foo <- Q_objective(Q = cov(lppData), L = rep(0, ncol(lppData)))
full_invest <- L_constraint(rep(1, ncol(lppData)), "==", 1)
target_return <- L_constraint(apply(lppData, 2, mean), "==",r)
op <- OP(objective = foo, constraints = rbind(full_invest, target_return))
sol <- ROI_solve(op, solver = "quadprog")
錯誤消息我得到是:
錯誤(dir ==「< =」)| (DIR = Q = 「<」):操作僅僅爲數字,邏輯或複雜類型
感謝您的幫助是可能的 !
我不知道這個包,但看起來像你有一個錯字。你的「or」中的第二項可能應該是'dir ==「<」'(其中「q」來自哪個DID?),否則兩者都應該使用'='。我的下一個猜測是,你的一個源變量不是所需的類型,如錯誤消息所示。 – 2012-02-05 14:16:06
我無法複製這個。你有沒有撥打你還沒有提供的其他代碼?調用堆棧在出現錯誤時的樣子是什麼? (在錯誤發生後鍵入'traceback()') – 2012-02-06 11:11:45
> traceback() 4:which((dir ==「<=」)|(dir = q =「<」)) 3:.quadprog_solve_QP (x)$ L,dir = constraints(x)$ dir,rhs =約束條件(x)(Q =條件(objective(x))$ Q,L =條件(objective(x))$ L, $ rhs, max = x $ maximum) 2:SOLVE(x,control) 1:ROI_solve(op,solver =「quadprog」) – bigsleep 2012-02-12 02:50:39