El problema surge debido a tus datos. Algunas de tus columnas no tienen un valor negativo en ese percentil (revisa por ejemplo XS1463101680
y XS1203860934
-- todos positivos), por lo tanto, el VaR histórico no tiene sentido (tus pérdidas no pueden ser un valor positivo, la pérdida siempre es negativa). Por lo tanto, obtendrás un error.
Además, tu código para p = 0.95
también devuelve el mismo error.
EDICIÓN
Desafortunadamente, esta función en particular no funcionará si tienes menos de 200 observaciones de datos (retornos). ¿Por qué? Bueno, al investigar el código, encontré lo siguiente:
En la parte inferior de esta página puedes ver la fórmula que se utiliza para calcular el VaR histórico del componente:
component = {
# @todo need to add another loop here for subsetting, I think, when weights is a timeseries
#if (mu=NULL or sigma=NULL) {
# pfolioret = Return.portfolio(R, weights, wealth.index = FALSE, contribution=FALSE, method = c("simple"))
#}
# for now, use as.vector
weights=as.vector(weights)
names(weights)<-colnames(R)
switch(method,
modified = { return(VaR.CornishFisher.portfolio(p,weights,mu,sigma,m3,m4))},
gaussian = { return(VaR.Gaussian.portfolio(p,weights,mu,sigma)) },
historical = { return(VaR.historical.portfolio(R, p,weights)) },
kernel = { return(VaR.kernel.portfolio(R, p,weights)) }
)
}, # end component portfolio switch
Rastreando la función VaR.historical.portfolio
, en la parte inferior de esta página observamos:
VaR.historical.portfolio = function(R,p,w)
{
alpha = .setalphaprob(p)
portret = c();
T = dim(R)[1]
N = dim(R)[2]
for( t in c(1:T) ){
portret = c(portret,sum(w*as.numeric(R[t,])))
}
hVaR = -1* sort(portret)[floor(alpha*T)]
return(hVaR)
}
El fragmento T = dim(R)[1]
te da el número de filas de tus datos. Tu alpha es 1 - 0.995
o 0.005
. Luego tienes este código floor(alpha*T)
que básicamente lo está arruinando todo ya que alpha*T
es 0.76
y floor(0.76)
es 0. Y sort(portret)[0]
devuelve numeric(0)
.
La función funciona para p = 0.95
porque tu alpha es 0.05
y 102 * 0.05 = 5.1
y floor(5.1) = 5
por lo que obtienes el quinto elemento como tu VaR histórico del componente.
0 votos
¿Dónde se define la función
VaR
?0 votos
También obtengo
numeric(0)
para 0.95... debe de haber algo más mal...