R语言风险价值VaR(Value at Risk)和损失期望值ES(Expected shortfall)的估计

简介: R语言风险价值VaR(Value at Risk)和损失期望值ES(Expected shortfall)的估计

风险价值VaR和损失期望值ES是常见的风险度量。

首先明确:

  1. 时间范围-我们展望多少天?
  2. 概率水平-我们怎么看尾部分布?

在给定时间范围内的盈亏预测分布,示例如图1所示。  

图1:预测的损益分布

给定概率水平的预测的分位数。

图2:带有分位数的预测损益分布

超出分位数的尾部。

图3:带有分位数和尾部标记的预测损益分布

方法

 

风险值(VaR)是在所选概率水平下预测分布分位数的负数。因此,图2和3中的VaR约为110万元。

损失期望值(ES)是超出VaR的尾部预期值的负值(图3中的黄金区域)。因此,它总是比相应的VaR大。

别名

损失期望值

损失期望值有很多别名:

  • 条件风险价值(CVaR)
  • 平均短缺
  • 平均超额损失

我发现“处于风险中的条件价值”令人困惑。我可以看到人们认为在一定条件下它是一种风险价值,而不是超出风险价值的预期损失。

平均超额损失似乎是最具描述性的名称。

在上方,我们看到一个带有多个名称的概念。在下面,我们看到一个具有多个概念的名称。


概率等级

当我说5%时,有人说95%。其实我们都是在处理尾部,这意味着(在我的术语中)肯定少于50%。

缩略语

“风险价值”的缩写有可能与其他两个概念混淆:

  • 方差
  • 向量自回归

所有这些都可以避免与大写约定冲突:

  • VaR:风险价值
  • var:方差
  • VAR:向量自回归

估算

初始成分

有两种初始成分:

  • 投资组合中的资产
  • 所涉及资产的价格历史

衍生成分

投资组合加上当前价格得出投资组合权重。

价格历史记录矩阵用于获取退货历史记录矩阵。

给定投资组合的回报历史记录,可以通过多种方式获得预测分布:

  • 拟合假设分布
  • 模拟(使用一段时间内的经验分布)
  • 总体预测
  • 梯度模拟

如果假设正态分布,则可以估计标准偏差以获得预测分布。如果假设t分布,则还需要估计自由度或假设自由度。

通常被称为模拟方法的方法实际上只是使用一些特定数量的投资组合收益的经验分布。

使用单变量garch模型可以很好地估算VaR和ES。

 

R语言

对于VaR和ES ,R语言是非常合适的环境。

填充区域

您可能想知道如何填充图中的区域,如图3所示。窍门是使用该polygon函数。




plot(xseq, pd, type="l", col="steelblue", lwd=3,
yaxt="n", ylab="",
xlab="Predicted Profit/Loss (millions of dollars)")


abline(v=qnorm(.05, mean=.5, sd=1), lty=2, lwd=3)


polygon(c(xseqt, max(xseqt)), c(dnorm(xseqt,
mean=.5, sd=1), 0), col="gold", border=NA)




lines(xseq, pd, type="l", col="steelblue", lwd=3)
abline(h=0, col="gray80", lwd=2)

投资组合方差计算

给定方差矩阵和权重向量的R命令来获得投资组合方差:


weight %*% varianceMatrix %*% weight

假设权重向量与方差矩阵完全对齐。



weight %*% varianceMatrix[names(weight),
names(weight)] %*% weight

风险价值和损失期望值的估计

评估风险价值和损失期望值的简介,以及使用R进行估算 。

 

基本

风险价值(VaR)和预期短缺(ES)始终与投资组合有关。

您需要两种基本成分:

  • 投资组合
  • 所涉及资产的价格历史

 

这些可以用来估计市场风险。价格历史记录中可能不包含其他风险,例如信用风险。


多元估计

当我们从资产级别开始时,VaR和ES在投资组合级别上都是一个风险数字。一种方法是估计资产收益的方差矩阵,然后使用投资组合权重将其折叠为投资组合方差。

 

单变量估计

通过投资组合的单个时间序列收益(现在是该投资组合),估算更为简单。

我们可以通过将投资组合中资产的简单收益矩阵乘以投资组合权重的矩阵来获得此信息。


R1 <- assetSimpRetMatrix %*% portWts

或 :


R1 <- assetSimpRetMatrix[, names(portWts)] %*% portWts

R1上面计算的对象持有投资组合的(假设的)简单收益。


r1 <- log(R1 + 1)

当然,还有其他选择,但是一些常用方法是:

  • 历史的(使用最近一段时间内的经验分布)
  • 正态分布(根据数据估算参数)并使用适当的分位数
  • t分布(通常假设自由度而不是估计自由度)
  • 拟合单变量garch模型并提前进行模拟

 

R分析

以下是示例,其中spxret11包含2011年标准普尔500指数每日对数收益的向量。因此,我们将获得2012年第一天的风险度量(收益)。


