R語言風(fēng)險價值VaR(Value at Risk)和損失期望值ES(Expected shortfall)的估計
原文鏈接:?http://tecdat.cn/?p=15929
原文出處:拓端數(shù)據(jù)部落公眾號
風(fēng)險價值VaR和損失期望值ES是常見的風(fēng)險度量。
首先明確:
時間范圍-我們展望多少天?
概率水平-我們怎么看尾部分布?
在給定時間范圍內(nèi)的盈虧預(yù)測分布,示例如圖1所示。??
圖1:預(yù)測的損益分布?

給定概率水平的預(yù)測的分位數(shù)。
圖2:帶有分位數(shù)的預(yù)測損益分布?

超出分位數(shù)的尾部。
圖3:帶有分位數(shù)和尾部標(biāo)記的預(yù)測損益分布?

方法
?
風(fēng)險值(VaR)是在所選概率水平下預(yù)測分布分位數(shù)的負(fù)數(shù)。因此,圖2和3中的VaR約為110萬元。
損失期望值(ES)是超出VaR的尾部預(yù)期值的負(fù)值(圖3中的黃金區(qū)域)。因此,它總是比相應(yīng)的VaR大。
別名
損失期望值
損失期望值有很多別名:
條件風(fēng)險價值(CVaR)
平均短缺
平均超額損失
我發(fā)現(xiàn)“處于風(fēng)險中的條件價值”令人困惑。我可以看到人們認(rèn)為在一定條件下它是一種風(fēng)險價值,而不是超出風(fēng)險價值的預(yù)期損失。
平均超額損失似乎是最具描述性的名稱。
在上方,我們看到一個帶有多個名稱的概念。在下面,我們看到一個具有多個概念的名稱。
概率等級
當(dāng)我說5%時,有人說95%。其實我們都是在處理尾部,這意味著(在我的術(shù)語中)肯定少于50%。
縮略語
“風(fēng)險價值”的縮寫有可能與其他兩個概念混淆:
方差
向量自回歸
所有這些都可以避免與大寫約定沖突:
VaR:風(fēng)險價值
var:方差
VAR:向量自回歸
估算
初始成分
有兩種初始成分:
投資組合中的資產(chǎn)
所涉及資產(chǎn)的價格歷史
衍生成分
投資組合加上當(dāng)前價格得出投資組合權(quán)重。
價格歷史記錄矩陣用于獲取退貨歷史記錄矩陣。
給定投資組合的回報歷史記錄,可以通過多種方式獲得預(yù)測分布:
擬合假設(shè)分布
模擬(使用一段時間內(nèi)的經(jīng)驗分布)
總體預(yù)測
梯度模擬
如果假設(shè)正態(tài)分布,則可以估計標(biāo)準(zhǔn)偏差以獲得預(yù)測分布。如果假設(shè)t分布,則還需要估計自由度或假設(shè)自由度。
通常被稱為模擬方法的方法實際上只是使用一些特定數(shù)量的投資組合收益的經(jīng)驗分布。
使用單變量garch模型可以很好地估算VaR和ES。
?
R語言
對于VaR和ES?,R語言是非常合適的環(huán)境。
填充區(qū)域
您可能想知道如何填充圖中的區(qū)域,如圖3所示。竅門是使用該polygon
函數(shù)。
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)
?

