<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Economics on 格物堂</title><link>https://gewutang.cn/categories/economics/</link><description>Recent content in Economics on 格物堂</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Mon, 14 Jul 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://gewutang.cn/categories/economics/index.xml" rel="self" type="application/rss+xml"/><item><title>使用机器学习模型(xgboost）来预测纳斯达克 100 指数</title><link>https://gewutang.cn/2025/07/14/xboost/</link><pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2025/07/14/xboost/</guid><description>&#10;&lt;script src="https://gewutang.cn/2025/07/14/xboost/index_files/core-js/shim.min.js"&gt;&lt;/script&gt;&#10;&lt;script src="https://gewutang.cn/2025/07/14/xboost/index_files/react/react.min.js"&gt;&lt;/script&gt;&#10;&lt;script src="https://gewutang.cn/2025/07/14/xboost/index_files/react/react-dom.min.js"&gt;&lt;/script&gt;&#10;&lt;script src="https://gewutang.cn/2025/07/14/xboost/index_files/reactwidget/react-tools.js"&gt;&lt;/script&gt;&#10;&lt;link href="https://gewutang.cn/2025/07/14/xboost/index_files/htmltools-fill/fill.css" rel="stylesheet" /&gt;&#10;&lt;script src="https://gewutang.cn/2025/07/14/xboost/index_files/htmlwidgets/htmlwidgets.js"&gt;&lt;/script&gt;&#10;&lt;link href="https://gewutang.cn/2025/07/14/xboost/index_files/reactable/reactable.css" rel="stylesheet" /&gt;&#10;&lt;script src="https://gewutang.cn/2025/07/14/xboost/index_files/reactable-binding/reactable.js"&gt;&lt;/script&gt;&#10;&#10;&#10;&lt;div id="引言" class="section level1"&gt;&#10;&lt;h1&gt;引言&lt;/h1&gt;&#10;&lt;p&gt;XGBoost（eXtreme Gradient Boosting）是一种高效的梯度提升算法，在数据科学和机器学习领域广泛应用，尤其擅长处理结构化数据的回归和分类问题。以下从数学原理、发展历程、使用方法和竞争算法四个方面进行详细介绍：&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;XGBoost 是梯度提升框架（Gradient Boosting）的优化实现，其核心思想是迭代地训练多个弱学习器（通常是决策树），并将它们组合成一个强学习器。&lt;/p&gt;&#10;&lt;p&gt;具体数学原理如下：&lt;/p&gt;&#10;&lt;p&gt;1.目标函数&lt;/p&gt;&#10;&lt;p&gt;XGBoost 的目标函数由两部分组成：&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;损失函数&lt;/strong&gt;：衡量模型预测值与真实值之间的误差（如均方误差 MSE、对数损失 log loss 等）。&#10;&lt;strong&gt;正则化项&lt;/strong&gt;：控制模型复杂度，防止过拟合，包括树的数量、深度、叶子节点数等。&lt;/p&gt;&#10;&lt;p&gt;目标函数表达式：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;\text{Obj}(\theta) = \sum_{i=1}^n L(y_i, \hat{y}_i) + \sum_{k=1}^K \Omega(f_k)&#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;\(L(y_i, \hat{y}_i)\)&lt;/span&gt; 是样本 &lt;span class="math inline"&gt;\(i\)&lt;/span&gt; 的损失函数，&lt;span class="math inline"&gt;\(\hat{y}_i\)&lt;/span&gt; 是预测值，&lt;span class="math inline"&gt;\(y_i\)&lt;/span&gt; 是真实值。&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="math inline"&gt;\(\Omega(f_k)\)&lt;/span&gt; 是第 &lt;span class="math inline"&gt;\(k\)&lt;/span&gt; 棵树的正则化项，通常包括树的复杂度（如叶子节点数、叶子节点权重的 L2 正则化）。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;2.梯度提升迭代&lt;/p&gt;&#10;&lt;p&gt;XGBoost 通过迭代方式逐步优化目标函数：&lt;/p&gt;&#10;&lt;p&gt;初始化模型为常数预测： &lt;span class="math inline"&gt;\(\hat{y}_i^{(0)} = \text{argmin}_c \sum_{i=1}^n L(y_i, c)\)&lt;/span&gt; 。&lt;/p&gt;&#10;&lt;p&gt;对于每一轮迭代 &lt;span class="math inline"&gt;\(t\)&lt;/span&gt; ：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;计算损失函数关于当前预测值的梯度（一阶导数）和海森矩阵（二阶导数）。&lt;/li&gt;&#10;&lt;li&gt;训练一棵新的决策树 &lt;span class="math inline"&gt;\(f_t\)&lt;/span&gt; ，拟合这些梯度（即预测梯度方向）。&lt;/li&gt;&#10;&lt;li&gt;更新预测值：&lt;span class="math inline"&gt;\(\hat{y}_i^{(t)} = \hat{y}_i^{(t-1)} + \eta f_t(x_i)\)&lt;/span&gt; ，其中 &lt;span class="math inline"&gt;\(\eta\)&lt;/span&gt; 是学习率（控制每次迭代的步长）。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;3.决策树优化&lt;/p&gt;&#10;&lt;p&gt;XGBoost 在构建决策树时采用了以下优化策略：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;精确贪心算法&lt;/strong&gt;：通过枚举所有特征的所有可能分割点，找到最优分割。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;近似算法&lt;/strong&gt;：对于大规模数据，使用直方图近似快速找到分割点。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;缺失值处理&lt;/strong&gt;：自动学习缺失值的最优分裂方向。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;正则化剪枝&lt;/strong&gt;：通过正则化项控制树的复杂度，避免过拟合。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div id="二发展历程" class="section level1"&gt;&#10;&lt;h1&gt;二、发展历程&lt;/h1&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;p&gt;2014 年：陈天奇（Tianqi Chen）在华盛顿大学读博期间开发了 XGBoost 的原型，最初作为研究项目用于解决大规模机器学习问题。&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;2015 年：XGBoost 作为开源项目发布，因其在 Kaggle 竞赛中的优异表现迅速走红，成为数据科学领域的主流算法之一。&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;2016 年：陈天奇加入微软，带领团队进一步优化 XGBoost，支持分布式计算和云计算平台。&lt;/p&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;p&gt;2017 年至今：XGBoost 持续更新，增加了更多功能（如 DART、GPU 加速、特征重要性分析等），并被集成到多种编程语言和工具中（如 Python、R、Scala 等）。&lt;/p&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div id="三如何使用" class="section level1"&gt;&#10;&lt;h1&gt;三、如何使用&lt;/h1&gt;&#10;&lt;p&gt;我们将用联邦基金有效利率和失业率为输入参数，按照 xgboost 模型对纳斯达克 100 指数月度数据进行建模。&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 加载必要的R包&#10;library(tidyquant) # 获取数据&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Registered S3 method overwritten by &amp;#39;quantmod&amp;#39;:&#10;## method from&#10;## as.zoo.data.frame zoo&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## ── Attaching core tidyquant packages ────────────────── tidyquant 1.0.11.9000 ──&#10;## ✔ PerformanceAnalytics 2.0.8 ✔ TTR 0.24.4&#10;## ✔ quantmod 0.4.28 ✔ xts 0.14.1&#10;## ── Conflicts ────────────────────────────────────────── tidyquant_conflicts() ──&#10;## ✖ zoo::as.Date() masks base::as.Date()&#10;## ✖ zoo::as.Date.numeric() masks base::as.Date.numeric()&#10;## ✖ PerformanceAnalytics::legend() masks graphics::legend()&#10;## ✖ quantmod::summary() masks base::summary()&#10;## ℹ Use the conflicted package (&amp;lt;http://conflicted.r-lib.org/&amp;gt;) to force all conflicts to become errors&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;library(tidyverse) # 数据处理与可视化的核心包集合&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──&#10;## ✔ dplyr 1.1.4 ✔ readr 2.1.5&#10;## ✔ forcats 1.0.0 ✔ stringr 1.5.1&#10;## ✔ ggplot2 3.5.2 ✔ tibble 3.3.0&#10;## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1&#10;## ✔ purrr 1.0.4 &#10;## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──&#10;## ✖ dplyr::filter() masks stats::filter()&#10;## ✖ dplyr::first() masks xts::first()&#10;## ✖ dplyr::lag() masks stats::lag()&#10;## ✖ dplyr::last() masks xts::last()&#10;## ℹ Use the conflicted package (&amp;lt;http://conflicted.r-lib.org/&amp;gt;) to force all conflicts to become errors&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;library(tidymodels) # 机器学习建模框架&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## ── Attaching packages ────────────────────────────────────── tidymodels 1.3.0 ──&#10;## ✔ broom 1.0.8 ✔ rsample 1.3.0&#10;## ✔ dials 1.4.0 ✔ tune 1.3.0&#10;## ✔ infer 1.0.9 ✔ workflows 1.2.0&#10;## ✔ modeldata 1.4.0 ✔ workflowsets 1.1.1&#10;## ✔ parsnip 1.3.2 ✔ yardstick 1.3.2&#10;## ✔ recipes 1.3.1 &#10;## ── Conflicts ───────────────────────────────────────── tidymodels_conflicts() ──&#10;## ✖ scales::discard() masks purrr::discard()&#10;## ✖ dplyr::filter() masks stats::filter()&#10;## ✖ dplyr::first() masks xts::first()&#10;## ✖ recipes::fixed() masks stringr::fixed()&#10;## ✖ dplyr::lag() masks stats::lag()&#10;## ✖ dplyr::last() masks xts::last()&#10;## ✖ dials::momentum() masks TTR::momentum()&#10;## ✖ yardstick::spec() masks readr::spec()&#10;## ✖ recipes::step() masks stats::step()&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;library(modeltime) # 时间序列建模与预测&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## Attaching package: &amp;#39;modeltime&amp;#39;&#10;## &#10;## The following object is masked from &amp;#39;package:TTR&amp;#39;:&#10;## &#10;## growth&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;library(timetk) # 时间序列数据处理工具&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## Attaching package: &amp;#39;timetk&amp;#39;&#10;## &#10;## The following object is masked from &amp;#39;package:tidyquant&amp;#39;:&#10;## &#10;## FANG&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 获取失业率数据 (UNRATE)&#10;df_unrate &amp;lt;- &#10; tq_get(&amp;quot;UNRATE&amp;quot;, get = &amp;quot;economic.data&amp;quot;) %&amp;gt;% &#10; select(date, unrate = price) # 重命名价格列为unrate&#10;&#10;# 获取联邦基金有效利率数据 (FEDFUNDS)&#10;df_fedfunds &amp;lt;- &#10; tq_get(&amp;quot;FEDFUNDS&amp;quot;, get = &amp;quot;economic.data&amp;quot;) %&amp;gt;% &#10; select(date, fedfunds = price) # 重命名价格列为fedfunds&#10;&#10;# 获取纳斯达克100指数数据&#10;df_nasdaq &amp;lt;- &#10; tq_get(&amp;quot;^NDX&amp;quot;) %&amp;gt;% &#10; tq_transmute(select = close, # 选择收盘价&#10; mutate_fun = to.monthly, # 转换为月度数据&#10; col_rename = &amp;quot;nasdaq&amp;quot;) %&amp;gt;% # 重命名列&#10; mutate(date = as.Date(date)) # 确保日期格式正确&#10;&#10;# 合并三个数据集&#10;df_merged &amp;lt;- &#10; df_unrate %&amp;gt;% &#10; left_join(df_fedfunds) %&amp;gt;% &#10; left_join(df_nasdaq) %&amp;gt;% &#10; drop_na() # 删除包含缺失值的行&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Joining with `by = join_by(date)`&#10;## Joining with `by = join_by(date)`&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 时间序列数据分割&#10;splits &amp;lt;- &#10; time_series_split(&#10; df_merged,&#10; assess = &amp;quot;1 year&amp;quot;, # 测试集为1年数据&#10; cumulative = TRUE # 训练集包含所有历史数据&#10; )&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Using date_var: date&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;df_train &amp;lt;- training(splits) # 提取训练集&#10;df_test &amp;lt;- testing(splits) # 提取测试集&#10;&#10;# 创建机器学习预处理配方&#10;recipe_ml &amp;lt;- &#10; recipe(nasdaq ~ ., df_train) %&amp;gt;% # 以nasdaq为目标变量&#10; step_date(date, features = &amp;quot;month&amp;quot;, ordinal = FALSE) %&amp;gt;% # 从日期提取月份特征&#10; step_dummy(all_nominal_predictors(), one_hot = TRUE) %&amp;gt;% # 将分类变量转为虚拟变量&#10; step_mutate(date_num = as.numeric(date)) %&amp;gt;% # 将日期转换为数值型&#10; step_normalize(all_numeric_predictors()) %&amp;gt;% # 标准化数值预测变量&#10; step_rm(date) # 移除原始日期列&#10;&#10;# 定义XGBoost提升树模型规格，设置超参数为待调优&#10;mod_spec &amp;lt;- &#10; boost_tree(trees = tune(), # 树的数量&#10; min_n = tune(), # 节点最小样本量&#10; tree_depth = tune(), # 树的最大深度&#10; learn_rate = tune()) %&amp;gt;% # 学习率&#10; set_engine(&amp;quot;xgboost&amp;quot;) %&amp;gt;% # 使用xgboost引擎&#10; set_mode(&amp;quot;regression&amp;quot;) # 设置为回归模式&#10;&#10;# 提取模型的超参数集&#10;mod_param &amp;lt;- extract_parameter_set_dials(mod_spec)&#10;&#10;# 设置随机种子确保结果可复现&#10;set.seed(1234)&#10;&#10;# 创建随机超参数网格（50种组合）&#10;model_tbl &amp;lt;- &#10; mod_param %&amp;gt;% &#10; grid_random(size = 50) %&amp;gt;%&#10; create_model_grid(&#10; f_model_spec = boost_tree,&#10; engine_name = &amp;quot;xgboost&amp;quot;,&#10; mode = &amp;quot;regression&amp;quot;&#10; )&#10;&#10;# 从网格中提取模型列表&#10;model_list &amp;lt;- model_tbl$.models&#10;&#10;# 创建工作流集，将预处理配方与不同模型规格组合&#10;model_wfset &amp;lt;- &#10; workflow_set(&#10; preproc = list(recipe_ml), # 使用之前定义的预处理配方&#10; models = model_list, # 使用超参数网格生成的模型列表&#10; cross = TRUE # 交叉组合配方和模型&#10; )&#10;&#10;# 使用并行计算加速模型训练&#10;model_parallel_tbl &amp;lt;- &#10; model_wfset %&amp;gt;%&#10; modeltime_fit_workflowset(&#10; data = df_train, # 使用训练集数据&#10; control = control_fit_workflowset(&#10; verbose = TRUE, # 显示训练进度&#10; allow_par = TRUE # 允许并行计算&#10; )&#10; )&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## ℹ Fitting Model: 1&#10;## ✔ Model Successfully Fitted: 1&#10;## ℹ Fitting Model: 2&#10;## ✔ Model Successfully Fitted: 2&#10;## ℹ Fitting Model: 3&#10;## ✔ Model Successfully Fitted: 3&#10;## ℹ Fitting Model: 4&#10;## ✔ Model Successfully Fitted: 4&#10;## ℹ Fitting Model: 5&#10;## ✔ Model Successfully Fitted: 5&#10;## ℹ Fitting Model: 6&#10;## ✔ Model Successfully Fitted: 6&#10;## ℹ Fitting Model: 7&#10;## ✔ Model Successfully Fitted: 7&#10;## ℹ Fitting Model: 8&#10;## ✔ Model Successfully Fitted: 8&#10;## ℹ Fitting Model: 9&#10;## ✔ Model Successfully Fitted: 9&#10;## ℹ Fitting Model: 10&#10;## ✔ Model Successfully Fitted: 10&#10;## ℹ Fitting Model: 11&#10;## ✔ Model Successfully Fitted: 11&#10;## ℹ Fitting Model: 12&#10;## ✔ Model Successfully Fitted: 12&#10;## ℹ Fitting Model: 13&#10;## ✔ Model Successfully Fitted: 13&#10;## ℹ Fitting Model: 14&#10;## ✔ Model Successfully Fitted: 14&#10;## ℹ Fitting Model: 15&#10;## ✔ Model Successfully Fitted: 15&#10;## ℹ Fitting Model: 16&#10;## ✔ Model Successfully Fitted: 16&#10;## ℹ Fitting Model: 17&#10;## ✔ Model Successfully Fitted: 17&#10;## ℹ Fitting Model: 18&#10;## ✔ Model Successfully Fitted: 18&#10;## ℹ Fitting Model: 19&#10;## ✔ Model Successfully Fitted: 19&#10;## ℹ Fitting Model: 20&#10;## ✔ Model Successfully Fitted: 20&#10;## ℹ Fitting Model: 21&#10;## ✔ Model Successfully Fitted: 21&#10;## ℹ Fitting Model: 22&#10;## ✔ Model Successfully Fitted: 22&#10;## ℹ Fitting Model: 23&#10;## ✔ Model Successfully Fitted: 23&#10;## ℹ Fitting Model: 24&#10;## ✔ Model Successfully Fitted: 24&#10;## ℹ Fitting Model: 25&#10;## ✔ Model Successfully Fitted: 25&#10;## ℹ Fitting Model: 26&#10;## ✔ Model Successfully Fitted: 26&#10;## ℹ Fitting Model: 27&#10;## ✔ Model Successfully Fitted: 27&#10;## ℹ Fitting Model: 28&#10;## ✔ Model Successfully Fitted: 28&#10;## ℹ Fitting Model: 29&#10;## ✔ Model Successfully Fitted: 29&#10;## ℹ Fitting Model: 30&#10;## ✔ Model Successfully Fitted: 30&#10;## ℹ Fitting Model: 31&#10;## ✔ Model Successfully Fitted: 31&#10;## ℹ Fitting Model: 32&#10;## ✔ Model Successfully Fitted: 32&#10;## ℹ Fitting Model: 33&#10;## ✔ Model Successfully Fitted: 33&#10;## ℹ Fitting Model: 34&#10;## ✔ Model Successfully Fitted: 34&#10;## ℹ Fitting Model: 35&#10;## ✔ Model Successfully Fitted: 35&#10;## ℹ Fitting Model: 36&#10;## ✔ Model Successfully Fitted: 36&#10;## ℹ Fitting Model: 37&#10;## ✔ Model Successfully Fitted: 37&#10;## ℹ Fitting Model: 38&#10;## ✔ Model Successfully Fitted: 38&#10;## ℹ Fitting Model: 39&#10;## ✔ Model Successfully Fitted: 39&#10;## ℹ Fitting Model: 40&#10;## ✔ Model Successfully Fitted: 40&#10;## ℹ Fitting Model: 41&#10;## ✔ Model Successfully Fitted: 41&#10;## ℹ Fitting Model: 42&#10;## ✔ Model Successfully Fitted: 42&#10;## ℹ Fitting Model: 43&#10;## ✔ Model Successfully Fitted: 43&#10;## ℹ Fitting Model: 44&#10;## ✔ Model Successfully Fitted: 44&#10;## ℹ Fitting Model: 45&#10;## ✔ Model Successfully Fitted: 45&#10;## ℹ Fitting Model: 46&#10;## ✔ Model Successfully Fitted: 46&#10;## ℹ Fitting Model: 47&#10;## ✔ Model Successfully Fitted: 47&#10;## ℹ Fitting Model: 48&#10;## ✔ Model Successfully Fitted: 48&#10;## ℹ Fitting Model: 49&#10;## ✔ Model Successfully Fitted: 49&#10;## ℹ Fitting Model: 50&#10;## ✔ Model Successfully Fitted: 50&#10;## Total time | 22.065 seconds&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 评估模型在测试集上的准确性&#10;model_parallel_tbl %&amp;gt;% &#10; modeltime_calibrate(new_data = df_test) %&amp;gt;% # 校准模型&#10; modeltime_accuracy() %&amp;gt;% # 计算准确性指标&#10; table_modeltime_accuracy() # 以表格形式展示结果&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Warning: There were 12 warnings in `dplyr::mutate()`.&#10;## The first warning was:&#10;## ℹ In argument: `.nested.col = purrr::map(...)`.&#10;## Caused by warning:&#10;## ! A correlation computation is required, but `estimate` is constant and has 0&#10;## standard deviation, resulting in a divide by 0 error. `NA` will be returned.&#10;## ℹ Run `dplyr::last_dplyr_warnings()` to see the 11 remaining warnings.&lt;/code&gt;&lt;/pre&gt;&#10;&lt;div class="reactable html-widget html-fill-item" id="htmlwidget-1" style="width:auto;height:auto;"&gt;&lt;/div&gt;&#10;&lt;script type="application/json" data-for="htmlwidget-1"&gt;{"x":{"tag":{"name":"Reactable","attribs":{"data":{".model_id":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],".model_desc":["RECIPE_BOOST_TREE_1","RECIPE_BOOST_TREE_2","RECIPE_BOOST_TREE_3","RECIPE_BOOST_TREE_4","RECIPE_BOOST_TREE_5","RECIPE_BOOST_TREE_6","RECIPE_BOOST_TREE_7","RECIPE_BOOST_TREE_8","RECIPE_BOOST_TREE_9","RECIPE_BOOST_TREE_10","RECIPE_BOOST_TREE_11","RECIPE_BOOST_TREE_12","RECIPE_BOOST_TREE_13","RECIPE_BOOST_TREE_14","RECIPE_BOOST_TREE_15","RECIPE_BOOST_TREE_16","RECIPE_BOOST_TREE_17","RECIPE_BOOST_TREE_18","RECIPE_BOOST_TREE_19","RECIPE_BOOST_TREE_20","RECIPE_BOOST_TREE_21","RECIPE_BOOST_TREE_22","RECIPE_BOOST_TREE_23","RECIPE_BOOST_TREE_24","RECIPE_BOOST_TREE_25","RECIPE_BOOST_TREE_26","RECIPE_BOOST_TREE_27","RECIPE_BOOST_TREE_28","RECIPE_BOOST_TREE_29","RECIPE_BOOST_TREE_30","RECIPE_BOOST_TREE_31","RECIPE_BOOST_TREE_32","RECIPE_BOOST_TREE_33","RECIPE_BOOST_TREE_34","RECIPE_BOOST_TREE_35","RECIPE_BOOST_TREE_36","RECIPE_BOOST_TREE_37","RECIPE_BOOST_TREE_38","RECIPE_BOOST_TREE_39","RECIPE_BOOST_TREE_40","RECIPE_BOOST_TREE_41","RECIPE_BOOST_TREE_42","RECIPE_BOOST_TREE_43","RECIPE_BOOST_TREE_44","RECIPE_BOOST_TREE_45","RECIPE_BOOST_TREE_46","RECIPE_BOOST_TREE_47","RECIPE_BOOST_TREE_48","RECIPE_BOOST_TREE_49","RECIPE_BOOST_TREE_50"],".type":["Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test"],"mae":[3427.41,3693.7,4332.08,5324.17,3338.1,3204.96,3078.92,3418.09,3493.16,1435.28,2400.65,3591.03,7976.25,4047.48,3561.98,2942.64,2727.6,4147.96,4218.05,6301.8,1883.95,2620.27,11907.92,9158.61,16641.88,2622.77,1123.06,3291.36,3731.53,3267.55,3298.09,3999.73,7986.47,7091.48,2850.35,9948.4,3882.81,1403.43,4618.44,3618.64,1903.92,3483.62,1946.15,6692.92,3249.41,2129.04,6187.97,3329.09,3447.82,3949.36],"mape":[16.38,17.81,20.81,25.67,16.07,15.32,14.81,16.46,16.7,6.75,11.5,17.16,38.76,19.55,17.16,14.04,13.1,20.04,20.22,30.57,8.94,12.58,57.97,44.54,81.12,12.51,5.26,15.77,18,15.67,15.88,19.32,38.74,34.37,13.63,48.4,18.75,6.61,22.21,17.45,9.06,16.78,9.27,32.43,15.65,10.16,30.01,15.87,16.62,18.92],"mase":[4.68,5.04,5.91,7.27,4.56,4.38,4.2,4.67,4.77,1.96,3.28,4.9,10.89,5.53,4.86,4.02,3.72,5.66,5.76,8.6,2.57,3.58,16.26,12.51,22.72,3.58,1.53,4.49,5.09,4.46,4.5,5.46,10.9,9.68,3.89,13.58,5.3,1.92,6.31,4.94,2.6,4.76,2.66,9.14,4.44,2.91,8.45,4.55,4.71,5.39],"smape":[18.33,19.67,23.89,29.94,17.6,17.01,16.11,18.06,18.7,7.15,12.31,19.3,48.15,21.77,18.9,15.55,14.17,22.38,23.06,36.18,9.53,13.57,81.7,57.37,136.48,13.62,5.52,17.42,19.89,17.26,17.37,21.48,48.27,41.72,14.88,63.92,20.79,6.97,25.45,19.23,9.61,18.44,9.84,38.89,17.08,10.83,35.41,17.82,18.23,21.48],"rmse":[3924.06,3839.53,4835.9,5645.15,3501.61,3680.14,3244.57,3580.67,3989.87,1859.11,2604.44,4107.19,8039.09,4169.95,3720.66,3484.57,2954.76,4267.55,4687.98,6381.15,2236.95,2843.35,11950.1,9213.39,16672.09,3017.81,1530.27,3645.34,3875.05,3574.1,3467.13,4123.62,8099.8,7216.69,3197.56,9998.86,4010.32,1782.33,4981.11,3757.13,2169.9,3640.02,2221.36,6810.63,3402.37,2380.42,6268.77,3943.18,3590.8,4460.67],"rsq":[0.22,0.09,0.11,0.21,0.06,0.19,0.01,0.09,0.25,0.09,0.09,0.27,"NA","NA",0.09,0.15,0,"NA",0.28,"NA",0.09,0.01,"NA","NA","NA",0.14,0.08,0.19,0.09,0.14,0.06,"NA",0.24,0.23,0.18,"NA","NA",0.09,0.25,0.09,0.09,0.09,0.09,0.23,0.09,0.09,"NA",0.28,"NA",0.21]},"columns":[{"id":".model_id","name":".model_id","type":"numeric"},{"id":".model_desc","name":".model_desc","type":"character"},{"id":".type","name":".type","type":"character"},{"id":"mae","name":"mae","type":"numeric"},{"id":"mape","name":"mape","type":"numeric"},{"id":"mase","name":"mase","type":"numeric"},{"id":"smape","name":"smape","type":"numeric"},{"id":"rmse","name":"rmse","type":"numeric"},{"id":"rsq","name":"rsq","type":"numeric"}],"searchable":true,"defaultExpanded":true,"showSortable":true,"dataKey":"719a9363636e9045a4bf916efdc2e3a3"},"children":[]},"class":"reactR_markup"},"evals":[],"jsHooks":[]}&lt;/script&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 选择表现最好的模型（这里假设是RECIPE_BOOST_TREE_27）&#10;# 并在测试集上进行校准&#10;calibration_tbl &amp;lt;- &#10; model_parallel_tbl %&amp;gt;%&#10; filter(.model_desc == &amp;quot;RECIPE_BOOST_TREE_27&amp;quot;) %&amp;gt;% &#10; modeltime_calibrate(df_test)&#10;&#10;# 生成预测并绘制预测区间&#10;calibration_tbl %&amp;gt;% &#10; modeltime_forecast(&#10; new_data = df_test, # 在测试集上进行预测&#10; actual_data = df_merged %&amp;gt;%&#10; filter(date &amp;gt;= as.Date(&amp;quot;2024-07-01&amp;quot;)) # 实际数据从2024-07-01开始&#10; ) %&amp;gt;%&#10; plot_modeltime_forecast(&#10; .interactive = FALSE, # 生成静态图表&#10; .legend_show = FALSE, # 不显示图例&#10; .line_size = 1.5, # 设置线条粗细&#10; .color_lab = &amp;quot;&amp;quot;, # 设置颜色标签&#10; .title = &amp;quot;NASDAQ 100&amp;quot; # 设置图表标题&#10; ) +&#10; # 添加副标题（使用markdown格式）&#10; labs(subtitle = &amp;quot;&amp;lt;span style = &amp;#39;color:dimgrey;&amp;#39;&amp;gt;预测区间&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style = &amp;#39;color:red;&amp;#39;&amp;gt;机器学习模型&amp;lt;/span&amp;gt;&amp;quot;) + &#10; # 设置x轴（日期）格式&#10; scale_x_date(&#10; expand = expansion(mult = c(.1, .15)), # 设置x轴扩展&#10; labels = scales::label_date(format = &amp;quot;%b&amp;#39;%y&amp;quot;) # 设置日期标签格式&#10; ) +&#10; # 设置y轴（纳斯达克指数）格式为货币格式&#10; scale_y_continuous(labels = scales::label_currency()) +&#10; # 设置图表主题&#10; theme_minimal(base_family = &amp;quot;Roboto Slab&amp;quot;, base_size = 20) +&#10; theme(&#10; legend.position = &amp;quot;none&amp;quot;, # 不显示图例&#10; plot.background = element_rect(fill = &amp;quot;azure&amp;quot;, color = &amp;quot;azure&amp;quot;), # 设置背景颜色&#10; plot.title = element_text(face = &amp;quot;bold&amp;quot;), # 设置标题字体为粗体&#10; axis.text = element_text(face = &amp;quot;bold&amp;quot;), # 设置坐标轴标签字体为粗体&#10; plot.subtitle = ggtext::element_markdown(face = &amp;quot;bold&amp;quot;) # 设置副标题为markdown格式并加粗&#10; )&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Warning in max(ids, na.rm = TRUE): no non-missing arguments to max; returning&#10;## -Inf&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img src="https://gewutang.cn/2025/07/14/xboost/index_files/figure-html/unnamed-chunk-1-2.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;XGBoost 的主要竞争对手包括：&lt;/p&gt;&#10;&lt;div id="lightgbm" class="section level2"&gt;&#10;&lt;h2&gt;1. LightGBM&lt;/h2&gt;&#10;&lt;p&gt;开发者：微软（2017 年发布）。&lt;/p&gt;&#10;&lt;p&gt;特点：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;基于直方图的决策树构建，速度比 XGBoost 更快。&lt;/li&gt;&#10;&lt;li&gt;支持 Leaf-wise（按叶子生长）的树生长策略，而不是 XGBoost 的 Level-wise（按层生长）。&lt;/li&gt;&#10;&lt;li&gt;内存占用更小，适合大规模数据集。&lt;/li&gt;&#10;&lt;li&gt;适用场景：超大规模数据集、需要快速迭代的场景。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;div id="catboost" class="section level2"&gt;&#10;&lt;h2&gt;2. CatBoost&lt;/h2&gt;&#10;&lt;p&gt;开发者：Yandex（2017 年发布）。&lt;/p&gt;&#10;&lt;p&gt;特点：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;自动处理类别特征（无需手动编码）。&lt;/li&gt;&#10;&lt;li&gt;采用对称树结构，减少过拟合风险。&lt;/li&gt;&#10;&lt;li&gt;支持 GPU 加速和分布式训练。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;适用场景：包含大量类别特征的数据集（如推荐系统、广告点击预测）。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div id="random-forest" class="section level2"&gt;&#10;&lt;h2&gt;3. Random Forest&lt;/h2&gt;&#10;&lt;p&gt;特点：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;基于 Bagging 思想的集成学习算法，并行训练多棵决策树。&lt;/li&gt;&#10;&lt;li&gt;对异常值和过拟合更鲁棒。&lt;/li&gt;&#10;&lt;li&gt;计算复杂度较低，但预测精度可能低于 Boosting 算法。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;适用场景：快速 baseline 模型、对解释性要求较高的场景。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div id="neural-networks神经网络" class="section level2"&gt;&#10;&lt;h2&gt;4. Neural Networks（神经网络）&lt;/h2&gt;&#10;&lt;p&gt;特点：&lt;/p&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;/ul&gt;&#10;&lt;p&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;ul&gt;&#10;&lt;li&gt;数据规模较小：可尝试 Random Forest 或 CatBoost（处理类别特征更方便）。&lt;/li&gt;&#10;&lt;li&gt;数据规模中等：XGBoost 和 LightGBM 均可，XGBoost 更成熟，LightGBM 速度更快。&lt;/li&gt;&#10;&lt;li&gt;包含大量类别特征：优先使用 CatBoost。&lt;/li&gt;&#10;&lt;li&gt;追求极致速度：选择 LightGBM。&lt;/li&gt;&#10;&lt;li&gt;非结构化数据：考虑神经网络（如 CNN、Transformer）。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;XGBoost 的优势在于其高效性、灵活性和广泛的应用场景，尤其在 Kaggle 竞赛和工业界的结构化数据分析中表现突出。&lt;/p&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>货币的省际贬值</title><link>https://gewutang.cn/2012/02/01/devaluation-caused-by-different-places/</link><pubDate>Wed, 01 Feb 2012 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2012/02/01/devaluation-caused-by-different-places/</guid><description>&lt;p&gt;回老家之后发现老家的烧饼是0.5元一个，而北京的烧饼是1元一个。也即，同样的1元钱在河南和在北京的购买力是不一样的，且相差了1倍。倘若将河南和北京各视为一个国家的话，根据购买力平价理论，则两地的汇率应当是1:2。然而，由于河南和北京同属一个国家，从而汇率问题，准确的说货币的购买力不等问题被忽略了。&lt;/p&gt;&#10;&lt;p&gt;在上述问题被忽略的基础上，富有想象力的人们产生了一种美好的愿望，即在北京挣钱、回老家去花。然而，由于两地之间路途遥远，这是不现实的。但是，这并无碍于人们实现这个美好愿望的心理，你可以将挣来的钱，寄给家里的父母花。&lt;/p&gt;&#10;&lt;p&gt;对于个体而言，上面的做法是个不错的解决方案，从某种意义上讲，较好的实现了货币的购买力。然而，站在更好的一个角度来看，这是一种比较恶劣的做法。试想，北京的钱被源源不断地被输往河南，而河南的烧饼供给量并不会随之增加，久而久之会出现什么效果？河南的烧饼价格会上涨，如果将烧饼看做河南生产的唯一消费品的话，河南产生了通货膨胀！没错，我相信这是通胀在省际之间转移的重要途径之一。这也就解释了为什么眼下太康县的物价水平跟北京有的一拼。长远来看，这种做法严重损伤了固守在河南工作的人们的利益。&lt;/p&gt;&#10;</description></item><item><title>套利与排队</title><link>https://gewutang.cn/2011/12/11/queuing-and-arbitrage/</link><pubDate>Sun, 11 Dec 2011 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2011/12/11/queuing-and-arbitrage/</guid><description>&lt;p&gt;某次跟同事吃饭遇到排队，便聊到排队这件事情中个体应当如何选择自己的最佳行为。聊到最后愕然发现，“排队现象”与金融是很相像的。两者中最重要的一个概念都是“套利”。&lt;/p&gt;&#10;&lt;p&gt;为了简便起见，我们虚构一个故事：假如A到一个餐厅，该餐厅有三个窗口，每个窗口都有若干人排队，问A应该去哪个队？&lt;/p&gt;&#10;&lt;p&gt;正常情况下，A可以任选一队，因为任何一队比其他队都没有任何优势。如果有优势的话，那先前必然已经出现一些人自动转向那个优势队来抵消优势队的优势，这个过程就是典型的“套利”过程。在金融中，“套利”过程最重要的结果是导致了“平价”，在排队中，“平价”表现为最终所有的队伍长度是一样的。&lt;/p&gt;&#10;&lt;p&gt;严格的分析过程等我有时间，我再写在这里。&lt;/p&gt;&#10;&lt;p&gt;**备注：**本来今天想写一写函数型数据与货币政策制定之间的关系的，因为弄丢了一个材料，所以只能改天再写。该文章名是《函数型数据分析手段或在政策制定中大有可为》。&lt;/p&gt;&#10;</description></item><item><title>尊严是人的固定成本</title><link>https://gewutang.cn/2011/12/07/dignity-is-likes-fixed-costs/</link><pubDate>Wed, 07 Dec 2011 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2011/12/07/dignity-is-likes-fixed-costs/</guid><description>&lt;p&gt;昨天吃午饭的时候，几个人谈到“西单磕头王”都“羡慕”不已。据说这个人在北京拥有四辆车和数套房产。这些财富在我们看来短时间内是可望而不可及的，而他竟然通过“磕头乞讨”就得到了。&lt;/p&gt;&#10;&lt;p&gt;其中一人说，这些人比我们好多了。我们辛辛苦苦工作，脑力劳动加体力劳动到头来也没人家挣的多。另一个人则持有相反观点，他认为这个人付出挺多的，最重要的是他为此付出了自己的尊严。&lt;/p&gt;&#10;&lt;p&gt;我在思考一个问题：大部分人不去乞讨的原因是什么？&lt;/p&gt;&#10;&lt;p&gt;从经济学角度来讲，是因为道德教育导致了我们对自己的尊严估值甚高，高到让我们觉得无论什么东西都不足以与其等值交换。结果大部分人都守着一个无法变现的尊严。而“西单磕头王”所做的事情概括起来有两部分来构成：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;重估自己的尊严。在这过程中，他重估自己的尊严，并且适当的调低了自己对尊严的估值，这样使得世界上有些东西可以与尊严等值交换。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;把重估的尊严进行变现。也就是说，他卖出了自己的尊严来换取金钱，当然还有随之而来的负面评价。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;有了这个基础，我们便可以研究尊严在经济学中到底处于什么地位了。&lt;/p&gt;&#10;&lt;p&gt;我认为对于任何一个乞讨的人而言，他第一次放下尊严是一个重大的举动。因为从此之后，尊严就成为了他乞讨事业中的“固定成本”。也就说，一旦一个人放下尊严，那么第二次、第三次放下尊严并不会使他付出更大的代价了（从道德角度来讲，一旦一个人决定不要脸，那么已经不可能是他更觉得羞耻了）。&lt;/p&gt;&#10;&lt;p&gt;这就可以很好的解释为什么有些人愿意乞讨为生了。我们可以从他乞讨的成本和收益来进行分析。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;乞讨的成本。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;乞讨的成本分为两部分，即固定成本和变动成本。固定成本就是一个人的尊严，这构成乞讨成本的最大一部分。变动成本则包括乞讨过程中的吃、穿、道具、交通费等东西。&lt;/p&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;乞讨的收益。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;从乞讨过程中得到的金钱和物品。&lt;/p&gt;&#10;&lt;p&gt;由于尊严是固定成本的最大部分，变动成本在成本中所占比例甚少，再加上一旦开始乞讨，尊严作为固定成本则随即沉没无法收回。而乞讨的收益则是日益增加，由此推出乞讨的平均成本是日益递减的。那么，作为一个理性人，乞讨者没有理由自动终结乞讨过程。&lt;/p&gt;&#10;</description></item><item><title>一价定律</title><link>https://gewutang.cn/2011/11/29/the-law-of-one-price/</link><pubDate>Tue, 29 Nov 2011 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2011/11/29/the-law-of-one-price/</guid><description>&lt;p&gt;一价定律即绝对购买力平价理论，它是由的货币学派的代表人物弗里德曼(1953)提出的。&lt;/p&gt;&#10;&lt;p&gt;一价定律认为在没有运输费用和官方贸易壁垒的自由竞争市场上，一件同质商品在不同国家（地点）出售，如果以同一种货币计价，其价格应是相等的。即，通过汇率折算之后的标价是应当是一致的。如果情况不是这样，或者更专业的说，如果在各国间存在价格差异，则会发生商品套购。直到价差被消除，贸易停止，这时达到商品市场的均衡状态。举个例子：&lt;/p&gt;&#10;&lt;p&gt;一颗苹果在中国卖2RMB，那么，根据即期汇率6.48来换算的话，它在美国的售价应该是 &lt;code&gt;\(2/6.48=0.3086\)&lt;/code&gt; 。如果苹果在美国的售价是0.4美元的话，你就可以拿着钱来中国买苹果，再回美国去卖，从而谋利。&lt;/p&gt;&#10;&lt;p&gt;当然了，结果会出现为数众多的你来进行套购，最终苹果在美国的售价将回归至0.3068美元。&lt;/p&gt;&#10;&lt;p&gt;当然，这个理论是在严格的假设下得出来的，其中比较重要的几个假设是：&lt;/p&gt;&#10;&lt;p&gt;1.对比国家都实行了同等程度的货币自由兑换，货币、商品、劳务和资本流通是完全自由的；&#10;2.自由贸易，关税为0;&#10;3.信息是完全的；&#10;4.易成本为零。&lt;/p&gt;&#10;&lt;p&gt;因此，一价定律理论上非常完美，但现实中并非如此。&lt;/p&gt;&#10;</description></item><item><title>索罗模型模拟</title><link>https://gewutang.cn/2010/12/25/solow-model/</link><pubDate>Sat, 25 Dec 2010 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2010/12/25/solow-model/</guid><description>&lt;h2 id="索罗模型"&gt;&lt;a href="#%e7%b4%a2%e7%bd%97%e6%a8%a1%e5%9e%8b" class="header-anchor"&gt;&lt;/a&gt;索罗模型&#10;&lt;/h2&gt;&lt;p&gt;索罗模型是宏观经济学中的基础模型，用于解释经济体长期经济增长的原因，索罗模型的主要关注集中在资本积累、人口增长和技术进步。&lt;/p&gt;&#10;&lt;h2 id="索罗模型的模拟"&gt;&lt;a href="#%e7%b4%a2%e7%bd%97%e6%a8%a1%e5%9e%8b%e7%9a%84%e6%a8%a1%e6%8b%9f" class="header-anchor"&gt;&lt;/a&gt;索罗模型的模拟&#10;&lt;/h2&gt;&lt;p&gt;基于R语言写一段模拟索罗模型的应用。&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(shiny)&#10;library(ggplot2)&#10;library(deSolve)&#10;&#10;# 索罗模型微分方程&#10;solow_model &amp;lt;- function(time, state, parameters) {&#10; with(as.list(c(state, parameters)), {&#10; dk &amp;lt;- s * (k^alpha) * (A * L)^(1-alpha) - (delta + n + g) * k&#10; list(dk)&#10; })&#10;}&#10;&#10;ui &amp;lt;- fluidPage(&#10; titlePanel(&amp;quot;索罗经济增长模型模拟器&amp;quot;),&#10; sidebarLayout(&#10; sidebarPanel(&#10; sliderInput(&amp;quot;s&amp;quot;, &amp;quot;储蓄率 (s)&amp;quot;, 0.1, 0.5, 0.25, 0.01),&#10; sliderInput(&amp;quot;delta&amp;quot;, &amp;quot;折旧率 (δ)&amp;quot;, 0.01, 0.15, 0.05, 0.01),&#10; sliderInput(&amp;quot;n&amp;quot;, &amp;quot;人口增长率 (n)&amp;quot;, 0.0, 0.05, 0.02, 0.001),&#10; sliderInput(&amp;quot;g&amp;quot;, &amp;quot;技术进步率 (g)&amp;quot;, 0.0, 0.05, 0.01, 0.001),&#10; sliderInput(&amp;quot;alpha&amp;quot;, &amp;quot;资本产出弹性 (α)&amp;quot;, 0.2, 0.8, 0.3, 0.05),&#10; numericInput(&amp;quot;k0&amp;quot;, &amp;quot;初始人均资本&amp;quot;, 0.1, min = 0.01, max = 10),&#10; actionButton(&amp;quot;run&amp;quot;, &amp;quot;运行模拟&amp;quot;)&#10; ),&#10; &#10; mainPanel(&#10; tabsetPanel(&#10; tabPanel(&amp;quot;资本动态&amp;quot;, plotOutput(&amp;quot;capital_plot&amp;quot;)),&#10; tabPanel(&amp;quot;稳态分析&amp;quot;, &#10; plotOutput(&amp;quot;phase_diagram&amp;quot;),&#10; htmlOutput(&amp;quot;steady_state&amp;quot;))&#10; ),&#10; h4(&amp;quot;模型说明:&amp;quot;),&#10; uiOutput(&amp;quot;model_desc&amp;quot;)&#10; )&#10; )&#10;)&#10;&#10;server &amp;lt;- function(input, output) {&#10; observeEvent(input$run, {&#10; parameters &amp;lt;- c(s = input$s,&#10; delta = input$delta,&#10; n = input$n,&#10; g = input$g,&#10; alpha = input$alpha,&#10; A = 1, # 初始技术水平&#10; L = 1) # 初始劳动力&#10; &#10; state &amp;lt;- c(k = input$k0)&#10; times &amp;lt;- seq(0, 100, by = 1)&#10; &#10; # 解微分方程&#10; out &amp;lt;- ode(y = state, times = times, func = solow_model, parms = parameters)&#10; &#10; # 处理结果&#10; df &amp;lt;- data.frame(&#10; Time = out[,1],&#10; Capital = out[,2],&#10; Output = (out[,2]^input$alpha) * (parameters[&amp;quot;A&amp;quot;] * exp((parameters[&amp;quot;n&amp;quot;]+parameters[&amp;quot;g&amp;quot;])*out[,1]))^(1-input$alpha),&#10; Consumption = (1 - input$s) * (out[,2]^input$alpha) * (parameters[&amp;quot;A&amp;quot;] * exp((parameters[&amp;quot;n&amp;quot;]+parameters[&amp;quot;g&amp;quot;])*out[,1]))^(1-input$alpha)&#10; )&#10; &#10; # 资本动态图&#10; output$capital_plot &amp;lt;- renderPlot({&#10; ggplot(df, aes(Time, Capital)) +&#10; geom_line(color = &amp;quot;darkblue&amp;quot;, size = 1.2) +&#10; geom_hline(yintercept = (input$s/(input$delta + input$n + input$g))^(1/(1-input$alpha)), &#10; linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;red&amp;quot;) +&#10; labs(title = &amp;quot;人均资本动态路径&amp;quot;,&#10; subtitle = &amp;quot;红色虚线表示理论稳态值&amp;quot;,&#10; y = &amp;quot;人均资本 (k)&amp;quot;) +&#10; theme_minimal()&#10; })&#10; &#10; # 相位图&#10; output$phase_diagram &amp;lt;- renderPlot({&#10; ggplot(df, aes(Capital, Output)) +&#10; geom_path(color = &amp;quot;darkgreen&amp;quot;, size = 1.2) +&#10; geom_point(aes(x = tail(Capital,1), y = tail(Output,1)), &#10; color = &amp;quot;red&amp;quot;, size = 3) +&#10; labs(title = &amp;quot;资本-产出相位图&amp;quot;,&#10; x = &amp;quot;人均资本 (k)&amp;quot;,&#10; y = &amp;quot;人均产出 (y)&amp;quot;) +&#10; theme_minimal()&#10; })&#10; &#10; # 稳态计算&#10; output$steady_state &amp;lt;- renderUI({&#10; k_star &amp;lt;- (input$s/(input$delta + input$n + input$g))^(1/(1-input$alpha))&#10; y_star &amp;lt;- k_star^input$alpha&#10; c_star &amp;lt;- (1 - input$s) * y_star&#10; &#10; HTML(paste(&#10; &amp;quot;&amp;lt;h4&amp;gt;稳态值计算:&amp;lt;/h4&amp;gt;&amp;quot;,&#10; paste0(&amp;quot;人均资本 k* = &amp;quot;, round(k_star, 3)),&#10; paste0(&amp;quot;人均产出 y* = &amp;quot;, round(y_star, 3)),&#10; paste0(&amp;quot;人均消费 c* = &amp;quot;, round(c_star, 3)),&#10; sep = &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;&#10; ))&#10; })&#10; })&#10; &#10; output$model_desc &amp;lt;- renderUI({&#10; HTML(&amp;quot;&amp;lt;p&amp;gt;标准索罗模型设定：&amp;lt;/p&amp;gt;&#10; &amp;lt;ul&amp;gt;&#10; &amp;lt;li&amp;gt;生产函数：Y = K&amp;lt;sup&amp;gt;α&amp;lt;/sup&amp;gt;(AL)&amp;lt;sup&amp;gt;1-α&amp;lt;/sup&amp;gt;&amp;lt;/li&amp;gt;&#10; &amp;lt;li&amp;gt;资本积累：dk/dt = sY - (δ + n + g)K&amp;lt;/li&amp;gt;&#10; &amp;lt;li&amp;gt;稳态条件：sy = (δ + n + g)k&amp;lt;/li&amp;gt;&#10; &amp;lt;/ul&amp;gt;&amp;quot;)&#10; })&#10;}&#10;&#10;shinyApp(ui = ui, server = server)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;div style="width: 100% ; height: 400px ; text-align: center; box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box;" class="muted well"&gt;Shiny applications not supported in static R Markdown documents&lt;/div&gt;&#10;&lt;h2 id="一些说明"&gt;&lt;a href="#%e4%b8%80%e4%ba%9b%e8%af%b4%e6%98%8e" class="header-anchor"&gt;&lt;/a&gt;一些说明&#10;&lt;/h2&gt;&lt;h3 id="可以互动调整以下参数"&gt;&lt;a href="#%e5%8f%af%e4%bb%a5%e4%ba%92%e5%8a%a8%e8%b0%83%e6%95%b4%e4%bb%a5%e4%b8%8b%e5%8f%82%e6%95%b0" class="header-anchor"&gt;&lt;/a&gt;可以互动调整以下参数：&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;储蓄率 (s)&lt;/li&gt;&#10;&lt;li&gt;资本折旧率 (δ)&lt;/li&gt;&#10;&lt;li&gt;人口增长率 (n)&lt;/li&gt;&#10;&lt;li&gt;技术进步率 (g)&lt;/li&gt;&#10;&lt;li&gt;资本产出弹性 (α)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="可视化展示"&gt;&lt;a href="#%e5%8f%af%e8%a7%86%e5%8c%96%e5%b1%95%e7%a4%ba" class="header-anchor"&gt;&lt;/a&gt;可视化展示&#10;&lt;/h3&gt;&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;/ul&gt;&#10;&lt;h3 id="技术实现"&gt;&lt;a href="#%e6%8a%80%e6%9c%af%e5%ae%9e%e7%8e%b0" class="header-anchor"&gt;&lt;/a&gt;技术实现&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;使用deSolve包进行微分方程求解&lt;/li&gt;&#10;&lt;li&gt;ggplot2生成动态图表&lt;/li&gt;&#10;&lt;li&gt;响应式编程实现实时更新&lt;/li&gt;&#10;&lt;li&gt;HTML输出格式化显示结果&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="使用方法"&gt;&lt;a href="#%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;使用方法：&#10;&lt;/h3&gt;&lt;p&gt;确保已安装所需包：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;install.packages(c(&amp;quot;shiny&amp;quot;, &amp;quot;ggplot2&amp;quot;, &amp;quot;deSolve&amp;quot;))&#10;&#10;shiny::runApp(&amp;quot;app.R&amp;quot;) # 假设代码保存为app.R&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h3 id="应用场景"&gt;&lt;a href="#%e5%ba%94%e7%94%a8%e5%9c%ba%e6%99%af" class="header-anchor"&gt;&lt;/a&gt;应用场景&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;展示储蓄率变化对稳态的影响&lt;/li&gt;&#10;&lt;li&gt;观察人口老龄化（降低n）的经济效应&lt;/li&gt;&#10;&lt;li&gt;演示技术进步如何提升长期增长路径&lt;/li&gt;&#10;&lt;li&gt;比较不同生产函数参数的影响&lt;/li&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;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&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></channel></rss>