Как заставить некоторые параметры в функции принимать несколько чисел и возвращать наименьшее значение - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть следующая функция:

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 акций (Microsoft и Amazon). Мне нужен способ, чтобы функция взяла Wa от 0,01 до 1 с wb,(1-ва) и сказать мне, с какой комбинацией wa и wb значение этой функции является наименьшим.

Заранее спасибо за любую помощь !!

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Я понял это благодаря парфе, ответ на случай, если кому-то понадобится, следующий:

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,])]

Это дает вам вес, при котором портфель из двух факторов риска имеет минимальное значение риска

0 голосов
/ 10 апреля 2019

Рассмотрите возможность корректировки возвращаемого значения функции. Затем вызовите вашу функцию итеративно с 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,]),]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...