使用蒙地卡羅模擬的 VaR 估計
我想驗證以下隨機變數的理論 VaR 99%:
$$ \begin{align*} X=\epsilon + \nu, \end{align*} $$ $ \epsilon \sim \mathcal{N}(0,1) $ , $$ \begin{align*} \nu= \begin{cases}\begin{array}{ll}0 & \text{with prob.}\enspace 0.991 \ -10& \text{with prob.}\enspace 0.009 \end{array} \end{cases}. \end{align*} $$ 所以我證明理論上的 99% VaR 是 3.088。然後我在excel中執行了一些蒙特卡羅模擬( $ \epsilon $ 作為一個標準的正常和 $ \nu $ 如伯努利等並使用分位數函式)。現在我在 excel 中進行了 20000 次模擬,但 VaR 估計對不同的模擬非常敏感,從 2 到 8 不等,但我已經看到大多數估計接近理論值。我在 MATLAB 中編寫了相同的蒙地卡羅模擬,不得不將模擬量增加到 500000,以便獲得非常穩定和精確的估計。 現在我對原因很感興趣,500000 對我來說似乎很高,我從未經歷過需要執行超過 10000 次模擬的情況。是因為 X 是連續和離散隨機變數的混合體嗎?謝謝。
要回答您的問題*“是否因為 X 是連續和離散隨機變數的混合”*:答案是否定的。平均原因是(1)樣本量(有限/可數)(2)您試圖獲得尾值的事實和(3)KDE(分佈)的形狀。理論值 3.088當且僅當您有足夠大的樣本量時,才會根據經驗計算。
(@Jack JackGuRae 說模擬實際上不是隨機的,這並不完全正確,因為偽隨機數生成器使用的算法確實可以確保足夠大的樣本正確分佈,即模擬 1000 次擲骰子會給你 p=每邊 1/6 比方說 3 dp)
(@msitt 與尾部評論一致)
正如您之前提到的,確實,對於某些模擬,您需要的樣本量要小得多,但在這種情況下,您正試圖從高度左偏的分佈中進行採樣。考慮以下程式碼來繪製 KDE:
sims <- 10e6 errors <- rnorm(sims) v <- ifelse(runif(sims) <= 0.009, -10.0, 0.00) x <- v + errors plot(density(x), col = 2, lwd = 2) abline(v=unname(quantile(x,probs=c(0.01))))
其中垂直線是 1% 分位數。具有 1% 分位數的特定值的小樣本的機會確實非常小。
進一步的例子,我們根據模擬數量和伯努利模式對分位數計算進行參數化,並根據模擬人生的數量繪製分位數:
set.seed (3134) quant <- function(sims, tailmode) { errors <- rnorm(sims) v <- ifelse(runif(sims) <= 0.009, tailmode, 0.00) x <- v + errors return(unname(quantile(x,probs=c(0.01)))) } sims <- seq(100, 20000, len=20) par(mfrow=c(2,2)) plot(sims, Vectorize(quant, c("sims","tailmode"))(sims,-10), col = 2, pch=16, ylim = c(-9, -1), ylab = "", xlab="", main="-10") plot(sims, Vectorize(quant, c("sims","tailmode"))(sims,-5 ), col = 2, pch=16, ylim = c(-9, -1), ylab = "", xlab="", main="-5") plot(sims, Vectorize(quant, c("sims","tailmode"))(sims,-1 ), col = 2, pch=16, ylim = c(-9, -1), ylab = "", xlab="", main="-1") plot(sims, Vectorize(quant, c("sims","tailmode"))(sims, 0 ), col = 2, pch=16, ylim = c(-9, -1), ylab = "", xlab="", main="0")
給
這清楚地表明,您的分佈偏差越小(即伯努利模式增加),計算的 1% 分位數收斂到其模型值的速度越快。
您需要執行這麼多模擬的原因是因為您試圖估計一個發生機率非常小的尾部屬性。
讓我們快速回顧一下包絡計算:99% VaR 將在 1% 的時間內發生。通過設置二項式變數的方式,我們只假設 $ \nu=-10 $ 對 VaR 有貢獻。這種情況發生的機率為 0.009。如果您執行 1% * 0.009 = 11,111 次模擬,您只會期望獲得 1 個尾事件。通過 500,000 次模擬,你會得到 45 個尾部事件,這幾乎正是我所期望的收斂。