R 模拟活动权重介于[-0.02,0.02]和绝对权重总和为1之间的投资组合
我有一套投资组合的原始权重,需要生成与原始数据偏差不超过2%的新权重。新的绝对权重(原始权重+新增量)之和必须为1,绝对权重也必须大于0(即,它是一个只做多的投资组合)R 模拟活动权重介于[-0.02,0.02]和绝对权重总和为1之间的投资组合,r,R,我有一套投资组合的原始权重,需要生成与原始数据偏差不超过2%的新权重。新的绝对权重(原始权重+新增量)之和必须为1,绝对权重也必须大于0(即,它是一个只做多的投资组合) 我使用runif(n=40,-0.02,0.02)生成活动权重 我将活动权重添加到原始权重中,以获得新的绝对权重 然后,我计算所有权重的总和,并将每个权重除以总和,以得到所有权重的总和为1 然后,我获取任何小于零的新绝对权重,并在正权重之间重新分配多余的“负权重” 但问题是,现在我的活动权重通过将绝对权重之和增加到1而增大,然后
如有任何建议,将不胜感激 只要您没有任何特定的分发需求,就可以使用以下暴力方法 首先,我们定义两个函数来生成随机数,其总和为给定的
total>0
:
get_weights <- function(N, total = 1)
total * diff(c(0, sort(runif(N-1)), 1))
这里是结果权重变化的典型直方图:
正如人们所看到的,它们远非均匀的,但重量的变化满足了所有的要求
旁注:由于可能需要很多随机数,我使用
library(dqrng)
dqRNGkind("Xoroshiro128+")
dqset.seed(42)
runif <- dqrunif
库(dqrng)
dqRNGkind(“Xoroshiro128+”)
dqset.种子(42)
runif欢迎使用堆栈溢出!你能为你现在正在做的事情添加示例代码吗?您是否要求如何分配重量变化(绝对或相对)?
N <- 40
ratio <- 300
w <- get_weights(N)
dw <- get_weight_changes(N, ratio)
while (any(abs(dw/w) > 0.02)) {
dw <- get_weight_changes(N, ratio)
}
library(dqrng)
dqRNGkind("Xoroshiro128+")
dqset.seed(42)
runif <- dqrunif