gpt4 book ai didi

r - 创建有效边界时的PortfolioAnalytics错误

转载 作者:行者123 更新时间:2023-12-03 17:26:44 28 4
gpt4 key购买 nike

我正在尝试运行投资组合优化问题,除非我尝试创建高效的边界,否则一切都会顺利进行。

我试图弄乱所有函数参数,安装了文档推荐的所有软件包和插件。但是,即使我尝试在程序包的GitHub存储库中的有效前沿演示中运行代码,我也会收到相同的错误消息。我怀疑它是缺少的插件或建议的软件包安装中的错误。有人至少可以给我提示发生了什么吗?

我拥有的代码非常简单,但是我的主要结论是我没有任何问题,因为在运行位于https://github.com/R-Finance/PortfolioAnalytics/blob/master/demo/demo_efficient_frontier.R的代码时遇到相同的错误

我的代码:

base_pf <- portfolio.spec(colnames(monthly_returns_with_rf[,-selic_col]))

base_pf <- add.constraint(portfolio = base_pf, type = 'full_investment')

base_pf <- add.constraint(portfolio = base_pf, type = 'long_only')

moments <- set.portfolio.moments(monthly_returns_with_rf[,-selic_col], portfolio = base_pf, method = 'boudt', k = 3)

base_pf <- add.constraint(portfolio = base_pf, type = 'box', min = 0, max = 0.4)

base_pf <- add.objective(portfolio = base_pf, type = 'return', name = 'mean')

base_pf <- add.objective(portfolio = base_pf, type = 'risk', name = 'var')

ef_fr <- create.EfficientFrontier(R=monthly_returns_with_rf[,-selic_col], portfolio=base_pf, type="mean-StdDev", match.col = 'StdDev')

opt_base <- optimize.portfolio(monthly_returns_with_rf[,- selic_col], portfolio = base_pf, optimize_method = 'ROI')
print(opt_base)


我收到的错误消息是:

Error in maxret_opt(R = R, constraints = constraints, moments = moments, : paste0("package:", plugin) %in% search() || requireNamespace(plugin,  .... is not TRUE
Traceback:

1. create.EfficientFrontier(R = monthly_returns_with_rf[, -selic_col],
. portfolio = base_pf, type = "mean-StdDev", match.col = "StdDev")
2. meanvar.efficient.frontier(portfolio = portfolio, R = R, n.portfolios = n.portfolios,
. risk_aversion = risk_aversion, ... = ...)
3. optimize.portfolio(R = R, portfolio = portfolio, optimize_method = "ROI",
. ... = ...)
4. maxret_opt(R = R, constraints = constraints, moments = moments,
. target = target, solver = solver, control = control)
5. stopifnot(paste0("package:", plugin) %in% search() ||
requireNamespace(plugin,
. quietly = TRUE))


任何帮助将非常感激!
谢谢!

最佳答案

我们可以追溯该错误以查找引起该错误的原因。从错误消息中,导致此错误的函数是maxret_opt()函数。您可以从步骤中看到,这是optimize.portfolio()调用的函数,同样,optimize.portfolio()meanvar.efficient.frontier()调用,本身由create.EfficientFrontier()调用,而maxret_opt()则来自脚本。

现在到错误。查看solver函数的源代码,我发现以下内容:

function (R, moments, constraints, target, solver = "glpk", 
control = NULL)
{
stopifnot("package:ROI" %in% search() || requireNamespace("ROI",
quietly = TRUE))
plugin <- paste0("ROI.plugin.", solver)
stopifnot(paste0("package:", plugin) %in% search() || requireNamespace(plugin,
quietly = TRUE))


plugin参数作为“ glpk”传递。通过将字符串“ ROI.plugin”串联起来,对象 solver将另存为字符串。和“ glpk”(保存在 search()中)。 stopifnot()函数以“ package:PerformanceAnalytics”的形式返回附加的软件包。这就是为什么在 search()调用中,“ package:”与插件中的字符串连接在一起的原因,该字符串给出了字符串“ package:ROI.plugin.glpk”。然后检查此字符串是否在 || requireNamespace(plugin, quietly = TRUE))返回的字符串中,它还会尝试将软件包附加到 ROI.plugin.glpk。如果该字符串不在附加的软件包中,则使用该字符串附加该软件包。如果这两个都失败,则该功能将停止。

因此,您需要安装 ROI.plugin.quadprog软件包。您还应该安装 。我同时安装了这两个示例,有效的前沿示例为我工作。这是一个漫长的回答,但是希望您以后可以使用上述逻辑学习如何调试错误。

关于r - 创建有效边界时的PortfolioAnalytics错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58155569/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com