【问题标题】:How to solve a function subject to a condition R如何求解受条件 R 约束的函数
【发布时间】:2019-04-22 08:53:36
【问题描述】:

我正在为学校写一篇论文。

我必须使用这个公式来寻找切线投资组合,我在 R 中将其翻译如下(使用矩阵代数的基本切线投资组合公式。)

nom   <- solve(Mat) %*% (ER - RF)

denom <- Ones %*% nom

w    <-  nom %*% solve(denom)

这个公式也给了我负权重(卖空),我想添加一个约束,只允许权重从 0 到 1,总和为 1。

谁能帮我解决这个问题?

示例:

如果我现在运行代码,假设有 3 个资产,我也会得到一些资产的负权重(例如c(0.20, -0.40, 0.80)),sum == 1。 (在这种情况下,将启用卖空)。在给定预期收益和方差的情况下,这是使夏普比率最大化的切线投资组合。我想要的是不允许卖空的切线投资组合。在示例中,我的权重类似于c(0.18, 0.05, 0.72)。将负数替换为 0 并将 >1 替换为 1 是不正确的,因为所有权重的总和应该为 1

【问题讨论】:

  • 添加一个小示例和所需的输出将帮助您更快地获得答案。
  • 示例:如果我现在运行代码,假设有 3 个资产,我也会得到一些资产的负权重(例如 c(0.20, -0.40, 0.80)),总和 == 1. (在这种情况下,将启用卖空)。这是在给定预期回报和方差的情况下最大化夏普比率的切线投资组合。我想要的是不允许卖空的切线投资组合。在示例中,我的权重类似于 c(0.18, 0.05, 0.72)。将负数替换为 0 并将 >1 替换为 1 是不正确的,因为所有权重的总和应该为 1。

标签: r optimization portfolio


【解决方案1】:

正如@Shree 所提到的,一个示例将有助于更准确地理解您所追求的。

据我了解,您希望w 介于 [0,1] 之间?在我的脑海中,您可以移动和缩放w

## Shifting
shift_w <- (w-min(w))
## Scaling
shift_w/max(shift_w)

或者,更粗暴地,将值 1 替换为给定值或函数

## What to replace the value with when negative
replace_negative <- 0
## What to replace the value with when superior to 1
replace_one <- 1

## Making sure w is bounded between 0 and 1
ifelse(ifelse(w < 0, replace_negative, w) > 1, replace_one w)

请注意,replace_negativereplace_one 也可以是函数 f(w),如果您想要更复杂的东西。

【讨论】:

  • 示例:如果我现在运行代码,假设有 3 个资产,我也会得到一些资产的负权重(例如 c(0.20, -0.40, 0.80)),总和 == 1. (在这种情况下,将启用卖空)。这是在给定预期回报和方差的情况下最大化夏普比率的切线投资组合。我想要的是不允许卖空的切线投资组合。在示例中,我的权重类似于 c(0.18, 0.05, 0.72)。将负数替换为 0 并将 >1 替换为 1 是不正确的,因为所有权重的总和应该为 1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 2016-02-21
  • 2011-03-30
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多