<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>VaR on 格物堂</title><link>https://gewutang.cn/tags/var/</link><description>Recent content in VaR on 格物堂</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Fri, 03 Feb 2012 00:00:00 +0000</lastBuildDate><atom:link href="https://gewutang.cn/tags/var/index.xml" rel="self" type="application/rss+xml"/><item><title>R与金融时间序列分析常见问题集</title><link>https://gewutang.cn/2012/02/03/r-and-questions-in-financial-timeseries-analysing/</link><pubDate>Fri, 03 Feb 2012 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2012/02/03/r-and-questions-in-financial-timeseries-analysing/</guid><description>&lt;p&gt;大概四、五个月前，心血来潮打算总结一下COS论坛上关于金融时间序列分析上的常见问题，期许能够形一个集子以方便有需求者查询使用。因先前从未写过书籍，一时难以把握集子的结构便犹豫了很久。后来，无意中发现了《A Discussion of Time Series Objects for R in Finance》这本册子，读罢便决定以该册子的结构为蓝本来总结金融时间序列分析的常见问题集。问题集结构如下:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;基础篇&#10;&lt;ul&gt;&#10;&lt;li&gt;时间序列对象创建&lt;/li&gt;&#10;&lt;li&gt;时间戳操作&lt;/li&gt;&#10;&lt;li&gt;取子集操作&lt;/li&gt;&#10;&lt;li&gt;缺失值处理&lt;/li&gt;&#10;&lt;li&gt;操作效率度量等&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;技术篇&#10;&lt;ul&gt;&#10;&lt;li&gt;R与ARIMA模型&lt;/li&gt;&#10;&lt;li&gt;GARCH族模型&lt;/li&gt;&#10;&lt;li&gt;VaR（Value at Risk）模型&lt;/li&gt;&#10;&lt;li&gt;极值理论模型等&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;目前，基础篇大致完成，技术篇尚未完善，而已完成部分中定有不少错漏之处，希望发现错误的童鞋们能够及时批评指正。此外，本问题集由王晓伟、熊熹、刘剑锋、杨羽提供初稿，由我最终润色完成。感兴趣的人可以在点击&lt;a class="link" href="https://github.com/dengyishuo/dengyishuo.github.com/blob/master/RFinance/FAQ.pdf" target="_blank" rel="noopener"&#10; &gt;FAQ&lt;/a&gt;下载。&lt;/p&gt;&#10;</description></item><item><title>基于极值理论的 VaR 计算及实证分析</title><link>https://gewutang.cn/2010/12/29/var-caculation-and-evt/</link><pubDate>Wed, 29 Dec 2010 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2010/12/29/var-caculation-and-evt/</guid><description>&#10;&#10;&#10;&lt;div id="一引言" class="section level1"&gt;&#10;&lt;h1&gt;一、引言&lt;/h1&gt;&#10;&lt;p&gt;风险价值（VaR）作为衡量金融资产极端损失的核心指标，传统方法（如 GARCH 模型）虽能捕捉波动聚类特性，但对尾部风险的刻画仍依赖于整体分布假设。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;极值理论（Extreme Value Theory, EVT）&lt;/strong&gt; 则直接聚焦于收益率序列的尾部行为，通过对极端值建模突破整体分布限制，更精准地估计极端市场条件下的潜在损失。&lt;/p&gt;&#10;&lt;p&gt;本文以特斯拉（TSLA）股票收益率为例，系统介绍极值理论的核心模型（广义极值分布 GEV、广义帕累托分布 GPD）、参数估计及 VaR 计算流程，并通过 R 语言&lt;code&gt;fExtremes&lt;/code&gt;和&lt;code&gt;evd&lt;/code&gt;包实现实证分析。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div id="二极值理论核心模型" class="section level1"&gt;&#10;&lt;h1&gt;二、极值理论核心模型&lt;/h1&gt;&#10;&lt;p&gt;极值理论通过两类方法刻画极端值分布：&lt;strong&gt;分块最大值法（Block Maxima Method, BMM）&lt;/strong&gt; 基于广义极值分布（GEV），&lt;strong&gt;超限峰值法（Peaks Over Threshold, POT）&lt;/strong&gt; 基于广义帕累托分布（GPD）。其中，POT 因灵活利用数据尾部信息而更常用于 VaR 计算。&lt;/p&gt;&#10;&lt;ol style="list-style-type: decimal"&gt;&#10;&lt;li&gt;广义极值分布（GEV）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;strong&gt;分块最大值法&lt;/strong&gt;将时间序列划分为若干块（如按日、周），取每块内的极端值（最大值或最小值），其渐进分布可统一为 GEV。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;GEV 分布函数&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;G(x; \mu, \sigma, \xi) = \exp\left\{ -\left[1 + \xi \left( \frac{x - \mu}{\sigma} \right) \right]^{-1/\xi} \right\} \tag{1}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;其中：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;span class="math inline"&gt;\(\mu\)&lt;/span&gt; 为位置参数（中心趋势），决定了分布的中心位置，反映极端值的平均水平；&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="math inline"&gt;\(\sigma &amp;gt; 0\)&lt;/span&gt; 为尺度参数（离散程度）；&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="math inline"&gt;\(\xi\)&lt;/span&gt; 为形状参数（决定尾部特性）：&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;若 &lt;span class="math inline"&gt;\(\xi &amp;gt; 0\)&lt;/span&gt; ，则 GEV 为 Frechet 分布（厚尾，如幂律尾）。Frechet 分布具有显著的厚尾特征，概率密度函数呈渐近幂律形式，尾部衰减速度较慢，能更准确捕捉金融市场中极端事件发生概率较高的尾部风险，在 VaR 计算中可更可靠地拟合金融资产收益率极端值。&lt;/p&gt;&#10;&lt;p&gt;若 &lt;span class="math inline"&gt;\(\xi = 0\)&lt;/span&gt; ，则 GEV 为 Gumbel 分布（轻尾，如正态分布）。该分布下极端事件发生概率随偏离均值程度呈指数衰减，数据在均值附近集中程度高，极端值出现频率低，若资产收益符合此分布，表明极端损失发生可能性较小，风险相对可控。&lt;/p&gt;&#10;&lt;p&gt;若 &lt;span class="math inline"&gt;\(\xi &amp;lt; 0\)&lt;/span&gt; ，则 GEV 为 Weibull 分布（有界尾）。该分布下随机变量存在理论上界，极端事件影响有限，在金融市场中若资产价格波动符合此分布，意味着极端损失幅度有上限，对风险管理者设定止损策略有重要参考价值。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;基于 GEV 的 VaR 计算&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;广义极值分布（GEV）作为统一框架，整合了 Gumbel、Weibull 和 Frechet 三种不同尾部特征的分布类型。基于 GEV 的 VaR 计算，通过极大似然估计或矩估计等方法确定形状参数 &lt;span class="math inline"&gt;\(\xi\)&lt;/span&gt; 、位置参数 &lt;span class="math inline"&gt;\(\mu\)&lt;/span&gt; 和尺度参数 &lt;span class="math inline"&gt;\(\sigma\)&lt;/span&gt; ，构建符合数据尾部特征的风险分布模型。&lt;/p&gt;&#10;&lt;p&gt;在给定置信水平 &lt;span class="math inline"&gt;\(1-\alpha\)&lt;/span&gt; 下，VaR 为 GEV 分布的 &lt;span class="math inline"&gt;\(\alpha\)&lt;/span&gt; 分位数：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;VaR_{1-\alpha} = \mu - \frac{\sigma}{\xi} \left[ 1 - (-\ln \alpha)^{-\xi} \right] \quad (\xi \neq 0) \tag{2}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;ol start="2" style="list-style-type: decimal"&gt;&#10;&lt;li&gt;广义帕累托分布（GPD）与 POT 方法&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;strong&gt;POT 方法&lt;/strong&gt;通过设定阈值 &lt;span class="math inline"&gt;\(u\)&lt;/span&gt;，对所有超过 &lt;span class="math inline"&gt;\(u\)&lt;/span&gt; 的极端值（超限值）进行建模，其超出量（&lt;span class="math inline"&gt;\(x - u\)&lt;/span&gt;）的分布可由广义帕累托分布（Generalized Pareto Distribution，GPD）逼近。&lt;/p&gt;&#10;&lt;p&gt;这种方法聚焦于极端事件，能更精准刻画金融市场尾部风险，在金融市场剧烈波动时，可有效捕捉资产价格极端变化，为风险管理者提供重要预警信号，在高风险投资领域应用价值显著。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;GPD 分布函数&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;p&gt;广义帕累托分布是刻画超过某一阈值数据分布的重要工具，在金融风险度量中常用于描述极端损失事件概率分布，其概率密度函数为&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;f(x;\xi,\beta)=\frac{1}{\beta}(1 + \frac{\xi x}{\beta})^{-\frac{1}{\xi}-1}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;其中 &lt;span class="math inline"&gt;\(x \geq 0\)&lt;/span&gt;，&lt;span class="math inline"&gt;\(\beta &amp;gt; 0\)&lt;/span&gt; 是尺度参数，&lt;span class="math inline"&gt;\(\xi\)&lt;/span&gt; 为形状参数，当 &lt;span class="math inline"&gt;\(\xi = 0\)&lt;/span&gt; 时退化为指数分布。&lt;/p&gt;&#10;&lt;p&gt;GPD 分布函数为：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;F(x;\xi,\beta,\mu)=1-\left(1+\frac{\xi(x - \mu)}{\beta}\right)^{-\frac{1}{\xi}}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;其中：&lt;span class="math inline"&gt;\(x\geq\mu，1+\frac{\xi(x - \mu)}{\beta}&amp;gt;0\)&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;其分布函数也可表示为针对超出量的形式：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;\begin{cases}&#10;1 - \left(1 + \xi \frac{y}{\sigma}\right)^{-1/\xi} &amp;amp; \xi \neq 0 \\&#10;1 - \exp\left(-\frac{y}{\sigma}\right) &amp;amp; \xi = 0&#10;\end{cases} \tag{3}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;其中：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;span class="math inline"&gt;\(y = x - u \geq 0\)&lt;/span&gt; 为超出量，代表观测值超过阈值 &lt;span class="math inline"&gt;\(u\)&lt;/span&gt; 的部分，反映极端事件偏离阈值的程度。例如，若阈值 &lt;span class="math inline"&gt;\(u\)&lt;/span&gt; 设为特斯拉股价单日跌幅 5%，某交易日股价下跌 8% 时，超出量 &lt;span class="math inline"&gt;\(y\)&lt;/span&gt; 为 3%。&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;span class="math inline"&gt;\(\sigma &amp;gt; 0\)&lt;/span&gt; 为尺度参数，决定超出量分布的离散程度。&lt;span class="math inline"&gt;\(\sigma\)&lt;/span&gt; 值越大，超出量波动范围越广，投资组合面临的不确定性越高，且其变化与市场宏观环境相关，经济危机期间通常会显著跃升。&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;span class="math inline"&gt;\(\xi\)&lt;/span&gt; 为形状参数（与 GEV 中的 &lt;span class="math inline"&gt;\(\xi\)&lt;/span&gt; 含义相同），&lt;span class="math inline"&gt;\(\xi &amp;gt; 0\)&lt;/span&gt; 表示厚尾，直接影响分布尾部厚度与极端事件发生概率估计。&lt;span class="math inline"&gt;\(\xi\)&lt;/span&gt; 趋近于 0 时，尾部变薄，极端事件概率降低；&lt;span class="math inline"&gt;\(\xi\)&lt;/span&gt; 增大时，极端事件发生可能性显著提升，且在公司重大事件节点往往会出现明显波动。&lt;/p&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;基于 GPD 的 VaR 计算&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;p&gt;设总样本量为 &lt;span class="math inline"&gt;\(n\)&lt;/span&gt;，超限值数量为 &lt;span class="math inline"&gt;\(N_u\)&lt;/span&gt;（超限概率 &lt;span class="math inline"&gt;\(\hat{p} = N_u / n\)&lt;/span&gt;），则置信水平 &lt;span class="math inline"&gt;\(1-\alpha\)&lt;/span&gt; 的 VaR 满足：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;1 - \alpha = (1 - \hat{p}) + \hat{p} \cdot \left[1 - \left(1 + \xi \frac{VaR_{1-\alpha} - u}{\sigma}\right)^{-1/\xi}\right] \tag{4}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;该公式基于全概率公式推导，将整体风险概率分解为阈值以下和阈值以上两部分。等式左边 &lt;span class="math inline"&gt;\(1 - \alpha\)&lt;/span&gt; 为置信水平，右边 &lt;span class="math inline"&gt;\((1 - \hat{p})\)&lt;/span&gt; 表示未超过阈值的概率，第二项刻画了阈值以上部分在 GPD 分布下对风险的贡献。如在 95% 置信水平（&lt;span class="math inline"&gt;\(\alpha=0.05\)&lt;/span&gt;）下，可据此计算特斯拉股票在极端市场条件下的最大潜在损失。&lt;/p&gt;&#10;&lt;p&gt;经代数变换可得：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;VaR_{1-\alpha} = u + \frac{\sigma}{\xi} \left[ \left( \frac{n}{N_u} (1 - \alpha) \right)^{-\xi} - 1 \right] \quad (\xi \neq 0) \tag{5}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;在实际应用中，以特斯拉股价实证分析为例，若总样本量 &lt;span class="math inline"&gt;\(n=1000\)&lt;/span&gt; ，超限值数量 &lt;span class="math inline"&gt;\(N_u=50\)&lt;/span&gt;，阈值 &lt;span class="math inline"&gt;\(u = 0.03\)&lt;/span&gt;，尺度参数 &lt;span class="math inline"&gt;\(\sigma = 0.02\)&lt;/span&gt;，形状参数 &lt;span class="math inline"&gt;\(\xi = 0.1\)&lt;/span&gt;，在 99% 置信水平下（ &lt;span class="math inline"&gt;\(\alpha = 0.01\)&lt;/span&gt; ），代入公式 (5) 计算可得 &lt;span class="math inline"&gt;\(VaR_{0.99} \approx 0.068\)&lt;/span&gt;，即特斯拉股票在 99% 置信水平下的单日最大潜在损失约为 6.8%。&lt;/p&gt;&#10;&lt;p&gt;此公式为风险管理者提供了定量工具，结合历史数据计算的参数和预设置信水平，可快速得出风险价值，为投资组合配置和止损策略制定提供支持。需注意，当 &lt;span class="math inline"&gt;\(\xi\)&lt;/span&gt; 接近 0 时，需采用特殊数值算法确保计算准确性。&lt;/p&gt;&#10;&lt;ol start="3" style="list-style-type: decimal"&gt;&#10;&lt;li&gt;阈值选择与模型适用性&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;阈值的确定&lt;/strong&gt;：阈值 &lt;span class="math inline"&gt;\(u\)&lt;/span&gt; 的选择至关重要，需平衡偏差（ &lt;span class="math inline"&gt;\(u\)&lt;/span&gt; 过小导致非极端值混入）与方差（ &lt;span class="math inline"&gt;\(u\)&lt;/span&gt; 过大导致样本量不足）。常用的确定方法包括：&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;strong&gt;平均超出量函数（Mean Excess Plot）&lt;/strong&gt;：绘制超出量均值与阈值 &lt;span class="math inline"&gt;\(u\)&lt;/span&gt; 的关系图，寻找超出量均值近似线性的区间。此时的阈值 &lt;span class="math inline"&gt;\(u\)&lt;/span&gt; 既能有效分离极端值，又保留足够样本量用于可靠估计。例如分析特斯拉股价数据时，可设定一系列候选阈值，计算对应超出量均值并绘制曲线，选择线性区域内的阈值作为最终 &lt;span class="math inline"&gt;\(u\)&lt;/span&gt; 值。&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hill 图法&lt;/strong&gt;：计算不同阈值下的 Hill 估计量，绘制其与阈值的关系曲线。随着阈值增加，Hill 估计量应趋于稳定，选取稳定区间内的阈值作为合适的 &lt;span class="math inline"&gt;\(u\)&lt;/span&gt; 值，该方法能有效识别复杂尾部特征数据的稳定尾部参数估计区间，增强阈值选择稳健性。&lt;/p&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&lt;/li&gt;&#10;&lt;li&gt;阈值稳定性检验：确保参数 &lt;span class="math inline"&gt;\(\xi\)&lt;/span&gt; 和 &lt;span class="math inline"&gt;\(\sigma\)&lt;/span&gt; 在 &lt;span class="math inline"&gt;\(u\)&lt;/span&gt; 增大时趋于稳定。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div id="三r-语言实证分析tsla-数据" class="section level1"&gt;&#10;&lt;h1&gt;三、R 语言实证分析（TSLA 数据）&#10;&lt;/h1&gt;&#10;&lt;p&gt;以 TSLA 股票收益率为例，采用 POT 方法（GPD）计算极端风险 VaR，步骤如下：&lt;/p&gt;&#10;&lt;div id="数据准备与预处理" class="section level2"&gt;&#10;&lt;h2&gt;1. 数据准备与预处理&lt;/h2&gt;&#10;&lt;p&gt;使用&lt;code&gt;quantmod&lt;/code&gt;获取数据并计算对数收益率（保留损失数据，即负收益率的绝对值）：&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 安装并加载包&#10;if (!require(&amp;quot;quantmod&amp;quot;)) install.packages(&amp;quot;quantmod&amp;quot;)&#10;if (!require(&amp;quot;fExtremes&amp;quot;)) install.packages(&amp;quot;fExtremes&amp;quot;)&#10;if (!require(&amp;quot;evd&amp;quot;)) install.packages(&amp;quot;evd&amp;quot;)&#10;library(quantmod)&#10;library(fExtremes)&#10;library(evd)&#10;library(ggplot2)&#10;library(showtext)&#10;font_add(&amp;quot;SimHei&amp;quot;,&amp;quot;SimHei.ttf&amp;quot;)&#10;showtext_auto()&#10;# 获取TSLA数据（2018-2023年）&#10;getSymbols(&amp;quot;TSLA&amp;quot;, from = &amp;quot;2018-01-01&amp;quot;, to = &amp;quot;2023-12-31&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;TSLA&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;tsla_close &amp;lt;- TSLA$TSLA.Close&#10;ret &amp;lt;- diff(log(tsla_close)) # 对数收益率&#10;loss &amp;lt;- -ret # 损失序列（负收益为损失）&#10;loss &amp;lt;- na.omit(loss)&#10;colnames(loss) &amp;lt;- &amp;quot;TSLA_Loss&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;div id="阈值选择mean-excess-plot" class="section level2"&gt;&#10;&lt;h2&gt;2. 阈值选择（Mean Excess Plot）&lt;/h2&gt;&#10;&lt;p&gt;通过平均超出量函数确定阈值 &lt;span class="math inline"&gt;\(u\)&lt;/span&gt; ：&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 计算平均超出量&#10;u_candidate &amp;lt;- seq(quantile(loss, 0.7), quantile(loss, 0.95), length.out = 20) # 候选阈值&#10;mean_excess &amp;lt;- sapply(u_candidate, function(u) {&#10;excess &amp;lt;- loss[loss &amp;gt; u] - u # 超出量&#10;mean(excess, na.rm = TRUE)&#10;})&#10;# 可视化平均超出量&#10;me_df &amp;lt;- data.frame(u = u_candidate, mean_excess = mean_excess)&#10;ggplot(me_df, aes(x = u, y = mean_excess)) +&#10;geom_line(color = &amp;quot;blue&amp;quot;) +&#10;geom_point() +&#10;labs(title = &amp;quot;平均超出量函数（确定阈值u）&amp;quot;, x = &amp;quot;阈值u&amp;quot;, y = &amp;quot;平均超出量&amp;quot;) +&#10;theme_minimal()&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img src="https://gewutang.cn/2010/12/29/var-caculation-and-evt/index_files/figure-html/unnamed-chunk-2-1.png" width="672" /&gt;&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 选择阈值（如u=0.03，对应约80%分位数）&#10;u &amp;lt;- 0.03&#10;excess &amp;lt;- as.numeric(loss[loss &amp;gt; u] - u) # 超出量序列&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;div id="gpd-参数估计" class="section level2"&gt;&#10;&lt;h2&gt;3. GPD 参数估计&#10;&lt;/h2&gt;&#10;&lt;p&gt;使用&lt;code&gt;evd&lt;/code&gt;包的&lt;code&gt;fpot&lt;/code&gt;函数估计 GPD 的形状参数 &lt;span class="math inline"&gt;\(\xi\)&lt;/span&gt; 和尺度参数 &lt;span class="math inline"&gt;\(\sigma\)&lt;/span&gt; ：&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 拟合GPD模型&#10;gpd_fit &amp;lt;- fpot(as.numeric(loss), threshold = u)&#10;&#10;summary(gpd_fit) # 输出参数估计结果&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Length Class Mode &#10;## estimate 2 -none- numeric &#10;## std.err 2 -none- numeric &#10;## fixed 0 -none- NULL &#10;## param 2 -none- numeric &#10;## deviance 1 -none- numeric &#10;## corr 0 -none- NULL &#10;## var.cov 4 -none- numeric &#10;## convergence 1 -none- character&#10;## counts 2 -none- numeric &#10;## message 0 -none- NULL &#10;## threshold 1 -none- numeric &#10;## cmax 1 -none- logical &#10;## r 0 -none- NULL &#10;## ulow 1 -none- numeric &#10;## rlow 1 -none- numeric &#10;## npp 1 -none- numeric &#10;## nhigh 1 -none- numeric &#10;## nat 1 -none- numeric &#10;## pat 1 -none- numeric &#10;## extind 0 -none- NULL &#10;## data 1508 -none- numeric &#10;## exceedances 244 -none- numeric &#10;## mper 0 -none- NULL &#10;## scale 1 -none- numeric &#10;## call 3 -none- call&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 提取参数&#10;&#10;xi &amp;lt;- gpd_fit$estimate[&amp;quot;shape&amp;quot;] # 形状参数ξ&#10;&#10;sigma &amp;lt;- gpd_fit$estimate[&amp;quot;scale&amp;quot;] # 尺度参数σ&#10;&#10;N &amp;lt;- length(loss) # 总样本量&#10;&#10;Nu &amp;lt;- length(excess) # 超限值数量&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;div id="计算-var-与回测" class="section level2"&gt;&#10;&lt;h2&gt;4. 计算 VaR 与回测&lt;/h2&gt;&#10;&lt;p&gt;基于 GPD 参数计算高置信水平（如 99%、99.5%）的 VaR：&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 定义VaR计算函数（GPD）&#10;&#10;calc_evt_var &amp;lt;- function(conf_level, u, xi, sigma, N, Nu) {&#10;alpha &amp;lt;- 1 - conf_level&#10;term &amp;lt;- (N / Nu * alpha)^(-xi)&#10;&#10;var &amp;lt;- u + (sigma / xi) * (term - 1)&#10;return(var)&#10;&#10;}&#10;# 计算99%和99.5%置信水平的VaR&#10;var_99 &amp;lt;- calc_evt_var(0.99, u, xi, sigma, N, Nu)&#10;var_995 &amp;lt;- calc_evt_var(0.995, u, xi, sigma, N, Nu)&#10;cat(&amp;quot;99% VaR（EVT-GPD）：&amp;quot;, round(var_99, 4), &amp;quot;\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 99% VaR（EVT-GPD）： 0.1115&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;cat(&amp;quot;99.5% VaR（EVT-GPD）：&amp;quot;, round(var_995, 4), &amp;quot;\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 99.5% VaR（EVT-GPD）： 0.1367&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 回测：极端损失超过VaR的比例&#10;extreme_loss &amp;lt;- as.numeric(loss)[loss &amp;gt; u] # 极端损失序列&#10;fail_99 &amp;lt;- mean(extreme_loss &amp;gt; var_99)&#10;cat(&amp;quot;99% VaR失败率：&amp;quot;, round(fail_99 * 100, 2), &amp;quot;%\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 99% VaR失败率： 6.15 %&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;div id="结果可视化" class="section level2"&gt;&#10;&lt;h2&gt;5. 结果可视化&lt;/h2&gt;&#10;&lt;p&gt;对比实际极端损失与 VaR 阈值：&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 可视化极端损失与VaR&#10;extreme_df &amp;lt;- data.frame(&#10;Date = index(loss)[loss &amp;gt; u],&#10;Extreme_Loss = as.numeric(extreme_loss)&#10;)&#10;&#10;ggplot(extreme_df, aes(x = Date, y = Extreme_Loss)) +&#10;geom_point(color = &amp;quot;red&amp;quot;) +&#10;geom_hline(yintercept = var_99, &#10; color = &amp;quot;blue&amp;quot;, &#10; linetype = &amp;quot;dashed&amp;quot;) +&#10;geom_hline(yintercept = var_995, &#10; color = &amp;quot;black&amp;quot;, &#10; linetype = &amp;quot;dashed&amp;quot;) +&#10;&#10;&#10;labs(title = &amp;quot;TSLA极端损失与EVT-GPD VaR&amp;quot;,x = &amp;quot;日期&amp;quot;, y = &amp;quot;极端损失（绝对值）&amp;quot;) +&#10;theme_minimal()&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img src="https://gewutang.cn/2010/12/29/var-caculation-and-evt/index_files/figure-html/unnamed-chunk-5-1.png" width="672" /&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="四结论" class="section level1"&gt;&#10;&lt;h1&gt;四、结论&lt;/h1&gt;&#10;&lt;p&gt;极值理论通过直接建模尾部极端值，避免了对整体分布的依赖，在高置信水平下的 VaR 估计更具优势。实证分析显示：&lt;/p&gt;&#10;&lt;ol style="list-style-type: decimal"&gt;&#10;&lt;li&gt;TSLA 股票的极端损失呈现明显厚尾特性（ &lt;span class="math inline"&gt;\(\xi &amp;gt; 0\)&lt;/span&gt; ），适合用 GPD 建模；&lt;/li&gt;&#10;&lt;li&gt;阈值&lt;span class="math inline"&gt;\(u\)&lt;/span&gt;的选择对结果敏感，需结合平均超出量函数和参数稳定性检验确定；&lt;/li&gt;&#10;&lt;li&gt;与传统 GARCH 模型相比，EVT 方法计算的高置信水平 VaR 更保守，能更好应对 “黑天鹅” 事件。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;未来可结合动态阈值调整或贝叶斯估计，进一步提升 EVT 模型对极端风险的动态跟踪能力。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;注&lt;/strong&gt;：代码中&lt;code&gt;fpot&lt;/code&gt;函数需确保阈值&lt;span class="math inline"&gt;\(u\)&lt;/span&gt;合理（超限值数量建议占总样本的 5%-10%）；若&lt;span class="math inline"&gt;\(\xi\)&lt;/span&gt;接近 0，可简化为指数分布计算 VaR。&lt;/p&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>基于GRACH模型计算VaR</title><link>https://gewutang.cn/2010/12/23/grach-var/</link><pubDate>Thu, 23 Dec 2010 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2010/12/23/grach-var/</guid><description>&#10;&#10;&#10;&lt;div id="一引言" class="section level1"&gt;&#10;&lt;h1&gt;一、引言&lt;/h1&gt;&#10;&lt;p&gt;风险价值（VaR）是衡量金融资产潜在损失的核心指标，但传统方法假设收益率服从独立同分布的正态分布，难以捕捉金融时间序列的 “波动聚类”（volatility clustering）和 “尖峰厚尾” 特性。&lt;/p&gt;&#10;&lt;p&gt;ARCH（自回归条件异方差）模型及扩展的 GARCH（广义自回归条件异方差）模型通过刻画波动率的动态变化，能更精准地拟合收益率分布，从而提升 VaR 估计的可靠性。&lt;/p&gt;&#10;&lt;p&gt;本文以特斯拉（TSLA）股票收益率为例，详细介绍 GARCH 模型的构建、参数估计及 VaR 计算流程，并通过 R 语言quantmod和rgarch包实现实证分析。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div id="二garch-模型理论" class="section level1"&gt;&#10;&lt;h1&gt;二、GARCH 模型理论&lt;/h1&gt;&#10;&lt;div id="arch-模型基础" class="section level2"&gt;&#10;&lt;h2&gt;ARCH 模型基础&lt;/h2&gt;&#10;&lt;p&gt;ARCH 模型假设资产收益率的条件方差依赖于过去的平方残差，其核心是波动率的动态性。&lt;/p&gt;&#10;&lt;p&gt;均值方程：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;r_t = \mu + \epsilon_t \tag{1}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;其中，&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math inline"&gt;\(r_t\)&lt;/span&gt; 为 t 时刻的收益率，&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math inline"&gt;\(\mu\)&lt;/span&gt; 为常数均值，&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math inline"&gt;\(\epsilon_t\)&lt;/span&gt; 为随机扰动项，且 &lt;span class="math inline"&gt;\(\epsilon_t = \sigma_t \cdot z_t\)&lt;/span&gt; （ &lt;span class="math inline"&gt;\(z_t\)&lt;/span&gt; )为独立同分布的随机变量，通常假设 &lt;span class="math inline"&gt;\(z_t \sim N(0,1)\)&lt;/span&gt; ）。&lt;/p&gt;&#10;&lt;p&gt;条件方差方程（ARCH (q)）：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[\sigma_t^2 = \omega + \alpha_1 \epsilon_{t-1}^2 + \alpha_2 \epsilon_{t-2}^2 + ... + \alpha_q \epsilon_{t-q}^2 \tag{2}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;其中，&lt;span class="math inline"&gt;\(\sigma_t^2\)&lt;/span&gt; 为 t 时刻的条件方差，&lt;span class="math inline"&gt;\(\omega &amp;gt; 0\)&lt;/span&gt; ，&lt;span class="math inline"&gt;\(\alpha_i \geq 0\)&lt;/span&gt; （保证方差非负），q为 ARCH 阶数。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div id="garch-模型扩展" class="section level2"&gt;&#10;&lt;h2&gt;GARCH 模型扩展&lt;/h2&gt;&#10;&lt;p&gt;GARCH 模型在 ARCH 基础上引入过去的条件方差项，简化了高阶 ARCH 模型的参数估计。最常用的 GARCH (p,q) 模型形式为：&lt;/p&gt;&#10;&lt;p&gt;均值方程：同式（1）&lt;/p&gt;&#10;&lt;p&gt;条件方差方程（GARCH (p,q)）：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;\sigma_t^2 = \omega + \sum_{i=1}^p \beta_i \sigma_{t-i}^2 + \sum_{j=1}^q \alpha_j \epsilon_{t-j}^2 \tag{3}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;其中，p为 GARCH 阶数（滞后条件方差项），q为 ARCH 阶数（滞后平方残差项），且 &lt;span class="math inline"&gt;\(\omega &amp;gt; 0\)&lt;/span&gt; ， &lt;span class="math inline"&gt;\(\beta_i \geq 0\)&lt;/span&gt; ， &lt;span class="math inline"&gt;\(\alpha_j \geq 0\)&lt;/span&gt; ， &lt;span class="math inline"&gt;\(\sum_{i=1}^p \beta_i + \sum_{j=1}^q \alpha_j &amp;lt; 1\)&lt;/span&gt; （保证方差平稳）。&lt;/p&gt;&#10;&lt;p&gt;实际应用中，GARCH (1,1) 模型因简洁且拟合效果好而被广泛使用：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;\sigma_t^2 = \omega + \beta_1 \sigma_{t-1}^2 + \alpha_1 \epsilon_{t-1}^2 \tag{4}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;模型扩展与分布假设变种模型：通过修改条件方差方程可得到 EGARCH（指数 GARCH，捕捉杠杆效应）、IGARCH（积分 GARCH，非平稳波动率）等。&lt;/p&gt;&#10;&lt;p&gt;分布假设：为捕捉 “尖峰厚尾”，可假设扰动项 &lt;span class="math inline"&gt;\(z_t\)&lt;/span&gt; 服从学生 t 分布（GARCH-t）、广义误差分布（GARCH-GED）等，而非正态分布。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div id="基于-garch-模型的-var-计算" class="section level2"&gt;&#10;&lt;h2&gt;基于 GARCH 模型的 VaR 计算&lt;/h2&gt;&#10;&lt;p&gt;给定置信水平 &lt;span class="math inline"&gt;\(1-\alpha\)&lt;/span&gt; （如 95%、99%），VaR 定义为：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;VaR_t = \mu_t + \sigma_t \cdot z_\alpha \tag{5}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;其中：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math inline"&gt;\(\mu_t\)&lt;/span&gt; 为 t 时刻的条件均值（通常假设为 0 或常数）；&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math inline"&gt;\(\sigma_t\)&lt;/span&gt; 为 GARCH 模型预测的条件标准差；&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math inline"&gt;\(z_\alpha\)&lt;/span&gt; 为扰动项分布的 &lt;span class="math inline"&gt;\(\alpha\)&lt;/span&gt; 分位数（如正态分布下 95% 置信水平的 &lt;span class="math inline"&gt;\(z_\alpha = -1.645\)&lt;/span&gt; ）。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="三r-语言实证分析tsla-数据" class="section level1"&gt;&#10;&lt;h1&gt;三、R 语言实证分析（TSLA 数据）&lt;/h1&gt;&#10;&lt;ol style="list-style-type: decimal"&gt;&#10;&lt;li&gt;数据准备与预处理使用 quantmod 获取 TSLA 股票数据并计算对数收益率：&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 安装并加载包&#10;if (!require(&amp;quot;quantmod&amp;quot;)) install.packages(&amp;quot;quantmod&amp;quot;)&#10;if (!require(&amp;quot;rugarch&amp;quot;)) install.packages(&amp;quot;rugarch&amp;quot;)&#10;if (!require(&amp;quot;ggplot2&amp;quot;)) install.packages(&amp;quot;ggplot2&amp;quot;)&#10;library(quantmod)&#10;library(rugarch)&#10;library(ggplot2)&#10;&#10;# 获取TSLA数据（2018-2023年）&#10;getSymbols(&amp;quot;TSLA&amp;quot;, from = &amp;quot;2018-01-01&amp;quot;, to = &amp;quot;2023-12-31&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;TSLA&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;tsla_close &amp;lt;- TSLA$TSLA.Close # 提取收盘价&#10;ret &amp;lt;- diff(log(tsla_close)) # 计算对数收益率&#10;ret &amp;lt;- na.omit(ret) # 去除缺失值&#10;colnames(ret) &amp;lt;- &amp;quot;TSLA_Return&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;ol start="2" style="list-style-type: decimal"&gt;&#10;&lt;li&gt;拟合 GARCH 模型以 GARCH (1,1) 为例，分别假设正态分布、t 分布和 GED 分布：&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 定义模型规范（正态分布）&#10;garch_spec_norm &amp;lt;- ugarchspec(&#10; variance.model = list(model = &amp;quot;sGARCH&amp;quot;, garchOrder = c(1,1)), # 标准GARCH(1,1)&#10; mean.model = list(armaOrder = c(0,0)), # 均值模型为常数（无ARMA项）&#10; distribution.model = &amp;quot;norm&amp;quot; # 正态分布&#10;)&#10;&#10;# 拟合模型&#10;garch_fit_norm &amp;lt;- ugarchfit(spec = garch_spec_norm, data = ret)&#10;print(garch_fit_norm) # 输出参数估计结果&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## *---------------------------------*&#10;## * GARCH Model Fit *&#10;## *---------------------------------*&#10;## &#10;## Conditional Variance Dynamics &#9;&#10;## -----------------------------------&#10;## GARCH Model&#9;: sGARCH(1,1)&#10;## Mean Model&#9;: ARFIMA(0,0,0)&#10;## Distribution&#9;: norm &#10;## &#10;## Optimal Parameters&#10;## ------------------------------------&#10;## Estimate Std. Error t value Pr(&amp;gt;|t|)&#10;## mu 0.001551 0.000945 1.6407 0.100852&#10;## omega 0.000080 0.000025 3.1932 0.001407&#10;## alpha1 0.066008 0.013489 4.8936 0.000001&#10;## beta1 0.883325 0.026129 33.8057 0.000000&#10;## &#10;## Robust Standard Errors:&#10;## Estimate Std. Error t value Pr(&amp;gt;|t|)&#10;## mu 0.001551 0.001042 1.4883 0.136684&#10;## omega 0.000080 0.000041 1.9324 0.053305&#10;## alpha1 0.066008 0.020564 3.2098 0.001328&#10;## beta1 0.883325 0.040170 21.9898 0.000000&#10;## &#10;## LogLikelihood : 2784.519 &#10;## &#10;## Information Criteria&#10;## ------------------------------------&#10;## &#10;## Akaike -3.6877&#10;## Bayes -3.6736&#10;## Shibata -3.6877&#10;## Hannan-Quinn -3.6824&#10;## &#10;## Weighted Ljung-Box Test on Standardized Residuals&#10;## ------------------------------------&#10;## statistic p-value&#10;## Lag[1] 0.02525 0.8737&#10;## Lag[2*(p+q)+(p+q)-1][2] 0.92656 0.5227&#10;## Lag[4*(p+q)+(p+q)-1][5] 2.41996 0.5230&#10;## d.o.f=0&#10;## H0 : No serial correlation&#10;## &#10;## Weighted Ljung-Box Test on Standardized Squared Residuals&#10;## ------------------------------------&#10;## statistic p-value&#10;## Lag[1] 0.06154 0.8041&#10;## Lag[2*(p+q)+(p+q)-1][5] 1.91852 0.6378&#10;## Lag[4*(p+q)+(p+q)-1][9] 3.32230 0.7048&#10;## d.o.f=2&#10;## &#10;## Weighted ARCH LM Tests&#10;## ------------------------------------&#10;## Statistic Shape Scale P-Value&#10;## ARCH Lag[3] 0.1339 0.500 2.000 0.7144&#10;## ARCH Lag[5] 0.1515 1.440 1.667 0.9765&#10;## ARCH Lag[7] 1.3871 2.315 1.543 0.8437&#10;## &#10;## Nyblom stability test&#10;## ------------------------------------&#10;## Joint Statistic: 0.7741&#10;## Individual Statistics: &#10;## mu 0.1583&#10;## omega 0.1017&#10;## alpha1 0.1429&#10;## beta1 0.0778&#10;## &#10;## Asymptotic Critical Values (10% 5% 1%)&#10;## Joint Statistic: &#9; 1.07 1.24 1.6&#10;## Individual Statistic:&#9; 0.35 0.47 0.75&#10;## &#10;## Sign Bias Test&#10;## ------------------------------------&#10;## t-value prob sig&#10;## Sign Bias 0.1675 0.8670 &#10;## Negative Sign Bias 0.3152 0.7527 &#10;## Positive Sign Bias 0.5054 0.6134 &#10;## Joint Effect 0.4957 0.9198 &#10;## &#10;## &#10;## Adjusted Pearson Goodness-of-Fit Test:&#10;## ------------------------------------&#10;## group statistic p-value(g-1)&#10;## 1 20 99.19 7.510e-13&#10;## 2 30 112.84 7.843e-12&#10;## 3 40 122.45 1.505e-10&#10;## 4 50 129.67 3.238e-09&#10;## &#10;## &#10;## Elapsed time : 0.1193922&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 扩展：拟合GARCH-t和GARCH-GED&#10;garch_spec_t &amp;lt;- ugarchspec(variance.model = list(model = &amp;quot;sGARCH&amp;quot;, garchOrder = c(1,1)),&#10; mean.model = list(armaOrder = c(0,0)),&#10; distribution.model = &amp;quot;std&amp;quot;) # 学生t分布&#10;garch_fit_t &amp;lt;- ugarchfit(spec = garch_spec_t, data = ret)&#10;&#10;garch_spec_ged &amp;lt;- ugarchspec(variance.model = list(model = &amp;quot;sGARCH&amp;quot;, garchOrder = c(1,1)),&#10; mean.model = list(armaOrder = c(0,0)),&#10; distribution.model = &amp;quot;ged&amp;quot;) # GED分布&#10;garch_fit_ged &amp;lt;- ugarchfit(spec = garch_spec_ged, data = ret)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;ol start="3" style="list-style-type: decimal"&gt;&#10;&lt;li&gt;模型参数解读&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;GARCH (1,1) 模型的核心参数为：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math inline"&gt;\(\omega\)&lt;/span&gt; ：常数项（长期方差水平）；&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math inline"&gt;\(\alpha_1\)&lt;/span&gt; ：ARCH 项系数（过去平方残差的影响）；&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math inline"&gt;\(\beta_1\)&lt;/span&gt; ：GARCH 项系数（过去波动率的影响）；&lt;/p&gt;&#10;&lt;p&gt;若 &lt;span class="math inline"&gt;\(\alpha_1 + \beta_1 &amp;lt; 1\)&lt;/span&gt; ，说明波动率平稳。&lt;/p&gt;&#10;&lt;ol start="4" style="list-style-type: decimal"&gt;&#10;&lt;li&gt;计算 VaR基于拟合模型预测条件波动率，并计算不同置信水平的 VaR：&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 提取条件标准差（在样内预测）&#10;sigma_norm &amp;lt;- sigma(garch_fit_norm) # 正态分布GARCH的条件标准差&#10;&#10;# 定义分位数函数（计算z_alpha）&#10;quantile_fun &amp;lt;- function(conf_level, dist) {&#10; alpha &amp;lt;- 1 - conf_level&#10; if (dist == &amp;quot;norm&amp;quot;) {&#10; return(qnorm(alpha)) # 正态分布分位数&#10; } else if (dist == &amp;quot;std&amp;quot;) {&#10; nu &amp;lt;- coef(garch_fit_t)[&amp;quot;shape&amp;quot;] # 学生t分布自由度&#10; return(qt(alpha, df = nu))&#10; } else if (dist == &amp;quot;ged&amp;quot;) {&#10; nu &amp;lt;- coef(garch_fit_ged)[&amp;quot;shape&amp;quot;] # GED分布形状参数&#10; return(qged(alpha, shape = nu))&#10; }&#10;}&#10;&#10;# 计算95%和99%置信水平的VaR（以正态分布为例）&#10;conf_levels &amp;lt;- c(0.95, 0.99)&#10;z_95 &amp;lt;- quantile_fun(0.95, &amp;quot;norm&amp;quot;)&#10;z_99 &amp;lt;- quantile_fun(0.99, &amp;quot;norm&amp;quot;)&#10;&#10;vaR_95_norm &amp;lt;- 0 + sigma_norm * z_95 # 假设条件均值为0&#10;vaR_99_norm &amp;lt;- 0 + sigma_norm * z_99&#10;&#10;# 整理结果（取绝对值，损失为正）&#10;vaR_df &amp;lt;- data.frame(&#10; Date = index(ret),&#10; Return = as.numeric(ret),&#10; VaR_95 = abs(vaR_95_norm),&#10; VaR_99 = abs(vaR_99_norm)&#10;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;ol start="5" style="list-style-type: decimal"&gt;&#10;&lt;li&gt;结果可视化与回测&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 可视化收益率与VaR&#10;ggplot(vaR_df, aes(x = Date)) +&#10; geom_line(aes(y = Return, color = &amp;quot;收益率&amp;quot;), alpha = 0.7) +&#10; geom_line(aes(y = VaR_95, color = &amp;quot;95% VaR&amp;quot;), linetype = &amp;quot;dashed&amp;quot;) +&#10; geom_line(aes(y = VaR_99, color = &amp;quot;99% VaR&amp;quot;), linetype = &amp;quot;dashed&amp;quot;) +&#10; labs(title = &amp;quot;TSLA收益率与GARCH模型VaR&amp;quot;,&#10; y = &amp;quot;收益率/损失&amp;quot;, x = &amp;quot;日期&amp;quot;, color = &amp;quot;指标&amp;quot;) +&#10; theme_minimal()&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img src="https://gewutang.cn/2010/12/23/grach-var/index_files/figure-html/unnamed-chunk-4-1.png" width="672" /&gt;&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 回测：计算失败率（实际损失超过VaR的比例）&#10;fail_95 &amp;lt;- mean(vaR_df$Return &amp;lt; -vaR_df$VaR_95, na.rm = TRUE)&#10;fail_99 &amp;lt;- mean(vaR_df$Return &amp;lt; -vaR_df$VaR_99, na.rm = TRUE)&#10;cat(&amp;quot;95% VaR失败率：&amp;quot;, round(fail_95 * 100, 2), &amp;quot;%\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 95% VaR失败率： 4.64 %&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;cat(&amp;quot;99% VaR失败率：&amp;quot;, round(fail_99 * 100, 2), &amp;quot;%\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 99% VaR失败率： 1.59 %&lt;/code&gt;&lt;/pre&gt;&#10;&lt;ol start="6" style="list-style-type: decimal"&gt;&#10;&lt;li&gt;不同模型的 VaR 对比&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;可对比 GARCH-t、GARCH-GED 与正态 GARCH 的 VaR 结果，通常非正态分布假设下的 VaR 更大，更保守：&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 计算GARCH-t的VaR（95%置信水平）&#10;sigma_t &amp;lt;- sigma(garch_fit_t)&#10;z_95_t &amp;lt;- quantile_fun(0.95, &amp;quot;std&amp;quot;)&#10;vaR_95_t &amp;lt;- abs(sigma_t * z_95_t)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;四、结论&lt;/p&gt;&#10;&lt;p&gt;GARCH 模型通过捕捉波动率的动态变化，显著提升了 VaR 估计的准确性，尤其在市场波动剧烈时期（如 TSLA 股价大幅波动阶段）。&lt;/p&gt;&#10;&lt;p&gt;实证显示：TSLA 收益率存在明显的波动聚类特性，GARCH (1,1) 能有效拟合；基于 t 分布或 GED 分布的 GARCH 模型计算的 VaR 更能反映尾部风险，失败率更接近理论置信水平；实际应用中可根据资产特性选择模型变种（如 EGARCH 捕捉杠杆效应）或分布假设。&lt;/p&gt;&#10;&lt;p&gt;未来可结合滚动窗口预测或压力测试，进一步优化 VaR 的动态跟踪能力。&lt;/p&gt;&#10;&lt;p&gt;注：代码中rugarch包的ugarchspec和ugarchfit函数需注意模型收敛性，若不收敛可调整初始值或模型阶数；回测失败率若显著偏离理论值（如 95% 置信水平下失败率 &amp;gt; 7%），需重新调整模型。​&lt;/p&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>基于混合正态分布的 VaR 计算</title><link>https://gewutang.cn/2010/12/21/var-mixture-of-norms/</link><pubDate>Tue, 21 Dec 2010 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2010/12/21/var-mixture-of-norms/</guid><description>&#10;&#10;&#10;&lt;div id="一引言" class="section level1"&gt;&#10;&lt;h1&gt;一、引言&lt;/h1&gt;&#10;&lt;p&gt;风险价值（Value at Risk, 简称 VaR ）是金融风险管理中衡量市场风险的核心指标，其定义为：在一定置信水平下，某一金融资产或组合在未来特定时间段内可能遭受的最大潜在损失。传统 VaR 计算多假设资产收益率服从正态分布，但实际金融时间序列往往呈现 “尖峰厚尾” 特性（峰度高于正态分布，尾部概率更大），导致正态分布假设下的 VaR 低估尾部风险。&lt;/p&gt;&#10;&lt;p&gt;混合正态模型（Mixture of Normals Model）通过将收益率分布拟合为多个正态分布的加权组合，能够有效捕捉尖峰厚尾特征，从而更精准地估计 VaR。&lt;/p&gt;&#10;&lt;p&gt;本文详细介绍混合正态模型的构建、参数估计及 VaR 计算方法，并通过 R 语言进行实现。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div id="二混合正态模型理论模型定义" class="section level1"&gt;&#10;&lt;h1&gt;二、混合正态模型理论模型定义&lt;/h1&gt;&#10;&lt;p&gt;假设金融资产收益率X服从两成分混合正态分布，其概率密度函数（PDF）为：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;f(x; \Theta) = \alpha \cdot \phi(x; \mu_1, \sigma_1^2) + (1-\alpha) \cdot \phi(x; \mu_2, \sigma_2^2) \tag{1}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;其中：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math inline"&gt;\(\Theta = (\alpha, \mu_1, \sigma_1^2, \mu_2, \sigma_2^2)\)&lt;/span&gt; 为待估参数；&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math inline"&gt;\(\alpha \in (0,1)\)&lt;/span&gt; 是第一成分的权重；&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math inline"&gt;\(\phi(x; \mu, \sigma^2) = \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)\)&lt;/span&gt; 为正态分布密度函数；&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math inline"&gt;\(\mu_1\)&lt;/span&gt; , &lt;span class="math inline"&gt;\(\mu_2\)&lt;/span&gt; 分别为两成分的均值；&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math inline"&gt;\(\sigma_1^2\)&lt;/span&gt; , &lt;span class="math inline"&gt;\(\sigma_2^2\)&lt;/span&gt; 分别为两成分的方差。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;参数估计&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;我们可以采用极大似然估计（MLE）求解参数 &lt;span class="math inline"&gt;\(\Theta\)&lt;/span&gt; 。设样本观测值为&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;x_1, x_2, ..., x_n&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;则似然函数为：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;L(\Theta) = \prod_{i=1}^n \left[ \alpha \cdot \phi(x_i; \mu_1, \sigma_1^2) + (1-\alpha) \cdot \phi(x_i; \mu_2, \sigma_2^2) \right] \tag{2}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;取对数似然函数并最大化：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;\ln L(\Theta) = \sum_{i=1}^n \ln\left[ \alpha \cdot \phi(x_i; \mu_1, \sigma_1^2) + (1-\alpha) \cdot \phi(x_i; \mu_2, \sigma_2^2) \right] \tag{3}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;实际求解中，通常采用 EM 算法（期望最大化算法）迭代计算参数估计值。&lt;/p&gt;&#10;&lt;div id="基于混合正态模型的-var-计算" class="section level2"&gt;&#10;&lt;h2&gt;基于混合正态模型的 VaR 计算&lt;/h2&gt;&#10;&lt;p&gt;对于置信水平 &lt;span class="math inline"&gt;\(1-\beta\)&lt;/span&gt; （如 95%、99%），VaR 定义为满足以下条件的损失阈值：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;P(X \leq -VaR) = \beta \tag{4}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;其中 X 为资产收益率，负号表示损失（对多头头寸而言）。结合混合正态分布的累积分布函数（CDF），式（4）可写为：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;F(-VaR) = \alpha \cdot \Phi\left(-VaR; \mu_1, \sigma_1^2\right) + (1-\alpha) \cdot \Phi\left(-VaR; \mu_2, \sigma_2^2\right) = \beta \tag{5} \label{eq:mix-normal}&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;其中 &lt;span class="math inline"&gt;\(\Phi(\cdot)\)&lt;/span&gt; 为正态分布的 CDF。&lt;/p&gt;&#10;&lt;p&gt;通过数值方法（如二分法）求解式 &lt;span class="math inline"&gt;\(\eqref{eq:mix-normal}\)&lt;/span&gt; ，即可得到混合正态模型下的 VaR。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="三r-语言实证分析" class="section level1"&gt;&#10;&lt;h1&gt;三、R 语言实证分析&lt;/h1&gt;&#10;&lt;p&gt;以下通过 R 语言实现基于混合正态模型的 VaR 计算，使用quantmod获取金融数据，mixtools拟合混合正态模型。&lt;/p&gt;&#10;&lt;ol style="list-style-type: decimal"&gt;&#10;&lt;li&gt;加载所需包&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 安装并加载包&#10;if (!require(&amp;quot;quantmod&amp;quot;)) install.packages(&amp;quot;quantmod&amp;quot;)&#10;if (!require(&amp;quot;mixtools&amp;quot;)) install.packages(&amp;quot;mixtools&amp;quot;)&#10;if (!require(&amp;quot;ggplot2&amp;quot;)) install.packages(&amp;quot;ggplot2&amp;quot;)&#10;library(quantmod)&#10;library(mixtools)&#10;library(ggplot2)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;ol start="2" style="list-style-type: decimal"&gt;&#10;&lt;li&gt;获取金融数据并计算收益率&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;以特斯拉公司的股价为例，计算其对数收益率：&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 获取数据（近5年）&#10;getSymbols(&amp;quot;TSLA&amp;quot;, from = &amp;quot;2023-01-01&amp;quot;, to = &amp;quot;2025-01-01&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;TSLA&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;tsla &amp;lt;- na.omit(Cl(TSLA)) # 提取收盘价并去除缺失值&#10;&#10;# 计算对数收益率&#10;returns &amp;lt;- diff(log(tsla))&#10;returns &amp;lt;- na.omit(returns) # 去除NA值&#10;colnames(returns) &amp;lt;- &amp;quot;收益率&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;ol start="3" style="list-style-type: decimal"&gt;&#10;&lt;li&gt;拟合混合正态模型&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;使用 mixtools::normalmixEM&lt;a href="#fn1" class="footnote-ref" id="fnref1"&gt;&lt;sup&gt;1&lt;/sup&gt;&lt;/a&gt; 拟合两成分混合正态分布：&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 拟合混合正态模型（2个成分）&#10;set.seed(123) # 设置随机种子，保证结果可复现&#10;mix_model &amp;lt;- normalmixEM(returns, k = 2, maxit = 1000)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## number of iterations= 146&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 输出参数估计结果&#10;cat(&amp;quot;混合正态模型参数估计：\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 混合正态模型参数估计：&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;cat(paste(&amp;quot;权重 α =&amp;quot;, round(mix_model$lambda[1], 4), &amp;quot;\n&amp;quot;))&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 权重 α = 0.839&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;cat(paste(&amp;quot;成分1：均值 μ1 =&amp;quot;, round(mix_model$mu[1], 6), &#10; &amp;quot;，标准差 σ1 =&amp;quot;, round(mix_model$sigma[1], 6), &amp;quot;\n&amp;quot;))&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 成分1：均值 μ1 = 0.001422 ，标准差 σ1 = 0.027839&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;cat(paste(&amp;quot;成分2：均值 μ2 =&amp;quot;, round(mix_model$mu[2], 6), &#10; &amp;quot;，标准差 σ2 =&amp;quot;, round(mix_model$sigma[2], 6), &amp;quot;\n&amp;quot;))&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 成分2：均值 μ2 = 0.008931 ，标准差 σ2 = 0.063941&lt;/code&gt;&lt;/pre&gt;&#10;&lt;ol start="4" style="list-style-type: decimal"&gt;&#10;&lt;li&gt;定义混合正态分布的 CDF 及 VaR 计算函数&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 混合正态分布的累积分布函数（CDF）&#10;mix_normal_cdf &amp;lt;- function(x, alpha, mu1, sigma1, mu2, sigma2) {&#10; alpha * pnorm(x, mean = mu1, sd = sigma1) + &#10; (1 - alpha) * pnorm(x, mean = mu2, sd = sigma2)&#10;}&#10;&#10;# 用二分法求解VaR&#10;var_mixture_normal &amp;lt;- function(conf_level, alpha, mu1, sigma1, mu2, sigma2, data) {&#10; beta &amp;lt;- 1 - conf_level # 尾概率&#10; # 确定搜索区间（基于数据的极值）&#10; lower &amp;lt;- min(data) * 2&#10; upper &amp;lt;- 0 # VaR为损失，对应收益率分布的左侧尾部&#10; # 二分法迭代求解&#10; for (i in 1:1000) {&#10; mid &amp;lt;- (lower + upper) / 2&#10; cdf_val &amp;lt;- mix_normal_cdf(mid, alpha, mu1, sigma1, mu2, sigma2)&#10; if (cdf_val &amp;lt; beta) {&#10; lower &amp;lt;- mid&#10; } else {&#10; upper &amp;lt;- mid&#10; }&#10; if (abs(cdf_val - beta) &amp;lt; 1e-6) break # 精度满足时停止&#10; }&#10; return(-upper) # 返回VaR（损失值为正）&#10;}&lt;/code&gt;&lt;/pre&gt;&#10;&lt;ol start="5" style="list-style-type: decimal"&gt;&#10;&lt;li&gt;计算 VaR 并与传统方法对比&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 计算95%和99%置信水平下的VaR&#10;conf_levels &amp;lt;- c(0.95, 0.99)&#10;var_results &amp;lt;- sapply(conf_levels, function(cl) {&#10; var_mixture_normal(conf_level = cl,&#10; alpha = mix_model$lambda[1],&#10; mu1 = mix_model$mu[1],&#10; sigma1 = mix_model$sigma[1],&#10; mu2 = mix_model$mu[2],&#10; sigma2 = mix_model$sigma[2],&#10; data = returns)&#10;})&#10;&#10;# 输出VaR结果&#10;cat(&amp;quot;\n混合正态模型VaR计算结果：\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## 混合正态模型VaR计算结果：&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;for (i in 1:length(conf_levels)) {&#10; cat(paste(conf_levels[i] * 100, &amp;quot;%置信水平下的VaR =&amp;quot;, &#10; round(var_results[i], 6), &amp;quot;\n&amp;quot;))&#10;}&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 95 %置信水平下的VaR = 0.052193 &#10;## 99 %置信水平下的VaR = 0.090665&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 与传统正态分布假设下的VaR对比&#10;var_normal_95 &amp;lt;- quantile(returns, probs = 0.05) # 正态假设下95% VaR&#10;var_normal_99 &amp;lt;- quantile(returns, probs = 0.01) # 正态假设下99% VaR&#10;cat(&amp;quot;\n传统正态分布假设下的VaR：\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## 传统正态分布假设下的VaR：&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;cat(paste(&amp;quot;95%置信水平下的VaR =&amp;quot;, round(-as.numeric(var_normal_95), 6), &amp;quot;\n&amp;quot;))&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 95%置信水平下的VaR = 0.051618&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;cat(paste(&amp;quot;99%置信水平下的VaR =&amp;quot;, round(-as.numeric(var_normal_99), 6), &amp;quot;\n&amp;quot;))&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 99%置信水平下的VaR = 0.091924&lt;/code&gt;&lt;/pre&gt;&#10;&lt;ol start="6" style="list-style-type: decimal"&gt;&#10;&lt;li&gt;可视化结果&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 绘制收益率分布直方图及混合正态模型拟合曲线&#10;p &amp;lt;- ggplot(data = as.data.frame(returns), aes(x = 收益率)) +&#10; geom_histogram(aes(y = after_stat(density)), &#10; bins = 50, &#10; fill = &amp;quot;lightblue&amp;quot;, &#10; color = &amp;quot;black&amp;quot;, &#10; alpha = 0.7) +&#10; stat_function(fun = function(x) { # 混合正态模型密度曲线&#10; mix_model$lambda[1] * dnorm(x, &#10; mean = mix_model$mu[1], &#10; sd = mix_model$sigma[1]) +&#10; mix_model$lambda[2] * dnorm(x, &#10; mean = mix_model$mu[2], &#10; sd = mix_model$sigma[2])&#10; }, color = &amp;quot;red&amp;quot;, linewidth = 1) +&#10; geom_vline(xintercept = -var_results[1], &#10; color = &amp;quot;blue&amp;quot;, &#10; linetype = &amp;quot;dashed&amp;quot;, &#10; linewidth = 1) +&#10; geom_vline(xintercept = -var_results[2], &#10; color = &amp;quot;purple&amp;quot;, &#10; linetype = &amp;quot;dashed&amp;quot;, &#10; linewidth = 1) +&#10; labs(title = &amp;quot;特斯拉收益率分布与混合正态模型拟合&amp;quot;,&#10; x = &amp;quot;对数收益率&amp;quot;, y = &amp;quot;密度&amp;quot;) +&#10; theme_minimal()&#10;print(p)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img src="https://gewutang.cn/2010/12/21/var-mixture-of-norms/index_files/figure-html/unnamed-chunk-6-1.png" width="672" /&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div id="四结论" class="section level1"&gt;&#10;&lt;h1&gt;四、结论&lt;/h1&gt;&#10;&lt;p&gt;混合正态模型通过捕捉金融数据的尖峰厚尾特性，能够更准确地估计 VaR，相比传统正态分布假设更贴合实际风险特征。&lt;/p&gt;&#10;&lt;p&gt;实证结果显示，在高置信水平（如 99%）下，混合模型计算的 VaR 通常更高，更能反映极端损失的可能性，为风险管理提供更稳健的参考。实际应用中，可根据数据特征调整混合成分数量（如 3 个成分），或结合其他统计方法（如 GARCH 模型）进一步优化波动率的动态特性。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="footnotes footnotes-end-of-document"&gt;&#10;&lt;hr /&gt;&#10;&lt;ol&gt;&#10;&lt;li id="fn1"&gt;&lt;p&gt;上述代码中，normalmixEM 可能需要多次迭代才能收敛，若结果不稳定可调整 maxit 参数；VaR 计算的二分法精度可通过迭代次数或误差阈值调整。&lt;a href="#fnref1" class="footnote-back"&gt;↩︎&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>指数加权移动平均法计算VaR</title><link>https://gewutang.cn/2010/12/18/caculate-var-via-ewma/</link><pubDate>Sat, 18 Dec 2010 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2010/12/18/caculate-var-via-ewma/</guid><description>&lt;h2 id="指数加权移动平均法"&gt;&lt;a href="#%e6%8c%87%e6%95%b0%e5%8a%a0%e6%9d%83%e7%a7%bb%e5%8a%a8%e5%b9%b3%e5%9d%87%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;指数加权移动平均法&#10;&lt;/h2&gt;&lt;p&gt;指数移动加权法是一种动态波动率建模方法，其核心思想是通过赋予历史收益率随时间衰减的权重，捕捉金融时间序列的波动率聚集特征。与传统等权重方法不同，EWMA通过引入衰减因子 &lt;code&gt;\(\lambda\)&lt;/code&gt;，其中: &lt;code&gt;\(\left(0\le\lambda\le1\right)\)&lt;/code&gt; ，使近期数据对波动率估计的影响呈指数级递增，而远期数据影响逐渐衰减（通常取 &lt;code&gt;\(\lambda = 0.94\)&lt;/code&gt; ，基于RiskMetrics建议）。这种机制使得模型能更快响应市场突变，尤其适用于高频风险监测。&lt;/p&gt;&#10;&lt;h3 id="单资产情形"&gt;&lt;a href="#%e5%8d%95%e8%b5%84%e4%ba%a7%e6%83%85%e5%bd%a2" class="header-anchor"&gt;&lt;/a&gt;单资产情形&#10;&lt;/h3&gt;&lt;h4 id="1-数据准备与收益率计算"&gt;&lt;a href="#1-%e6%95%b0%e6%8d%ae%e5%87%86%e5%a4%87%e4%b8%8e%e6%94%b6%e7%9b%8a%e7%8e%87%e8%ae%a1%e7%ae%97" class="header-anchor"&gt;&lt;/a&gt;1. 数据准备与收益率计算&#10;&lt;/h4&gt;&lt;ul&gt;&#10;&lt;li&gt;获取资产历史收盘价序列${P_t}$，计算对数收益率：&#10;$$&#10;r_t = \ln\left(\frac{P_t}{P_{t-1}}\right)&#10;$$&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="2-动态方差估计"&gt;&lt;a href="#2-%e5%8a%a8%e6%80%81%e6%96%b9%e5%b7%ae%e4%bc%b0%e8%ae%a1" class="header-anchor"&gt;&lt;/a&gt;2. 动态方差估计&#10;&lt;/h4&gt;&lt;p&gt;EWMA通过指数衰减因子 &lt;code&gt;\(\lambda\)&lt;/code&gt; 赋予近期数据更高权重，捕捉波动率的时变特性：&lt;/p&gt;&#10;&lt;p&gt;$$&#10;\sigma_t^2 = \lambda \sigma_{t-1}^2 + (1-\lambda) r_{t-1}^2&#10;$$&lt;/p&gt;&#10;&lt;p&gt;其中：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;\(\lambda \in (0,1)\)&lt;/code&gt;：衰减因子（典型值0.94）&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(r_{t-1}\)&lt;/code&gt;：前一日收益率&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(\sigma_{t-1}^2\)&lt;/code&gt;：前一日波动率&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="3-var计算正态假设"&gt;&lt;a href="#3-var%e8%ae%a1%e7%ae%97%e6%ad%a3%e6%80%81%e5%81%87%e8%ae%be" class="header-anchor"&gt;&lt;/a&gt;3. VaR计算（正态假设）&#10;&lt;/h4&gt;&lt;ul&gt;&#10;&lt;li&gt;单日VaR公式：&#10;$$&#10;\text{VaR}_{\alpha} = -\mu + \sigma_t \Phi^{-1}(1-\alpha)&#10;$$&#10;其中$\mu$为收益率均值（短期内可忽略），$\Phi^{-1}$为标准正态分布分位数（如95%置信水平对应1.645）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="4-多期var调整"&gt;&lt;a href="#4-%e5%a4%9a%e6%9c%9fvar%e8%b0%83%e6%95%b4" class="header-anchor"&gt;&lt;/a&gt;4. 多期VaR调整&#10;&lt;/h4&gt;&lt;ul&gt;&#10;&lt;li&gt;持有期$T$天的VaR扩展：&#10;$$&#10;\text{VaR}&lt;em&gt;T = \text{VaR}&lt;/em&gt;{1d} \times \sqrt{T}&#10;$$&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h5 id="代码实现"&gt;&lt;a href="#%e4%bb%a3%e7%a0%81%e5%ae%9e%e7%8e%b0" class="header-anchor"&gt;&lt;/a&gt;代码实现&#10;&lt;/h5&gt;&lt;pre&gt;&lt;code class="language-r"&gt;# 加载必要包&#10;if (!require(&amp;quot;quantmod&amp;quot;)) install.packages(&amp;quot;quantmod&amp;quot;) # 金融数据获取&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：quantmod&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：xts&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：zoo&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## 载入程序包：'zoo'&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following objects are masked from 'package:base':&#10;## &#10;## as.Date, as.Date.numeric&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：TTR&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Registered S3 method overwritten by 'quantmod':&#10;## method from&#10;## as.zoo.data.frame zoo&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;if (!require(&amp;quot;ggplot2&amp;quot;)) install.packages(&amp;quot;ggplot2&amp;quot;) # 可视化&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：ggplot2&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(quantmod)&#10;library(ggplot2)&#10;&#10;# 获取标普500指数数据（示例）&#10;getSymbols(&amp;quot;^GSPC&amp;quot;, src = &amp;quot;yahoo&amp;quot;, from = &amp;quot;2020-01-01&amp;quot;, to = Sys.Date())&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;GSPC&amp;quot;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 计算对数收益率&#10;returns &amp;lt;- na.omit(ROC(Cl(GSPC))) # 使用收盘价计算&#10;colnames(returns) &amp;lt;- &amp;quot;Daily_Return&amp;quot;&#10;&#10;# 参数设置&#10;lambda &amp;lt;- 0.94 # 衰减因子&#10;portfolio_value &amp;lt;- 1e6 # 组合价值100万美元&#10;confidence_level &amp;lt;- 0.95 # 置信水平&#10;z_score &amp;lt;- qnorm(1 - confidence_level) # 分位数（正态分布）&#10;&#10;# 初始化EWMA方差序列&#10;n &amp;lt;- length(returns)&#10;ewma_var &amp;lt;- numeric(n)&#10;ewma_var[1] &amp;lt;- var(returns) # 初始化为样本方差&#10;&#10;# 递归计算EWMA方差&#10;for (i in 2:n) {&#10; ewma_var[i] &amp;lt;- lambda * ewma_var[i-1] + (1 - lambda) * returns[i-1]^2&#10;}&#10;&#10;# 转换为年化波动率&#10;ewma_vol &amp;lt;- sqrt(ewma_var * 252)&#10;&#10;# 计算VaR序列&#10;VaR &amp;lt;- portfolio_value * z_score * ewma_vol&#10;&#10;# 获取最新VaR值&#10;latest_VaR &amp;lt;- tail(VaR, 1)&#10;cat(&amp;quot;最新EWMA VaR（95%置信度）:&amp;quot;, round(latest_VaR, 2), &amp;quot;美元\n&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 最新EWMA VaR（95%置信度）: -581585.7 美元&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 可视化结果&#10;results &amp;lt;- data.frame(&#10; Date = index(GSPC)[-1], &#10; Volatility = ewma_vol,&#10; VaR = VaR&#10;)&#10;&#10;ggplot(results, aes(x = Date)) +&#10; geom_line(aes(y = Volatility, color = &amp;quot;波动率&amp;quot;)) +&#10; geom_line(aes(y = VaR / 1e4, color = &amp;quot;VaR（万美元）&amp;quot;)) +&#10; scale_y_continuous(&#10; name = &amp;quot;年化波动率&amp;quot;,&#10; sec.axis = sec_axis(~ . * 1e4, name = &amp;quot;VaR（美元）&amp;quot;)&#10; ) +&#10; labs(title = &amp;quot;EWMA波动率与VaR动态变化&amp;quot;,&#10; color = &amp;quot;指标类型&amp;quot;) +&#10; theme_minimal()&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;img src="https://gewutang.cn/2010/12/18/caculate-var-via-ewma/index_files/figure-html/unnamed-chunk-1-1.png" width="672" /&gt;&#10;&lt;h3 id="多元资产组合ewma-var建模原理与r实现"&gt;&lt;a href="#%e5%a4%9a%e5%85%83%e8%b5%84%e4%ba%a7%e7%bb%84%e5%90%88ewma-var%e5%bb%ba%e6%a8%a1%e5%8e%9f%e7%90%86%e4%b8%8er%e5%ae%9e%e7%8e%b0" class="header-anchor"&gt;&lt;/a&gt;多元资产组合EWMA-VaR建模原理与R实现&#10;&lt;/h3&gt;&lt;h4 id="协方差矩阵动态更新"&gt;&lt;a href="#%e5%8d%8f%e6%96%b9%e5%b7%ae%e7%9f%a9%e9%98%b5%e5%8a%a8%e6%80%81%e6%9b%b4%e6%96%b0" class="header-anchor"&gt;&lt;/a&gt;协方差矩阵动态更新&#10;&lt;/h4&gt;&lt;p&gt;多资产EWMA模型通过递归更新协方差矩阵捕捉资产间相关性的时变特征:&lt;/p&gt;&#10;&lt;p&gt;$$&#10;\Sigma_t = \lambda \Sigma_{t-1} + (1-\lambda)\mathbf{r}&lt;em&gt;{t-1}\mathbf{r}&lt;/em&gt;{t-1}^\top&#10;$$&lt;/p&gt;&#10;&lt;p&gt;其中：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;\(\mathbf{r}_{t-1}\)&lt;/code&gt;：前一期资产收益率向量（$n \times 1$）&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(\Sigma_{t-1}\)&lt;/code&gt;：前一期协方差矩阵（$n \times n$）&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(\lambda\)&lt;/code&gt;：衰减因子（建议值0.94）:ml-citation{ref=&amp;ldquo;4,8&amp;rdquo; data=&amp;ldquo;citationList&amp;rdquo;}&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="组合var计算流程"&gt;&lt;a href="#%e7%bb%84%e5%90%88var%e8%ae%a1%e7%ae%97%e6%b5%81%e7%a8%8b" class="header-anchor"&gt;&lt;/a&gt;组合VaR计算流程&#10;&lt;/h4&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;步骤&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;计算公式&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;组合方差&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;\(\sigma_p^2 = \mathbf{w}^\top \Sigma_t \mathbf{w}\)&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;年化波动率&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;\(\sigma_p^{\text{annual}} = \sigma_p \sqrt{252}\)&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;VaR&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;\(VaR_{\alpha} = Z_{1-\alpha} \times P_0 \times \sigma_p^{\text{annual}}\)&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;\(\mathbf{w}\)&lt;/code&gt;：资产权重向量（需满足$\sum w_i=1$）&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(P_0\)&lt;/code&gt;：组合总价值&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="r语言完整实现"&gt;&lt;a href="#r%e8%af%ad%e8%a8%80%e5%ae%8c%e6%95%b4%e5%ae%9e%e7%8e%b0" class="header-anchor"&gt;&lt;/a&gt;R语言完整实现&#10;&lt;/h4&gt;&lt;pre&gt;&lt;code class="language-r"&gt;# 加载必要库&#10;library(quantmod) # 多元金融数据获取&#10;library(ggplot2) # 可视化&#10;library(reshape2) # 数据重塑&#10;&#10;# 获取三大股指数据&#10;symbols &amp;lt;- c(&amp;quot;^GSPC&amp;quot;, &amp;quot;^IXIC&amp;quot;, &amp;quot;^DJI&amp;quot;) # 标普500、纳斯达克、道琼斯&#10;getSymbols(symbols, from = &amp;quot;2020-01-01&amp;quot;, to = Sys.Date())&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;GSPC&amp;quot; &amp;quot;IXIC&amp;quot; &amp;quot;DJI&amp;quot;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 合并收盘价并计算对数收益率&#10;prices &amp;lt;- na.omit(merge(Cl(GSPC), Cl(IXIC), Cl(DJI)))&#10;returns &amp;lt;- na.omit(ROC(prices)) &#10;colnames(returns) &amp;lt;- c(&amp;quot;SP500&amp;quot;, &amp;quot;NASDAQ&amp;quot;, &amp;quot;DJI&amp;quot;)&#10;&#10;# 参数设置&#10;lambda &amp;lt;- 0.94 # 衰减因子&#10;weights &amp;lt;- c(0.5, 0.3, 0.2) # 资产权重向量&#10;portfolio_value &amp;lt;- 1e7 # 组合价值（美元）&#10;conf_level &amp;lt;- 0.95 # 置信水平&#10;&#10;# 初始化协方差矩阵&#10;n_assets &amp;lt;- ncol(returns)&#10;n_obs &amp;lt;- nrow(returns)&#10;covar &amp;lt;- array(dim = c(n_assets, n_assets, n_obs))&#10;covar[,,1] &amp;lt;- cov(returns) # 初始协方差矩阵&#10;&#10;# 递归更新协方差矩阵&#10;for (i in 2:n_obs) {&#10; r_prev &amp;lt;- as.numeric(returns[i-1, ])&#10; covar[,,i] &amp;lt;- lambda * covar[,,i-1] + (1 - lambda) * outer(r_prev, r_prev)&#10;}&#10;&#10;# 计算组合波动率&#10;port_var &amp;lt;- sapply(1:n_obs, function(i) {&#10; t(weights) %*% covar[,,i] %*% weights&#10;})&#10;annual_vol &amp;lt;- sqrt(port_var * 252)&#10;&#10;# 计算VaR序列&#10;z_score &amp;lt;- qnorm(conf_level)&#10;VaR_series &amp;lt;- -portfolio_value * z_score * annual_vol&#10;&#10;# 输出最新VaR&#10;cat(&amp;quot;Latest Portfolio EWMA VaR (95%):&amp;quot;, &#10; round(tail(VaR_series, 1), 2), &amp;quot;USD\n&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Latest Portfolio EWMA VaR (95%): -6013901 USD&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 可视化协方差矩阵变化&#10;cov_df &amp;lt;- data.frame(&#10; Date = index(returns),&#10; SP500_NASDAQ = sapply(1:n_obs, function(i) covar[1,2,i]),&#10; SP500_DJI = sapply(1:n_obs, function(i) covar[1,3,i]),&#10; NASDAQ_DJI = sapply(1:n_obs, function(i) covar[2,3,i])&#10;)&#10;cov_long &amp;lt;- melt(cov_df, id.vars = &amp;quot;Date&amp;quot;)&#10;&#10;ggplot(cov_long, aes(x = Date, y = value, color = variable)) +&#10; geom_line(alpha = 0.7) +&#10; labs(title = &amp;quot;协方差动态变化趋势&amp;quot;, y = &amp;quot;协方差值&amp;quot;) +&#10; theme_minimal()&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;img src="https://gewutang.cn/2010/12/18/caculate-var-via-ewma/index_files/figure-html/unnamed-chunk-2-1.png" width="672" /&gt;&#10;</description></item><item><title>VaR和方差协方差方法及R语言</title><link>https://gewutang.cn/2010/12/17/var-caculation-via-variance-covariance-method/</link><pubDate>Fri, 17 Dec 2010 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2010/12/17/var-caculation-via-variance-covariance-method/</guid><description>&lt;h2 id="方差-协方差法"&gt;&lt;a href="#%e6%96%b9%e5%b7%ae-%e5%8d%8f%e6%96%b9%e5%b7%ae%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;方差-协方差法&#10;&lt;/h2&gt;&lt;p&gt;方差-协方差法是一种基于资产收益率正态性假设的VaR计算方法。其核心思想是通过历史数据估计资产收益率的均值、方差和协方差矩阵，构建投资组合收益率的概率分布，继而计算VaR值。&lt;/p&gt;&#10;&lt;p&gt;具体流程可分为以下三步：&lt;/p&gt;&#10;&lt;p&gt;首先，计算资产收益率的协方差矩阵以衡量风险关联；其次，根据投资组合权重计算组合收益率的期望值和标准差；最后，在给定置信水平下，利用正态分布分位数确定VaR值。例如，在95%置信水平下，单日VaR可表示为组合市值的绝对值乘以其标准差再乘1.645（对应正态分布左尾5%分位数）。该方法计算效率高，但对非线性风险和非正态分布敏感。多日VaR可通过时间平方根法则调整，即单日VaR乘 &lt;code&gt;\(\sqrt{T}\)&lt;/code&gt; 得到。&lt;/p&gt;&#10;&lt;h2 id="r代码实现"&gt;&lt;a href="#r%e4%bb%a3%e7%a0%81%e5%ae%9e%e7%8e%b0" class="header-anchor"&gt;&lt;/a&gt;R代码实现&#10;&lt;/h2&gt;&lt;pre&gt;&lt;code class="language-r"&gt;# 加载必要包&#10;library(quantmod)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：xts&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：zoo&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## 载入程序包：'zoo'&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following objects are masked from 'package:base':&#10;## &#10;## as.Date, as.Date.numeric&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：TTR&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Registered S3 method overwritten by 'quantmod':&#10;## method from&#10;## as.zoo.data.frame zoo&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(PerformanceAnalytics)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## 载入程序包：'PerformanceAnalytics'&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following object is masked from 'package:graphics':&#10;## &#10;## legend&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(ggplot2)&#10;library(dplyr)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## ######################### Warning from 'xts' package ##########################&#10;## # #&#10;## # The dplyr lag() function breaks how base R's lag() function is supposed to #&#10;## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or #&#10;## # source() into this session won't work correctly. #&#10;## # #&#10;## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #&#10;## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop #&#10;## # dplyr from breaking base R's lag() function. #&#10;## # #&#10;## # Code in packages is not affected. It's protected by R's namespace mechanism #&#10;## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning. #&#10;## # #&#10;## ###############################################################################&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## 载入程序包：'dplyr'&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following objects are masked from 'package:xts':&#10;## &#10;## first, last&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following objects are masked from 'package:stats':&#10;## &#10;## filter, lag&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following objects are masked from 'package:base':&#10;## &#10;## intersect, setdiff, setequal, union&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 1. 下载股票数据（示例使用苹果、微软、亚马逊）&#10;symbols &amp;lt;- c(&amp;quot;AAPL&amp;quot;, &amp;quot;MSFT&amp;quot;, &amp;quot;AMZN&amp;quot;)&#10;getSymbols(symbols, src = &amp;quot;yahoo&amp;quot;, from = &amp;quot;2022-01-01&amp;quot;, to = Sys.Date())&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;AAPL&amp;quot; &amp;quot;MSFT&amp;quot; &amp;quot;AMZN&amp;quot;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 2. 提取收盘价并合并&#10;prices &amp;lt;- merge(Cl(AAPL), Cl(MSFT), Cl(AMZN)) %&amp;gt;% na.omit()&#10;colnames(prices) &amp;lt;- symbols&#10;&#10;# 3. 计算对数收益率&#10;returns &amp;lt;- na.omit(Return.calculate(prices, method = &amp;quot;log&amp;quot;))&#10;&#10;# 4. 设定投资组合参数&#10;weights &amp;lt;- c(0.3, 0.4, 0.3) # 组合权重&#10;conf_level &amp;lt;- 0.95 # 置信水平&#10;portfolio_value &amp;lt;- 1e6 # 组合价值（美元）&#10;&#10;# 5. 计算协方差矩阵与组合标准差&#10;cov_matrix &amp;lt;- cov(returns)&#10;port_sd &amp;lt;- sqrt(t(weights) %*% cov_matrix %*% weights)&#10;&#10;# 6. 计算单日VaR&#10;var_1d &amp;lt;- abs(portfolio_value * qnorm(1 - conf_level) * port_sd)&#10;&#10;# 7. 计算5日VaR（时间平方根法则）&#10;var_5d &amp;lt;- var_1d * sqrt(5)&#10;&#10;# 8. 可视化VaR分布&#10;ggplot(data = data.frame(Returns = as.numeric(returns %*% weights)), &#10; aes(x = Returns)) +&#10; geom_histogram(aes(y = ..density..), bins = 50, fill = &amp;quot;steelblue&amp;quot;, alpha = 0.7) +&#10; geom_vline(xintercept = -var_1d/portfolio_value, color = &amp;quot;red&amp;quot;, &#10; linetype = &amp;quot;dashed&amp;quot;, size = 1) +&#10; stat_function(fun = dnorm, args = list(mean = mean(returns %*% weights),&#10; sd = sd(returns %*% weights)), color = &amp;quot;darkgreen&amp;quot;) +&#10; labs(title = &amp;quot;Portfolio Returns Distribution with VaR&amp;quot;,&#10; x = &amp;quot;Daily Returns&amp;quot;, y = &amp;quot;Density&amp;quot;) +&#10; annotate(&amp;quot;text&amp;quot;, x = -var_1d/portfolio_value, y = 15, &#10; label = paste0(&amp;quot;95% 1d VaR: $&amp;quot;, round(var_1d)), color = &amp;quot;red&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.&#10;## ℹ Please use `linewidth` instead.&#10;## This warning is displayed once every 8 hours.&#10;## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was&#10;## generated.&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.&#10;## ℹ Please use `after_stat(density)` instead.&#10;## This warning is displayed once every 8 hours.&#10;## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was&#10;## generated.&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;img src="https://gewutang.cn/2010/12/17/var-caculation-via-variance-covariance-method/index_files/figure-html/unnamed-chunk-1-1.png" width="672" /&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 输出结果&#10;cat(&amp;quot;单日VaR（95%置信度）:&amp;quot;, round(var_1d), &amp;quot;美元\n&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 单日VaR（95%置信度）: 28894 美元&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;cat(&amp;quot;5日VaR（95%置信度）:&amp;quot;, round(var_5d), &amp;quot;美元&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 5日VaR（95%置信度）: 64609 美元&#10;&lt;/code&gt;&lt;/pre&gt;&#10;</description></item><item><title>VaR和蒙特卡洛模拟法</title><link>https://gewutang.cn/2010/12/16/var-calculation-via-montecarlo-simulation/</link><pubDate>Thu, 16 Dec 2010 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2010/12/16/var-calculation-via-montecarlo-simulation/</guid><description>&lt;h2 id="蒙特卡洛模拟法"&gt;&lt;a href="#%e8%92%99%e7%89%b9%e5%8d%a1%e6%b4%9b%e6%a8%a1%e6%8b%9f%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;蒙特卡洛模拟法&#10;&lt;/h2&gt;&lt;p&gt;蒙特卡洛模拟法是一种基于随机抽样和统计模拟的数值计算方法，其通过生成大量随机样本，利用概率统计理论估计复杂问题的近似解。该方法由数学家冯·诺伊曼和乌拉姆于20世纪40年代在核武器研制项目中首次提出。蒙特卡洛模拟法也可以用来计算投资组合的VaR。&lt;/p&gt;&#10;&lt;p&gt;在应用蒙特卡洛模拟法计算VaR时，首先根据投资组合的历史特征，总结投资组合收益率对应的可能分布并提取该分布对应的核心参数；再以这些核心参数为基础，结合特定分布模拟出一系列符合要求的伪随机数作为假想的未来数据；最后，以这些“假想的未来数据”作为研究对象计算出VaR值。&lt;/p&gt;&#10;&lt;h2 id="蒙特卡洛模拟法计算单资产var"&gt;&lt;a href="#%e8%92%99%e7%89%b9%e5%8d%a1%e6%b4%9b%e6%a8%a1%e6%8b%9f%e6%b3%95%e8%ae%a1%e7%ae%97%e5%8d%95%e8%b5%84%e4%ba%a7var" class="header-anchor"&gt;&lt;/a&gt;蒙特卡洛模拟法计算单资产VaR&#10;&lt;/h2&gt;&lt;p&gt;基于R语言应用蒙特卡洛模拟法计算VaR的代码如下:&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 加载必要包&#10;if (!require(&amp;quot;quantmod&amp;quot;)) install.packages(&amp;quot;quantmod&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：quantmod&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：xts&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：zoo&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## 载入程序包：'zoo'&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following objects are masked from 'package:base':&#10;## &#10;## as.Date, as.Date.numeric&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：TTR&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Registered S3 method overwritten by 'quantmod':&#10;## method from&#10;## as.zoo.data.frame zoo&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;if (!require(&amp;quot;MASS&amp;quot;)) install.packages(&amp;quot;MASS&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：MASS&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(quantmod)&#10;library(MASS)&#10;library(dplyr)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## ######################### Warning from 'xts' package ##########################&#10;## # #&#10;## # The dplyr lag() function breaks how base R's lag() function is supposed to #&#10;## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or #&#10;## # source() into this session won't work correctly. #&#10;## # #&#10;## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #&#10;## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop #&#10;## # dplyr from breaking base R's lag() function. #&#10;## # #&#10;## # Code in packages is not affected. It's protected by R's namespace mechanism #&#10;## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning. #&#10;## # #&#10;## ###############################################################################&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## 载入程序包：'dplyr'&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following object is masked from 'package:MASS':&#10;## &#10;## select&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following objects are masked from 'package:xts':&#10;## &#10;## first, last&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following objects are masked from 'package:stats':&#10;## &#10;## filter, lag&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following objects are masked from 'package:base':&#10;## &#10;## intersect, setdiff, setequal, union&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 获取苹果公司股票数据（过去2年）&#10;getSymbols(&amp;quot;AAPL&amp;quot;, src = &amp;quot;yahoo&amp;quot;, from = as.Date(&amp;quot;2023-05-01&amp;quot;), to = as.Date(Sys.Date()))&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;AAPL&amp;quot;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 计算对数收益率&#10;returns &amp;lt;- na.omit(ROC(Cl(AAPL))) &#10;colnames(returns) &amp;lt;- &amp;quot;AAPL_Return&amp;quot;&#10;&#10;# 参数设置&#10;set.seed(123)&#10;n_sim &amp;lt;- 10000 # 模拟次数&#10;confidence_level &amp;lt;- 0.95&#10;portfolio_value &amp;lt;- 1e6 # 组合价值100万美元&#10;&#10;# 估计收益率参数&#10;mu &amp;lt;- mean(returns)&#10;sigma &amp;lt;- sd(returns)&#10;&#10;# 蒙特卡洛模拟（正态分布）&#10;sim_normal &amp;lt;- rnorm(n_sim, mean = mu, sd = sigma)&#10;portfolio_loss_normal &amp;lt;- portfolio_value * (1 - exp(sim_normal)) # 对数收益转换为价格变动&#10;&#10;# 蒙特卡洛模拟（t分布）&#10;&#10;# 计算VaR&#10;var_normal &amp;lt;- quantile(portfolio_loss_normal, probs = confidence_level)&#10;&#10;# 格式化输出&#10;cat(&amp;quot;蒙特卡洛模拟VaR（正态分布假设）:&amp;quot;, round(var_normal, 2), &amp;quot;USD\n&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 蒙特卡洛模拟VaR（正态分布假设）: 27011.97 USD&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 可视化比较&#10;hist(portfolio_loss_normal, breaks = 50, main = &amp;quot;正态分布模拟损失&amp;quot;, &#10; xlab = &amp;quot;损失金额(USD)&amp;quot;, col = &amp;quot;lightblue&amp;quot;)&#10;abline(v = var_normal, col = &amp;quot;red&amp;quot;, lwd = 2)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;img src="https://gewutang.cn/2010/12/16/var-calculation-via-montecarlo-simulation/index_files/figure-html/single-1.png" width="672" /&gt;&#10;&lt;p&gt;也可以将模拟的分布确定为以下分布：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;偏正态分布&lt;/li&gt;&#10;&lt;li&gt;偏t分布&lt;/li&gt;&#10;&lt;li&gt;广义误差分布&lt;/li&gt;&#10;&lt;li&gt;偏广义误差分布&lt;/li&gt;&#10;&lt;li&gt;混合正态分布&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="蒙特卡洛模拟计算多资产投资组合var"&gt;&lt;a href="#%e8%92%99%e7%89%b9%e5%8d%a1%e6%b4%9b%e6%a8%a1%e6%8b%9f%e8%ae%a1%e7%ae%97%e5%a4%9a%e8%b5%84%e4%ba%a7%e6%8a%95%e8%b5%84%e7%bb%84%e5%90%88var" class="header-anchor"&gt;&lt;/a&gt;蒙特卡洛模拟计算多资产投资组合VaR&#10;&lt;/h2&gt;&lt;p&gt;蒙特卡洛模拟通过以下步骤实现多资产VaR计算:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;历史数据获取：通过quantmod获取真实资产价格数据&lt;/li&gt;&#10;&lt;li&gt;参数估计：计算资产收益率的均值向量和协方差矩阵&lt;/li&gt;&#10;&lt;li&gt;路径生成：生成服从多元正态分布的模拟收益率路径&lt;/li&gt;&#10;&lt;li&gt;组合估值：根据权重计算组合价值变化&lt;/li&gt;&#10;&lt;li&gt;损失分布：统计模拟损失的分位数得到VaR&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;## 环境配置与数据获取&#10;# ----------------------&#10;# 加载必要包&#10;# ----------------------&#10;library(ggplot2)&#10;# library(foreach)&#10;# library(doParallel)&#10;library(Matrix)&#10;library(matrixcalc)&#10;&#10;# ----------------------&#10;# 参数设置&#10;# ----------------------&#10;symbols &amp;lt;- c(&amp;quot;AAPL&amp;quot;, &amp;quot;GOOG&amp;quot;, &amp;quot;MSFT&amp;quot;, &amp;quot;AMZN&amp;quot;) # 资产列表&#10;weights &amp;lt;- c(0.3, 0.3, 0.2, 0.2) # 投资权重&#10;V0 &amp;lt;- 1000000 # 初始组合价值（美元）&#10;n_sim &amp;lt;- 100000 # 模拟次数&#10;alpha &amp;lt;- 0.99 # 置信水平&#10;T_days &amp;lt;- 10 # 持有期（天）&#10;start_date &amp;lt;- &amp;quot;2020-01-01&amp;quot;&#10;end_date &amp;lt;- format(Sys.Date(), &amp;quot;%Y-%m-%d&amp;quot;) # 动态获取最新数据&#10;&#10;# ----------------------&#10;# 获取真实历史数据&#10;# ----------------------&#10;getSymbols(symbols, src = &amp;quot;yahoo&amp;quot;, from = start_date, to = end_date)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;AAPL&amp;quot; &amp;quot;GOOG&amp;quot; &amp;quot;MSFT&amp;quot; &amp;quot;AMZN&amp;quot;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 提取调整后收盘价并计算日收益率&#10;prices &amp;lt;- do.call(merge, lapply(symbols, function(x) Ad(get(x))))&#10;# 替换原returns计算代码&#10;returns &amp;lt;- ROC(prices, type = &amp;quot;discrete&amp;quot;)&#10;&#10;# 添加数据清洗&#10;returns&amp;lt;- apply(returns, 2, function(x) {&#10; x[is.infinite(x)] &amp;lt;- NA&#10; na.omit(x)&#10;})&#10;&#10;# 验证数据完整性&#10;if (any(is.na(returns)) || any(is.infinite(returns))) {&#10; stop(&amp;quot;数据清洗失败，仍存在缺失值或无穷值&amp;quot;)&#10;}&#10;&#10; &#10;## 参数估计与路径生成（增强）&#10;&#10;# ----------------------&#10;# 计算统计参数（带时间调整）&#10;# ----------------------&#10;mu &amp;lt;- colMeans(returns) * T_days # 持有期收益率均值&#10;sigma &amp;lt;- cov(returns) * T_days&#10;&#10;robust_sigma &amp;lt;- function(sigma, eps=1e-8) {&#10; eig &amp;lt;- eigen(sigma)&#10; ev &amp;lt;- pmax(eig$values, eps) # 特征值下限保护&#10; sigma_robust &amp;lt;- eig$vectors %*% diag(ev) %*% t(eig$vectors)&#10; return(as.matrix(nearPD(sigma_robust, keepDiag=TRUE)$mat))&#10;}&#10;&#10;sigma &amp;lt;- robust_sigma(sigma)&#10;&#10;# 协方差矩阵正定性修正&#10;# 矩阵条件数校验&#10;if (kappa(sigma) &amp;gt; 1e6) warning(&amp;quot;协方差矩阵条件数过高，建议降维处理&amp;quot;)&#10;&#10;# 特征值范围验证&#10;eigen_values &amp;lt;- eigen(sigma)$values&#10;if (min(eigen_values) &amp;lt; 1e-6) stop(&amp;quot;矩阵修正失败&amp;quot;)&#10;&#10;# ----------------------&#10;# 蒙特卡洛模拟&#10;# ----------------------&#10;set.seed(123)&#10;&#10;sim_returns &amp;lt;- MASS::mvrnorm(n_sim, mu, sigma)&#10;portfolio_returns &amp;lt;- sim_returns %*% weights&#10;losses &amp;lt;- -V0 * portfolio_returns&#10;&#10;# ----------------------&#10;# 三维可视化（带ES标注）&#10;# ----------------------&#10;### 风险指标计算与可视化（最终修正版）&#10;&#10;# ----------------------&#10;# 风险指标计算&#10;# ----------------------&#10;VaR &amp;lt;- quantile(losses, probs=alpha,na.rm=TRUE)&#10;ES &amp;lt;- mean(losses[losses &amp;gt;= VaR])&#10;&#10;# ----------------------&#10;# 增强可视化&#10;# ----------------------&#10;&#10;# 生成精确breaks参数&#10;br &amp;lt;- pretty(range(losses), n=100)&#10;if (length(br) &amp;lt; 2) br &amp;lt;- seq(min(losses), max(losses), length.out=100)&#10;&#10;loss_plot &amp;lt;- ggplot(data.frame(Loss=losses), aes(x=Loss)) +&#10; geom_histogram(aes(y=..density..), breaks=br, fill=&amp;quot;#69b3a2&amp;quot;, alpha=0.7) +&#10; geom_vline(xintercept=VaR, color=&amp;quot;red&amp;quot;, linetype=&amp;quot;dashed&amp;quot;, size=1) +&#10; geom_vline(xintercept=ES, color=&amp;quot;blue&amp;quot;, linetype=&amp;quot;dotted&amp;quot;, size=1) +&#10; geom_density(color=&amp;quot;darkblue&amp;quot;, size=0.8, adjust=1.5) + # 调整核密度估计带宽&#10; labs(title=paste(&amp;quot;多资产组合损失分布 (&amp;quot;,T_days,&amp;quot;天持有期)&amp;quot;),&#10; x=&amp;quot;损失金额（美元）&amp;quot;, y=&amp;quot;密度&amp;quot;) +&#10; theme_minimal(base_size=12) +&#10; theme(&#10; plot.title=element_text(hjust=0.5, face=&amp;quot;bold&amp;quot;),&#10; panel.grid.major=element_line(color=&amp;quot;gray90&amp;quot;),&#10; panel.grid.minor=element_blank()&#10; )&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.&#10;## ℹ Please use `linewidth` instead.&#10;## This warning is displayed once every 8 hours.&#10;## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was&#10;## generated.&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 动态计算标注位置&#10;plot_data &amp;lt;- ggplot_build(loss_plot)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.&#10;## ℹ Please use `after_stat(density)` instead.&#10;## This warning is displayed once every 8 hours.&#10;## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was&#10;## generated.&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;max_density &amp;lt;- max(plot_data$data[[1]]$density)&#10;&#10;loss_plot &amp;lt;- loss_plot +&#10; annotate(&amp;quot;segment&amp;quot;, &#10; x=VaR, xend=VaR, &#10; y=0, yend=0.65*max_density,&#10; color=&amp;quot;red&amp;quot;, linetype=&amp;quot;dashed&amp;quot;) +&#10; annotate(&amp;quot;label&amp;quot;, &#10; x=VaR, y=0.7*max_density,&#10; label=paste0(alpha*100, &amp;quot;% VaR\n$&amp;quot;, format(round(VaR), big.mark=&amp;quot;,&amp;quot;)),&#10; color=&amp;quot;red&amp;quot;, fill=&amp;quot;white&amp;quot;, size=4) +&#10; annotate(&amp;quot;segment&amp;quot;,&#10; x=ES, xend=ES,&#10; y=0, yend=0.55*max_density,&#10; color=&amp;quot;blue&amp;quot;, linetype=&amp;quot;dotted&amp;quot;) +&#10; annotate(&amp;quot;label&amp;quot;,&#10; x=ES, y=0.6*max_density,&#10; label=paste0(&amp;quot;Expected Shortfall\n$&amp;quot;, format(round(ES), big.mark=&amp;quot;,&amp;quot;)),&#10; color=&amp;quot;blue&amp;quot;, fill=&amp;quot;white&amp;quot;, size=4)&#10;&#10;print(loss_plot)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;img src="https://gewutang.cn/2010/12/16/var-calculation-via-montecarlo-simulation/index_files/figure-html/trible-1.png" width="672" /&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# ----------------------&#10;# 结果输出&#10;# ----------------------&#10;cat(sprintf(&amp;quot;\n【增强版蒙特卡洛模拟结果】(%d天持有期)\n&amp;quot;, T_days))&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## 【增强版蒙特卡洛模拟结果】(10天持有期)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;cat(&amp;quot;----------------------------------------\n&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## ----------------------------------------&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;cat(sprintf(&amp;quot;▪ 投资组合规模: $%s\n&amp;quot;, format(V0, big.mark=&amp;quot;,&amp;quot;)))&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## ▪ 投资组合规模: $1e+06&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;cat(sprintf(&amp;quot;▪ VaR(%d%%置信水平): $%s\n&amp;quot;, alpha*100, format(round(VaR), big.mark=&amp;quot;,&amp;quot;)))&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## ▪ VaR(99%置信水平): $124,519&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;cat(sprintf(&amp;quot;▪ 预期损失(ES): $%s\n&amp;quot;, format(round(ES), big.mark=&amp;quot;,&amp;quot;)))&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## ▪ 预期损失(ES): $143,313&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;cat(sprintf(&amp;quot;▪ 最大可能损失: $%s\n&amp;quot;, format(round(max(losses)), big.mark=&amp;quot;,&amp;quot;)))&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## ▪ 最大可能损失: $237,724&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h2 id="基于混合多元正态分布优化蒙特卡洛模拟法"&gt;&lt;a href="#%e5%9f%ba%e4%ba%8e%e6%b7%b7%e5%90%88%e5%a4%9a%e5%85%83%e6%ad%a3%e6%80%81%e5%88%86%e5%b8%83%e4%bc%98%e5%8c%96%e8%92%99%e7%89%b9%e5%8d%a1%e6%b4%9b%e6%a8%a1%e6%8b%9f%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;基于混合多元正态分布优化蒙特卡洛模拟法&#10;&lt;/h2&gt;&lt;p&gt;混合多元正态分布可通过组合多个多元正态分布刻画不同市场状态下资产收益率的动态相关性和厚尾特征，适用于多资产组合的VaR计算。&lt;/p&gt;&#10;&lt;p&gt;在置信水平 &lt;code&gt;\(\alpha\)&lt;/code&gt; 下，多元混合正态模型的分位数 &lt;code&gt;\(Q_{\alpha}\)&lt;/code&gt; 满足以下等式：&lt;/p&gt;&#10;&lt;p&gt;$$&#10;\sum_{i=1}^k \pi_i \cdot \Phi\left(Q_\alpha ,;, \mu_p^{(i)}, \sigma_p^{(i)}\right) = \alpha&lt;br&gt;&#10;$$&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;\(\pi_i\)&lt;/code&gt;: 第 &lt;code&gt;\(i\)&lt;/code&gt; 个混合成分的权重（$\sum_{i=1}^k \pi_i = 1$）；&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(\mu_p^{(i)} = \mathbf{w}^\top \boldsymbol{\mu}_i\)&lt;/code&gt;: 第 &lt;code&gt;\(i\)&lt;/code&gt;个成分的线性组合均值（$\mathbf{w}$ 为资产权重向量，$\boldsymbol{\mu}_i$ 为成分均值向量）；&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(\sigma_p^{(i)} = \sqrt{\mathbf{w}^\top \boldsymbol{\Sigma}_i \mathbf{w}}\)&lt;/code&gt;: 第 &lt;code&gt;\(i\)&lt;/code&gt; 个成分的线性组合标准差（$\boldsymbol{\Sigma}_i$ 为成分协方差矩阵）；&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;\(\Phi(\cdot)\)&lt;/code&gt;: 标准单变量正态分布的累积分布函数（CDF）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 加载包&#10;library(quantmod)&#10;library(mclust)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Package 'mclust' version 6.1.1&#10;## Type 'citation(&amp;quot;mclust&amp;quot;)' for citing this R package in publications.&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(MASS)&#10;library(Matrix)&#10;library(matrixcalc)&#10;library(dplyr)&#10;library(showtext)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：sysfonts&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 载入需要的程序包：showtextdb&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(ggplot2)&#10;library(DescTools)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## 载入程序包：'DescTools'&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## The following object is masked from 'package:mclust':&#10;## &#10;## BrierScore&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 参数设置&#10;symbols &amp;lt;- c(&amp;quot;AAPL&amp;quot;, &amp;quot;GOOG&amp;quot;, &amp;quot;MSFT&amp;quot;)&#10;weights &amp;lt;- c(0.4, 0.3, 0.3)&#10;portfolio_value &amp;lt;- 1e6&#10;confidence_level &amp;lt;- 0.95&#10;&#10;# 数据获取与处理&#10;getSymbols(symbols, from = &amp;quot;2020-01-01&amp;quot;, to = Sys.Date())&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;AAPL&amp;quot; &amp;quot;GOOG&amp;quot; &amp;quot;MSFT&amp;quot;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;prices &amp;lt;- do.call(merge, lapply(symbols, function(x) Cl(get(x))))&#10;returns &amp;lt;- ROC(prices,type = &amp;quot;discrete&amp;quot;) %&amp;gt;% na.omit() %&amp;gt;% as.matrix()&#10;&#10;# 混合模型拟合与修正&#10;set.seed(123)&#10;mix_model &amp;lt;- Mclust(returns, G = 2)&#10;&#10;# 提取并修正模型参数&#10;weights_mix &amp;lt;- mix_model$parameters$pro&#10;means_mix &amp;lt;- mix_model$parameters$mean&#10;&#10;# 检查混合模型协方差参数维度&#10;sigma_dim &amp;lt;- dim(mix_model$parameters$variance$sigma)&#10;cat(&amp;quot;Sigma参数维度:&amp;quot;, sigma_dim, &amp;quot;\n&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Sigma参数维度: 3 3 2&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 确认模型类型是否兼容&#10;if (mix_model$modelName != &amp;quot;VVV&amp;quot;) {&#10; warning(&amp;quot;当前模型&amp;quot;, mix_model$modelName, &#10; &amp;quot;可能使用共享协方差矩阵结构，需调整修正逻辑&amp;quot;)&#10;}&#10;&#10;&#10;&#10;covs_mix &amp;lt;- lapply(1:mix_model$G, function(g) {&#10; # 提取第g个成分的协方差矩阵&#10; sigma &amp;lt;- mix_model$parameters$variance$sigma[,,g]&#10; &#10; # 验证矩阵维度&#10; if (!matrixcalc::is.square.matrix(sigma)) {&#10; stop(paste(&amp;quot;成分&amp;quot;, g, &amp;quot;协方差矩阵非正方形，维度:&amp;quot;, &#10; paste(dim(sigma), collapse=&amp;quot;x&amp;quot;)))&#10; }&#10; &#10; # 特征值修正&#10; eig &amp;lt;- eigen(sigma)&#10; ev &amp;lt;- pmax(eig$values, 1e-6)&#10; sigma_corrected &amp;lt;- eig$vectors %*% diag(ev) %*% t(eig$vectors)&#10; as.matrix(nearPD(sigma_corrected)$mat)&#10;})&#10;&#10;# 增强型修正函数&#10;robust_cov_fix &amp;lt;- function(sigma) {&#10; if (!is.matrix(sigma) || nrow(sigma) != ncol(sigma)) {&#10; sigma &amp;lt;- matrix(sigma, nrow=sqrt(length(sigma))) # 向量转矩阵&#10; }&#10; &#10; # 添加对称性强制修正&#10; sigma &amp;lt;- 0.5 * (sigma + t(sigma))&#10; &#10; # 执行特征值修正&#10; eig &amp;lt;- eigen(sigma)&#10; ev &amp;lt;- pmax(eig$values, 1e-6)&#10; eig$vectors %*% diag(ev) %*% t(eig$vectors)&#10;}&#10;&#10;# 应用修正函数&#10;covs_mix &amp;lt;- lapply(1:mix_model$G, function(g) {&#10; as.matrix(nearPD(&#10; robust_cov_fix(mix_model$parameters$variance$sigma[,,g])&#10; )$mat)&#10;})&#10;&#10;# 验证所有协方差矩阵性质&#10;sapply(covs_mix, function(x) {&#10; c(dim=dim(x), isSquare=matrixcalc::is.square.matrix(x))&#10;}) # 维度应统一为NxN&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [,1] [,2]&#10;## dim1 3 3&#10;## dim2 3 3&#10;## isSquare 1 1&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 检查正定性&#10;sapply(covs_mix, matrixcalc::is.positive.definite) # 应全为TRUE&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] TRUE TRUE&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 安全模拟函数&#10;safe_mvrnorm &amp;lt;- function(n, mu, sigma) {&#10; sigma_fixed &amp;lt;- as.matrix(nearPD(sigma)$mat)&#10; MASS::mvrnorm(n, mu, sigma_fixed)&#10;}&#10;&#10;# 蒙特卡洛模拟&#10;n_sim &amp;lt;- 10000&#10;sim_returns &amp;lt;- matrix(0, nrow = n_sim, ncol = 3)&#10;&#10;for (i in 1:n_sim) {&#10; component &amp;lt;- sample(1:length(weights_mix), 1, prob = weights_mix)&#10; sim_returns[i, ] &amp;lt;- safe_mvrnorm(1, &#10; means_mix[, component], &#10; covs_mix[[component]])&#10;}&#10;&#10;# 查看模拟结果摘要&#10;summary(sim_returns) # 不应有NA或极端值&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## V1 V2 V3 &#10;## Min. :-0.1235547 Min. :-0.1244924 Min. :-0.1164468 &#10;## 1st Qu.:-0.0101667 1st Qu.:-0.0104414 1st Qu.:-0.0098317 &#10;## Median : 0.0012049 Median : 0.0009092 Median : 0.0006312 &#10;## Mean : 0.0009236 Mean : 0.0006466 Mean : 0.0007475 &#10;## 3rd Qu.: 0.0126020 3rd Qu.: 0.0120780 3rd Qu.: 0.0113348 &#10;## Max. : 0.1311838 Max. : 0.1262479 Max. : 0.1401261&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 计算VaR&#10;portfolio_returns &amp;lt;- sim_returns %*% weights&#10;&#10;portfolio_returns &amp;lt;- na.omit(portfolio_returns) # 移除缺失值&#10;if (sd(portfolio_returns) &amp;lt; 1e-6) stop(&amp;quot;收益波动率过低，无法生成有效分布&amp;quot;)&#10;&#10;# Winsorize处理极端值&#10;&#10;portfolio_returns &amp;lt;- Winsorize(portfolio_returns)&#10;losses &amp;lt;- -portfolio_value * portfolio_returns&#10;# 计算VaR和ES&#10;VaR &amp;lt;- quantile(losses, 1 - confidence_level)&#10;ES &amp;lt;- mean(losses[losses &amp;lt;= VaR])&#10;&#10;# 生成自适应breaks&#10;br &amp;lt;- pretty(range(portfolio_returns), n = 100)&#10;if (length(br) &amp;lt; 10) br &amp;lt;- seq(min(portfolio_returns), max(portfolio_returns), length.out=100)&#10;&#10;&#10;cat(&amp;quot;95% VaR:&amp;quot;, round(VaR, 2), &amp;quot;元\n&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 95% VaR: -27728.82 元&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;cat(&amp;quot;95% ES:&amp;quot;,round(ES, 2),&amp;quot;元\n&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## 95% ES: -27729.96 元&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 验证VaR计算合理性&#10;cat(&amp;quot;VaR占组合比例:&amp;quot;, round(VaR/portfolio_value*100, 2), &amp;quot;%\n&amp;quot;) &#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## VaR占组合比例: -2.77 %&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;cat(&amp;quot;ES占组合比例:&amp;quot;, round(ES/portfolio_value*100,2),&amp;quot;%\n&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## ES占组合比例: -2.77 %&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;# 正常范围通常在1%-10%之间&#10;&#10;showtext_auto() # 启用中文字体支持&#10;&#10;# 计算VaR和ES的标签文本&#10;var_label &amp;lt;- paste0(confidence_level*100, &amp;quot;% VaR: ¥&amp;quot;, format(round(VaR), big.mark = &amp;quot;,&amp;quot;))&#10;es_label &amp;lt;- paste0(confidence_level*100, &amp;quot;% ES: ¥&amp;quot;, format(round(ES), big.mark = &amp;quot;,&amp;quot;))&#10;&#10;# 生成风险可视化图表&#10;loss_plot &amp;lt;- ggplot(data.frame(losses), aes(x = losses)) +&#10; geom_histogram(aes(y = after_stat(density)), &#10; fill = &amp;quot;#6baed6&amp;quot;, alpha = 0.7, color = &amp;quot;white&amp;quot;) + # 优化填充色并添加边框&#10; geom_vline(aes(xintercept = VaR, color = &amp;quot;VaR&amp;quot;), &#10; linetype = &amp;quot;dashed&amp;quot;, linewidth = 1.2) +&#10; geom_vline(aes(xintercept = ES, color = &amp;quot;ES&amp;quot;), &#10; linetype = &amp;quot;dotdash&amp;quot;, linewidth = 1.2) + # 添加ES线&#10; annotate(&amp;quot;text&amp;quot;, x = VaR, y = Inf, label = var_label, # 使用annotate固定标签位置&#10; color = &amp;quot;#de2d26&amp;quot;, vjust = 2.5, size = 5, family = &amp;quot;sans&amp;quot;) +&#10; annotate(&amp;quot;text&amp;quot;, x = ES, y = Inf, label = es_label,&#10; color = &amp;quot;#3182bd&amp;quot;, vjust = 4.5, size = 5, family = &amp;quot;sans&amp;quot;) +&#10; scale_color_manual(name = &amp;quot;风险指标&amp;quot;,&#10; values = c(&amp;quot;VaR&amp;quot; = &amp;quot;#de2d26&amp;quot;, &amp;quot;ES&amp;quot; = &amp;quot;#3182bd&amp;quot;),&#10; guide = guide_legend(override.aes = list(&#10; linetype = c(&amp;quot;dashed&amp;quot;, &amp;quot;dotdash&amp;quot;)))) +&#10; labs(title = &amp;quot;投资组合风险价值分布可视化&amp;quot;,&#10; subtitle = paste(&amp;quot;基于&amp;quot;, length(symbols), &amp;quot;资产混合正态模型蒙特卡洛模拟&amp;quot;),&#10; x = &amp;quot;潜在损失金额 (元)&amp;quot;, y = &amp;quot;概率密度&amp;quot;) +&#10; theme_minimal(base_size = 14) +&#10; theme(&#10; text = element_text(family = &amp;quot;sans&amp;quot;), # 确保中文字体显示&#10; plot.title = element_text(hjust = 0.5, face = &amp;quot;bold&amp;quot;, size = 18),&#10; plot.subtitle = element_text(hjust = 0.5, color = &amp;quot;gray40&amp;quot;, size = 12),&#10; axis.title = element_text(size = 12),&#10; axis.text = element_text(color = &amp;quot;gray30&amp;quot;),&#10; panel.grid.major = element_line(color = &amp;quot;grey90&amp;quot;, linewidth = 0.3),&#10; panel.grid.minor = element_blank(), # 移除次要网格线&#10; legend.position = &amp;quot;top&amp;quot;,&#10; legend.title = element_text(size = 12),&#10; legend.text = element_text(size = 10),&#10; plot.margin = margin(1, 1, 1, 1, &amp;quot;cm&amp;quot;)&#10; ) +&#10; coord_cartesian(clip = &amp;quot;off&amp;quot;) # 允许标签超出绘图区域&#10;&#10;print(loss_plot)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;img src="https://gewutang.cn/2010/12/16/var-calculation-via-montecarlo-simulation/index_files/figure-html/mixed-1.png" width="672" /&gt;&#10;</description></item></channel></rss>