投資組合方差計算
給定方差矩陣和權(quán)重向量的R命令來獲得投資組合方差:
weight %*% varianceMatrix %*% weight
假設(shè)權(quán)重向量與方差矩陣完全對齊。?
weight %*% varianceMatrix[names(weight),
names(weight)] %*% weight
?
風(fēng)險價值和損失期望值的估計
評估風(fēng)險價值和損失期望值的簡介,以及使用R進(jìn)行估算 。
?
基本?
風(fēng)險價值(VaR)和預(yù)期短缺(ES)始終與投資組合有關(guān)。
您需要兩種基本成分:
投資組合?
所涉及資產(chǎn)的價格歷史
?
這些可以用來估計市場風(fēng)險。價格歷史記錄中可能不包含其他風(fēng)險,例如信用風(fēng)險。
多元估計
當(dāng)我們從資產(chǎn)級別開始時,VaR和ES在投資組合級別上都是一個風(fēng)險數(shù)字。一種方法是估計資產(chǎn)收益的方差矩陣,然后使用投資組合權(quán)重將其折疊為投資組合方差。
?
單變量估計
通過投資組合的單個時間序列收益(現(xiàn)在是該投資組合),估算更為簡單。
我們可以通過將投資組合中資產(chǎn)的簡單收益矩陣乘以投資組合權(quán)重的矩陣來獲得此信息。?
R1 <- assetSimpRetMatrix %*% portWts
或 :
R1 <- assetSimpRetMatrix[, names(portWts)] %*% portWts
?
R1
上面計算的對象持有投資組合的(假設(shè)的)簡單收益。?
r1 <- log(R1 + 1)
當(dāng)然,還有其他選擇,但是一些常用方法是:
歷史的(使用最近一段時間內(nèi)的經(jīng)驗分布)
正態(tài)分布(根據(jù)數(shù)據(jù)估算參數(shù))并使用適當(dāng)?shù)姆治粩?shù)
t分布(通常假設(shè)自由度而不是估計自由度)
擬合單變量garch模型并提前進(jìn)行模擬
?
R分析
以下是示例,其中spxret11
包含2011年標(biāo)準(zhǔn)普爾500指數(shù)每日對數(shù)收益的向量。因此,我們將獲得2012年第一天的風(fēng)險度量(收益)。
> ?"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
如果第一個參數(shù)是矩陣,則每一列都可以視為投資組合中的資產(chǎn)。?
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
?
風(fēng)險價值的歷史估計
這是用于風(fēng)險價值的歷史估計的簡單函數(shù)的定義:
?
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
因此,風(fēng)險價值為? 330,000,損失期望值為 470,000。
正態(tài)分布
稍后會有一個更好的版本(從統(tǒng)計意義上來說),但是這是一種假設(shè)正態(tài)分布來獲得“風(fēng)險價值”的簡單方法:
用法如下:
> VaRnormalEqwt(spxret11, notional=13e6)
[1] 310000
> VaRnormalEqwt(spxret11, notional=13e6,
+ ? ? expected.return=0)
[1] 310000
在這種情況下,計算損失期望值有點復(fù)雜,因為我們需要找到尾部的期望值。
ESnormalEqwt <- function(returnVector, prob=.05,
notional=1, expected.return=mean(returnVector),
digits=2)
{
ans <- -tailExp * notional
signif(ans, digits=digits)
這個例子的結(jié)果是:
> ESnormalEqwt(spxret11, notional=13e6)
[1] 390000
一個更好的辦法是用指數(shù)平滑得到的波動性:
VaRnormalExpsmo <- function(returnVector, prob=.05,
notional=1, expected.return=mean(returnVector),
lambda=.97, digits=2)
{
signif(ans, digits=digits)
其中pp.exponential.smooth
取自“指數(shù)衰減模型”。
> 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
結(jié)果是:
?
> VaRtExpsmo(spxret11, notional=13e6)
2011-12-30
340000
?

參考文獻(xiàn)
1.R語言基于ARMA-GARCH-VaR模型擬合和預(yù)測實證研究
2.R語言時變參數(shù)VAR隨機(jī)模型
3.R語言時變參數(shù)VAR隨機(jī)模型
4.R語言基于ARMA-GARCH過程的VAR擬合和預(yù)測
5.GARCH(1,1),MA以及歷史模擬法的VaR比較
6.R語言時變參數(shù)VAR隨機(jī)模型
7.R語言實現(xiàn)向量自動回歸VAR模型
8.R語言隨機(jī)搜索變量選擇SSVS估計貝葉斯向量自回歸(BVAR)模型
9.R語言VAR模型的不同類型的脈沖響應(yīng)分析