如何在函数中创建一些参数需要多个数字并返回最低值

问题描述 投票:0回答:2

我有以下功能:

Double.Historical.Sim.Var <- function(d1, wa=0.75, wb=0.25, pv=1000, cl=0.95) 
   {
   x <- pv
   w <- c(wa,wb)
   Pw <- -pv*w
   loss <- rowSums(t(Pw * t(d1)))
   result <- quantile(loss,0.95)
   return(result)
  }

D1是一个数据帧,返回2个股票(微软和亚马逊)我需要一种方法让函数从0到1使用Wb(1-wa),并告诉我wa和wb的值组合这个功能是最低的。

在此先感谢您的帮助!!

r function apply sapply
2个回答
0
投票

考虑调整函数的返回值。然后,使用sapply在序列中迭代调用函数,以构建结果矩阵并过滤所需的最小值。

Double.Historical.Sim.Var <- function(d1, wa=0.75, wb=0.25, pv=1000, cl=0.95) {
   w <- c(wa, wb)
   Pw <- -pv*w
   loss <- rowSums(t(Pw * t(d1)))
   result <- quantile(loss,0.95)
   return(c(wa, wb, result))       # NEW RETURN
}

res_matrix <- sapply(seq(0.01, 1, by=0.01),
                     function(i) Double.Historical.Sim.Var(d1, wa=i, wb=(1-i))

res_matrix[which.min(res_matrix[3,]),]

0
投票

我认为这要归功于冻糕,如果有人需要它,答案如下

bHS.mv <- function(wa, P, rets){
w <- c(wa, 1-wa)
Pw <- -P*w
loss <- rowSums(t(Pw * t(rets)))
result <- quantile(loss, 0.95)
return(c(wa, result))

wts <- seq(0, 1, by = 0.01)
sapply(wts, bHS.mv, 2000, Port.Vol.Ad)
minvar <- sapply(wts, bHS.mv, 2000, Port.Vol.Ad)

minvar[,which.min(minvar[2,])]

这可以让您了解2个风险因素组合的权重具有风险的最小值

© www.soinside.com 2019 - 2024. All rights reserved.