>  "historical")
[,1]
VaR -0.02515786
> "gaussian")
[,1]
VaR -0.0241509
>  "gaussian"
[,1]
VaR -0.03415703
>  "historical")
[,1]
ES -0.03610873
>  "gaussian")
[,1]
ES -0.03028617

如果第一个参数是矩阵,则每一列都可以视为投资组合中的资产。


no weights passed in, assuming equal weighted portfolio
$MVaR
[,1]
[1,] 0.02209855


$contribution
Convertible Arbitrage            CTA Global
0.0052630876         -0.0001503125
Distressed Securities      Emerging Markets
0.0047567783          0.0109935244
Equity Market Neutral
0.0012354711


$pct_contrib_MVaR
Convertible Arbitrage            CTA Global
0.238164397          -0.006801916
Distressed Securities      Emerging Markets
0.215252972           0.497477204
Equity Market Neutral
0.055907342

风险价值的历史估计

这是用于风险价值的历史估计的简单函数的定义:


VaRhistorical <- function(returnVector, prob=.05,
notional=1, digits=2)
{
if(prob > .5) prob <- 1 - prob
ans <- -quantile(returnVector, prob) * notional
signif(ans, digits=digits)
}

投资组合,例如:


> VaRhistorical(spxret11, notional=13e6)
5%
330000

损失期望值


EShistorical <- function(returnVector, prob=.05,
notional=1, digits=2)
{

可以这样使用:

> EShistorical(spxret11, notional=13e6)[1] 470000

因此,风险价值为  330,000,损失期望值为 470,000。


正态分布

稍后会有一个更好的版本(从统计意义上来说),但是这是一种假设正态分布来获得“风险价值”的简单方法:

用法如下:


> VaRnormalEqwt(spxret11, notional=13e6)
[1] 310000
> VaRnormalEqwt(spxret11, notional=13e6,
+     expected.return=0)
[1] 310000

在这种情况下,计算损失期望值有点复杂,因为我们需要找到尾部的期望值。


ESnormalEqwt <- function(returnVector, prob=.05,
notional=1, expected.return=mean(returnVector),
digits=2)
{


ans <- -tailExp * notional
signif(ans, digits=digits)

这个例子的结果是:

> ESnormalEqwt(spxret11, notional=13e6)[1] 390000

一个更好的办法是用指数平滑得到的波动性:



VaRnormalExpsmo <- function(returnVector, prob=.05,
notional=1, expected.return=mean(returnVector),
lambda=.97, digits=2)
{


signif(ans, digits=digits)

其中pp.exponential.smooth取自“指数衰减模型”。


> VaRnormalExpsmo(spxret11, notional=13e6)[1] 340000

t分布


VaRtExpsmo <- function(returnVector, prob=.05,
notional=1, lambda=.97, df=7, digits=2)
{
if(prob > .5) prob <- 1 - prob

结果是:


 
> VaRtExpsmo(spxret11, notional=13e6)
2011-12-30
340000
相关文章
|
4月前
|
数据可视化 决策智能 Python
三种常用的风险价值(VaR)计算方法总结
风险价值(VaR)是金融领域广泛使用的风险度量,它量化了在特定时间范围内和给定置信度水平下投资或投资组合的潜在损失。它提供了一个单一的数字,代表投资者在正常市场条件下可能经历的最大损失。VaR是风险管理、投资组合优化和法规遵从的重要工具。
308 0
|
7天前
|
vr&ar Python
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据
|
7天前
|
vr&ar
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据-1
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据
18 1
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据-1
|
12天前
风险价值VaR(Value at Risk)和损失期望值ES(Expected shortfall)的估计
风险价值VaR(Value at Risk)和损失期望值ES(Expected shortfall)的估计
28 0
|
5天前
|
数据挖掘 C语言
极值理论 EVT、POT超阈值、GARCH 模型分析股票指数VaR、条件CVaR:多元化投资组合预测风险测度分析
极值理论 EVT、POT超阈值、GARCH 模型分析股票指数VaR、条件CVaR:多元化投资组合预测风险测度分析
11 1
|
7天前
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据-3
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据
15 1
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据-3
|
7天前
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据-2
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据
17 1
R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据-2
|
1天前
|
算法
R语言MCMC-GARCH、风险价值VaR模型股价波动分析上证指数时间序列
R语言MCMC-GARCH、风险价值VaR模型股价波动分析上证指数时间序列
R语言MCMC-GARCH、风险价值VaR模型股价波动分析上证指数时间序列
|
13天前
|
数据可视化 Serverless API
Python风险价值计算投资组合VaR(Value at Risk )、期望损失ES(Expected Shortfall)
Python风险价值计算投资组合VaR(Value at Risk )、期望损失ES(Expected Shortfall)
25 1
|
5天前
|
机器学习/深度学习 算法 Python
R语言VaR市场风险计算方法与回测、用LOGIT逻辑回归、PROBIT模型信用风险与分类模型
R语言VaR市场风险计算方法与回测、用LOGIT逻辑回归、PROBIT模型信用风险与分类模型

热门文章

最新文章