<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>NASDAQ on 格物堂</title><link>https://gewutang.cn/tags/nasdaq/</link><description>Recent content in NASDAQ 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/tags/nasdaq/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>基于 LPPL 模型的纳斯达克指数泡沫检测与预测分析</title><link>https://gewutang.cn/2025/07/04/lppl/</link><pubDate>Fri, 04 Jul 2025 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2025/07/04/lppl/</guid><description>&#10;&#10;&#10;&lt;div id="摘要" class="section level1"&gt;&#10;&lt;h1&gt;摘要&lt;/h1&gt;&#10;&lt;p&gt;本文运用 Log-Periodic Power Law (LPPL) 模型对纳斯达克指数进行分析，旨在识别市场中的泡沫特征并预测潜在的趋势转折点。LPPL 模型结合了幂律和对数周期振荡，能够捕捉金融市场中的非线性特征和临界现象。&lt;/p&gt;&#10;&lt;p&gt;通过 R 语言实现模型拟合与参数估计，我们对纳斯达克指数在不同历史时期的泡沫形成与破裂过程进行了实证研究，并验证了模型在市场极端波动情况下的应用价值。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div id="lppl-模型理论基础" class="section level1"&gt;&#10;&lt;h1&gt;LPPL 模型理论基础&lt;/h1&gt;&#10;&lt;p&gt;LPPL 模型由 Didier Sornette 提出的一种用于描述金融市场泡沫和崩溃的数学模型，其核心思想是将价格的加速上涨（或下跌）与对数周期性振荡相结合，反映市场参与者的从众心理和正反馈机制。&lt;/p&gt;&#10;&lt;p&gt;LPPL 模型的数学表达式为：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;\ln P(t) = A + B(t_c - t)^\beta + C(t_c - t)^\beta \cos\left[\omega \ln(t_c - t) + \phi\right]&#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;\(P(t)\)&lt;/span&gt; 是资产价格&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="math inline"&gt;\(t_c\)&lt;/span&gt; 是临界时间点（泡沫破裂的理论时间）&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="math inline"&gt;\(\beta\)&lt;/span&gt; 是幂律指数（ &lt;span class="math inline"&gt;\(0 &amp;lt; \beta &amp;lt; 1\)&lt;/span&gt; ），控制价格加速上涨的速率&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="math inline"&gt;\(\omega\)&lt;/span&gt; 是振荡频率，控制对数周期振荡的周期&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="math inline"&gt;\(\phi\)&lt;/span&gt; 是相位角，控制振荡的起始位置&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="math inline"&gt;\(A, B, C\)&lt;/span&gt; 是常数参数，分别表示价格基准水平、趋势方向和振荡幅度&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;模型各部分的经济学解释&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;幂律部分 &lt;span class="math inline"&gt;\(B(t_c - t)^\beta\)&lt;/span&gt; :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;加速特征：当 t 趋近于 &lt;span class="math inline"&gt;\(t_c\)&lt;/span&gt; 时，&lt;span class="math inline"&gt;\((t_c - t)^\beta\)&lt;/span&gt; 趋近于 0，但由于 &lt;span class="math inline"&gt;\(\beta &amp;lt; 1\)&lt;/span&gt;，其导数会趋向无穷大，导致价格加速上涨（若 &lt;span class="math inline"&gt;\(\beta&amp;lt;0\)&lt;/span&gt; 则为加速下跌）。&lt;/li&gt;&#10;&lt;li&gt;市场含义：反映投资者的从众心理和正反馈机制，随着泡沫接近破裂，价格变化速率不断加快。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;对数周期振荡部分 &lt;span class="math inline"&gt;\(C(t_c - t)^\beta \cos\left[\omega \ln(t_c - t) + \phi\right]\)&lt;/span&gt; ：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;对数周期性：振荡频率随时间对数变化，表现为周期逐渐缩短的波动。&lt;/li&gt;&#10;&lt;li&gt;市场含义：反映市场参与者的情绪波动和多空博弈。随着临界时间点临近，投资者对泡沫破裂的预期增强，导致市场波动加剧且周期变短。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;模型中的参数都有明确的经济学意义。其中，&lt;span class="math inline"&gt;\(t_c\)&lt;/span&gt; 表示模型预测的泡沫破裂时间点；&lt;span class="math inline"&gt;\(\beta\)&lt;/span&gt; 反映市场的脆弱性，&lt;span class="math inline"&gt;\(\beta\)&lt;/span&gt; 越小表示价格加速越快，泡沫越脆弱；&lt;span class="math inline"&gt;\(\omega\)&lt;/span&gt; 与市场参与者的群体行为周期相关，较高的 &lt;span class="math inline"&gt;\(\omega\)&lt;/span&gt; 表示市场情绪波动更频繁。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;估计模型参数&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;估计 LPPL 模型的核心是通过历史价格数据找到一组参数 &lt;span class="math inline"&gt;\(\{A, B, C, \beta, \omega, \phi, t_c\}\)&lt;/span&gt;，使得模型预测值与实际价格的拟合误差最小化。这通常通过以下步骤实现：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;目标函数构建&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;定义残差平方和（SSE）作为目标函数：&lt;/p&gt;&#10;&lt;p&gt;&lt;span class="math display"&gt;\[&#10;\text{SSE} = \sum_{i=1}^N \left[ \ln P(t_i) - \left( A + B(t_c - t_i)^\beta + C(t_c - t_i)^\beta \cos\left(\omega \ln(t_c - t_i) + \phi\right) \right) \right]^2&#10;\]&lt;/span&gt;&lt;/p&gt;&#10;&lt;p&gt;其中 &lt;span class="math inline"&gt;\(P(t_i)\)&lt;/span&gt; 是实际价格，&lt;span class="math inline"&gt;\(N\)&lt;/span&gt; 是样本量。&lt;/p&gt;&#10;&lt;p&gt;由于 LPPL 模型是非线性的，且参数之间存在复杂的相互作用，通常使用全局优化算法求解，如：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;差分进化算法（DE）：在 R 代码中使用的 DEoptim 包即基于此算法&lt;/li&gt;&#10;&lt;li&gt;遗传算法（GA）&lt;/li&gt;&#10;&lt;li&gt;模拟退火算法&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;为确保参数的合理性，还需设置对参数的约束条件，具体如下：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;span class="math inline"&gt;\(t_c &amp;gt; \text{当前时间}\)&lt;/span&gt; ：临界时间必须在未来&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="math inline"&gt;\(0 &amp;lt; \beta &amp;lt; 1\)&lt;/span&gt; ：确保幂律部分的加速特性&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="math inline"&gt;\(\omega &amp;gt; 2\pi\)&lt;/span&gt; ：确保存在足够的振荡周期&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="math inline"&gt;\(A &amp;gt; 0\)&lt;/span&gt; ：确保对数价格有意义&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;由于模型包含对数和幂指数运算，当 t 接近 &lt;span class="math inline"&gt;\(t_c\)&lt;/span&gt; 时容易出现数值溢出或下溢。在实际计算中，通常需要：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;对 &lt;span class="math inline"&gt;\(t_c - t\)&lt;/span&gt; 设置最小值（如 1e-10）。&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="r-语言实现-lppl-模型分析" class="section level1"&gt;&#10;&lt;h1&gt;R 语言实现 LPPL 模型分析&lt;/h1&gt;&#10;&lt;p&gt;下面是使用 R 语言实现 LPPL 模型分析纳斯达克指数的完整代码：&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 加载必要的包&#10;library(quantmod)&#10;library(DEoptim)&#10;library(ggplot2)&#10;library(reshape2)&#10;library(showtext)&#10;font_add(&amp;quot;SimHei&amp;quot;, regular=&amp;quot;SimHei.ttf&amp;quot;)&#10;showtext_auto()&#10;&#10;# 获取纳斯达克指数数据&#10;getSymbols(&amp;quot;^IXIC&amp;quot;, from = &amp;quot;2024-01-01&amp;quot;, to = Sys.Date())&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## [1] &amp;quot;IXIC&amp;quot;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;nasdaq &amp;lt;- IXIC$IXIC.Close&#10;names(nasdaq) &amp;lt;- &amp;quot;Close&amp;quot;&#10;&#10;# 数据预处理&#10;prices &amp;lt;- as.numeric(nasdaq)&#10;dates &amp;lt;- index(nasdaq)&#10;t &amp;lt;- seq_along(prices)&#10;&#10;# LPPL模型函数（优化数值稳定性）&#10;lppl &amp;lt;- function(t, tc, beta, omega, phi, A, B, C) {&#10; safe_diff &amp;lt;- pmax(tc - t, 1e-10)&#10; power_term &amp;lt;- safe_diff^beta&#10; cos_term &amp;lt;- cos(omega * log(safe_diff) + phi)&#10; result &amp;lt;- A + B * power_term + C * power_term * cos_term&#10; result &amp;lt;- pmax(pmin(result, 20), -20)&#10; return(result)&#10;}&#10;&#10;# 残差平方和函数&#10;lppl_sse &amp;lt;- function(params, t, y) {&#10; tc &amp;lt;- params[1]&#10; beta &amp;lt;- params[2]&#10; omega &amp;lt;- params[3]&#10; phi &amp;lt;- params[4]&#10; A &amp;lt;- params[5]&#10; B &amp;lt;- params[6]&#10; C &amp;lt;- params[7]&#10; &#10; if (tc &amp;lt;= max(t) + 1 || beta &amp;lt;= 0 || beta &amp;gt;= 1 || omega &amp;lt;= 0 || A &amp;lt; 0) {&#10; return(1e10)&#10; }&#10; &#10; y_pred &amp;lt;- lppl(t, tc, beta, omega, phi, A, B, C)&#10; sum((log(y) - y_pred)^2)&#10;}&#10;&#10;# 定义参数优化边界&#10;lower &amp;lt;- c(max(t) + 5, 0.1, 2 * pi, 0, min(log(prices)), -100, -100)&#10;upper &amp;lt;- c(max(t) + 365, 0.9, 10 * pi, 2 * pi, max(log(prices)), 100, 100)&#10;&#10;# 差分进化算法优化&#10;set.seed(123)&#10;result &amp;lt;- DEoptim(lppl_sse, lower, upper,&#10; control = list(itermax = 200, NP = 100, strategy = 2, trace = TRUE),&#10; t = t, y = prices)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## Iteration: 1 bestvalit: 39895.714279 bestmemit: 476.249449 0.558294 18.948798 5.937831 9.814416 68.908510 -38.291566&#10;## Iteration: 2 bestvalit: 29497.840447 bestmemit: 434.050449 0.319333 13.766252 6.139294 9.924482 5.318016 -6.565053&#10;## Iteration: 3 bestvalit: 29497.840447 bestmemit: 434.050449 0.319333 13.766252 6.139294 9.924482 5.318016 -6.565053&#10;## Iteration: 4 bestvalit: 29497.840447 bestmemit: 434.050449 0.319333 13.766252 6.139294 9.924482 5.318016 -6.565053&#10;## Iteration: 5 bestvalit: 29497.840447 bestmemit: 434.050449 0.319333 13.766252 6.139294 9.924482 5.318016 -6.565053&#10;## Iteration: 6 bestvalit: 29497.840447 bestmemit: 434.050449 0.319333 13.766252 6.139294 9.924482 5.318016 -6.565053&#10;## Iteration: 7 bestvalit: 29497.840447 bestmemit: 434.050449 0.319333 13.766252 6.139294 9.924482 5.318016 -6.565053&#10;## Iteration: 8 bestvalit: 29497.840447 bestmemit: 434.050449 0.319333 13.766252 6.139294 9.924482 5.318016 -6.565053&#10;## Iteration: 9 bestvalit: 29497.840447 bestmemit: 434.050449 0.319333 13.766252 6.139294 9.924482 5.318016 -6.565053&#10;## Iteration: 10 bestvalit: 27066.806727 bestmemit: 651.029055 0.151405 8.772378 0.740875 9.824145 6.663771 -5.323786&#10;## Iteration: 11 bestvalit: 27066.806727 bestmemit: 651.029055 0.151405 8.772378 0.740875 9.824145 6.663771 -5.323786&#10;## Iteration: 12 bestvalit: 27066.806727 bestmemit: 651.029055 0.151405 8.772378 0.740875 9.824145 6.663771 -5.323786&#10;## Iteration: 13 bestvalit: 27066.806727 bestmemit: 651.029055 0.151405 8.772378 0.740875 9.824145 6.663771 -5.323786&#10;## Iteration: 14 bestvalit: 11955.860681 bestmemit: 435.863572 0.143216 22.799105 0.221635 9.753128 -2.266998 1.829183&#10;## Iteration: 15 bestvalit: 11955.860681 bestmemit: 435.863572 0.143216 22.799105 0.221635 9.753128 -2.266998 1.829183&#10;## Iteration: 16 bestvalit: 11955.860681 bestmemit: 435.863572 0.143216 22.799105 0.221635 9.753128 -2.266998 1.829183&#10;## Iteration: 17 bestvalit: 4159.769617 bestmemit: 435.863572 0.143216 22.232637 4.730370 9.767731 0.690221 1.829183&#10;## Iteration: 18 bestvalit: 4159.769617 bestmemit: 435.863572 0.143216 22.232637 4.730370 9.767731 0.690221 1.829183&#10;## Iteration: 19 bestvalit: 4159.769617 bestmemit: 435.863572 0.143216 22.232637 4.730370 9.767731 0.690221 1.829183&#10;## Iteration: 20 bestvalit: 4159.769617 bestmemit: 435.863572 0.143216 22.232637 4.730370 9.767731 0.690221 1.829183&#10;## Iteration: 21 bestvalit: 4159.769617 bestmemit: 435.863572 0.143216 22.232637 4.730370 9.767731 0.690221 1.829183&#10;## Iteration: 22 bestvalit: 4135.691142 bestmemit: 435.863572 0.143216 15.614739 1.345954 9.767731 0.690221 1.829183&#10;## Iteration: 23 bestvalit: 4135.691142 bestmemit: 435.863572 0.143216 15.614739 1.345954 9.767731 0.690221 1.829183&#10;## Iteration: 24 bestvalit: 4135.691142 bestmemit: 435.863572 0.143216 15.614739 1.345954 9.767731 0.690221 1.829183&#10;## Iteration: 25 bestvalit: 4135.691142 bestmemit: 435.863572 0.143216 15.614739 1.345954 9.767731 0.690221 1.829183&#10;## Iteration: 26 bestvalit: 3966.594960 bestmemit: 470.360050 0.143216 15.614739 1.345954 9.767731 0.690221 1.829183&#10;## Iteration: 27 bestvalit: 3966.594960 bestmemit: 470.360050 0.143216 15.614739 1.345954 9.767731 0.690221 1.829183&#10;## Iteration: 28 bestvalit: 3966.594960 bestmemit: 470.360050 0.143216 15.614739 1.345954 9.767731 0.690221 1.829183&#10;## Iteration: 29 bestvalit: 3966.594960 bestmemit: 470.360050 0.143216 15.614739 1.345954 9.767731 0.690221 1.829183&#10;## Iteration: 30 bestvalit: 3966.594960 bestmemit: 470.360050 0.143216 15.614739 1.345954 9.767731 0.690221 1.829183&#10;## Iteration: 31 bestvalit: 3966.594960 bestmemit: 470.360050 0.143216 15.614739 1.345954 9.767731 0.690221 1.829183&#10;## Iteration: 32 bestvalit: 3966.594960 bestmemit: 470.360050 0.143216 15.614739 1.345954 9.767731 0.690221 1.829183&#10;## Iteration: 33 bestvalit: 3966.594960 bestmemit: 470.360050 0.143216 15.614739 1.345954 9.767731 0.690221 1.829183&#10;## Iteration: 34 bestvalit: 3966.594960 bestmemit: 470.360050 0.143216 15.614739 1.345954 9.767731 0.690221 1.829183&#10;## Iteration: 35 bestvalit: 3707.731173 bestmemit: 470.360050 0.143216 15.614739 3.844729 9.767731 0.690221 1.829183&#10;## Iteration: 36 bestvalit: 1346.903100 bestmemit: 404.762508 0.155723 16.208832 1.750229 9.819536 -0.842073 0.071061&#10;## Iteration: 37 bestvalit: 1346.903100 bestmemit: 404.762508 0.155723 16.208832 1.750229 9.819536 -0.842073 0.071061&#10;## Iteration: 38 bestvalit: 1346.903100 bestmemit: 404.762508 0.155723 16.208832 1.750229 9.819536 -0.842073 0.071061&#10;## Iteration: 39 bestvalit: 1346.903100 bestmemit: 404.762508 0.155723 16.208832 1.750229 9.819536 -0.842073 0.071061&#10;## Iteration: 40 bestvalit: 1346.903100 bestmemit: 404.762508 0.155723 16.208832 1.750229 9.819536 -0.842073 0.071061&#10;## Iteration: 41 bestvalit: 1346.903100 bestmemit: 404.762508 0.155723 16.208832 1.750229 9.819536 -0.842073 0.071061&#10;## Iteration: 42 bestvalit: 1279.262391 bestmemit: 404.762508 0.155723 16.808283 5.145210 9.862787 -0.842073 0.071061&#10;## Iteration: 43 bestvalit: 1279.262391 bestmemit: 404.762508 0.155723 16.808283 5.145210 9.862787 -0.842073 0.071061&#10;## Iteration: 44 bestvalit: 1279.262391 bestmemit: 404.762508 0.155723 16.808283 5.145210 9.862787 -0.842073 0.071061&#10;## Iteration: 45 bestvalit: 1279.262391 bestmemit: 404.762508 0.155723 16.808283 5.145210 9.862787 -0.842073 0.071061&#10;## Iteration: 46 bestvalit: 1252.379043 bestmemit: 404.762508 0.155723 18.245900 5.145210 9.862787 -0.842073 0.071061&#10;## Iteration: 47 bestvalit: 1252.379043 bestmemit: 404.762508 0.155723 18.245900 5.145210 9.862787 -0.842073 0.071061&#10;## Iteration: 48 bestvalit: 1252.379043 bestmemit: 404.762508 0.155723 18.245900 5.145210 9.862787 -0.842073 0.071061&#10;## Iteration: 49 bestvalit: 1252.379043 bestmemit: 404.762508 0.155723 18.245900 5.145210 9.862787 -0.842073 0.071061&#10;## Iteration: 50 bestvalit: 36.028168 bestmemit: 459.046057 0.115371 23.997670 2.837452 9.858859 -0.186635 0.077161&#10;## Iteration: 51 bestvalit: 36.028168 bestmemit: 459.046057 0.115371 23.997670 2.837452 9.858859 -0.186635 0.077161&#10;## Iteration: 52 bestvalit: 35.907156 bestmemit: 459.046057 0.115371 23.997670 3.006606 9.858859 -0.186635 0.077161&#10;## Iteration: 53 bestvalit: 35.907156 bestmemit: 459.046057 0.115371 23.997670 3.006606 9.858859 -0.186635 0.077161&#10;## Iteration: 54 bestvalit: 35.907156 bestmemit: 459.046057 0.115371 23.997670 3.006606 9.858859 -0.186635 0.077161&#10;## Iteration: 55 bestvalit: 35.907156 bestmemit: 459.046057 0.115371 23.997670 3.006606 9.858859 -0.186635 0.077161&#10;## Iteration: 56 bestvalit: 35.907156 bestmemit: 459.046057 0.115371 23.997670 3.006606 9.858859 -0.186635 0.077161&#10;## Iteration: 57 bestvalit: 35.907156 bestmemit: 459.046057 0.115371 23.997670 3.006606 9.858859 -0.186635 0.077161&#10;## Iteration: 58 bestvalit: 35.907156 bestmemit: 459.046057 0.115371 23.997670 3.006606 9.858859 -0.186635 0.077161&#10;## Iteration: 59 bestvalit: 34.377659 bestmemit: 428.703249 0.115371 23.997670 3.006606 9.858859 -0.186635 0.077161&#10;## Iteration: 60 bestvalit: 31.613471 bestmemit: 462.969626 0.105108 23.997670 3.006606 9.858859 -0.186635 0.077161&#10;## Iteration: 61 bestvalit: 31.613471 bestmemit: 462.969626 0.105108 23.997670 3.006606 9.858859 -0.186635 0.077161&#10;## Iteration: 62 bestvalit: 31.613471 bestmemit: 462.969626 0.105108 23.997670 3.006606 9.858859 -0.186635 0.077161&#10;## Iteration: 63 bestvalit: 31.613471 bestmemit: 462.969626 0.105108 23.997670 3.006606 9.858859 -0.186635 0.077161&#10;## Iteration: 64 bestvalit: 31.613471 bestmemit: 462.969626 0.105108 23.997670 3.006606 9.858859 -0.186635 0.077161&#10;## Iteration: 65 bestvalit: 31.424669 bestmemit: 462.969626 0.105108 23.997670 3.185548 9.858859 -0.186635 0.077161&#10;## Iteration: 66 bestvalit: 31.323268 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.858859 -0.186635 0.077161&#10;## Iteration: 67 bestvalit: 31.323268 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.858859 -0.186635 0.077161&#10;## Iteration: 68 bestvalit: 31.323268 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.858859 -0.186635 0.077161&#10;## Iteration: 69 bestvalit: 26.740039 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.883282 -0.186635 0.077161&#10;## Iteration: 70 bestvalit: 26.740039 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.883282 -0.186635 0.077161&#10;## Iteration: 71 bestvalit: 26.740039 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.883282 -0.186635 0.077161&#10;## Iteration: 72 bestvalit: 26.740039 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.883282 -0.186635 0.077161&#10;## Iteration: 73 bestvalit: 26.740039 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.883282 -0.186635 0.077161&#10;## Iteration: 74 bestvalit: 26.740039 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.883282 -0.186635 0.077161&#10;## Iteration: 75 bestvalit: 26.740039 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.883282 -0.186635 0.077161&#10;## Iteration: 76 bestvalit: 26.740039 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.883282 -0.186635 0.077161&#10;## Iteration: 77 bestvalit: 26.740039 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.883282 -0.186635 0.077161&#10;## Iteration: 78 bestvalit: 23.060592 bestmemit: 566.173679 0.106387 30.107988 4.119188 9.782746 0.110396 0.063190&#10;## Iteration: 79 bestvalit: 23.060592 bestmemit: 566.173679 0.106387 30.107988 4.119188 9.782746 0.110396 0.063190&#10;## Iteration: 80 bestvalit: 23.060592 bestmemit: 566.173679 0.106387 30.107988 4.119188 9.782746 0.110396 0.063190&#10;## Iteration: 81 bestvalit: 8.540436 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.883282 -0.015204 0.077161&#10;## Iteration: 82 bestvalit: 8.540436 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.883282 -0.015204 0.077161&#10;## Iteration: 83 bestvalit: 8.540436 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.883282 -0.015204 0.077161&#10;## Iteration: 84 bestvalit: 8.540436 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.883282 -0.015204 0.077161&#10;## Iteration: 85 bestvalit: 8.540436 bestmemit: 462.969626 0.105108 23.997670 3.274915 9.883282 -0.015204 0.077161&#10;## Iteration: 86 bestvalit: 8.058381 bestmemit: 653.124574 0.112853 20.292797 1.503638 9.843571 -0.023273 0.055355&#10;## Iteration: 87 bestvalit: 4.301173 bestmemit: 431.735845 0.112853 20.292797 1.503638 9.843571 -0.023273 0.055355&#10;## Iteration: 88 bestvalit: 4.301173 bestmemit: 431.735845 0.112853 20.292797 1.503638 9.843571 -0.023273 0.055355&#10;## Iteration: 89 bestvalit: 4.301173 bestmemit: 431.735845 0.112853 20.292797 1.503638 9.843571 -0.023273 0.055355&#10;## Iteration: 90 bestvalit: 3.072398 bestmemit: 431.735845 0.112853 20.292797 1.503638 9.843571 -0.023273 0.027296&#10;## Iteration: 91 bestvalit: 3.072398 bestmemit: 431.735845 0.112853 20.292797 1.503638 9.843571 -0.023273 0.027296&#10;## Iteration: 92 bestvalit: 3.072398 bestmemit: 431.735845 0.112853 20.292797 1.503638 9.843571 -0.023273 0.027296&#10;## Iteration: 93 bestvalit: 3.069272 bestmemit: 431.735845 0.117142 20.292797 1.503638 9.843571 -0.023273 0.027296&#10;## Iteration: 94 bestvalit: 3.069272 bestmemit: 431.735845 0.117142 20.292797 1.503638 9.843571 -0.023273 0.027296&#10;## Iteration: 95 bestvalit: 3.069272 bestmemit: 431.735845 0.117142 20.292797 1.503638 9.843571 -0.023273 0.027296&#10;## Iteration: 96 bestvalit: 2.984702 bestmemit: 389.123730 0.102265 28.841937 1.870751 9.810743 -0.038394 0.011953&#10;## Iteration: 97 bestvalit: 2.984702 bestmemit: 389.123730 0.102265 28.841937 1.870751 9.810743 -0.038394 0.011953&#10;## Iteration: 98 bestvalit: 2.984702 bestmemit: 389.123730 0.102265 28.841937 1.870751 9.810743 -0.038394 0.011953&#10;## Iteration: 99 bestvalit: 2.984702 bestmemit: 389.123730 0.102265 28.841937 1.870751 9.810743 -0.038394 0.011953&#10;## Iteration: 100 bestvalit: 2.984702 bestmemit: 389.123730 0.102265 28.841937 1.870751 9.810743 -0.038394 0.011953&#10;## Iteration: 101 bestvalit: 2.984702 bestmemit: 389.123730 0.102265 28.841937 1.870751 9.810743 -0.038394 0.011953&#10;## Iteration: 102 bestvalit: 2.786511 bestmemit: 430.424118 0.103742 14.613617 0.759550 9.698384 0.043712 -0.032776&#10;## Iteration: 103 bestvalit: 2.786511 bestmemit: 430.424118 0.103742 14.613617 0.759550 9.698384 0.043712 -0.032776&#10;## Iteration: 104 bestvalit: 2.786511 bestmemit: 430.424118 0.103742 14.613617 0.759550 9.698384 0.043712 -0.032776&#10;## Iteration: 105 bestvalit: 2.786511 bestmemit: 430.424118 0.103742 14.613617 0.759550 9.698384 0.043712 -0.032776&#10;## Iteration: 106 bestvalit: 2.786511 bestmemit: 430.424118 0.103742 14.613617 0.759550 9.698384 0.043712 -0.032776&#10;## Iteration: 107 bestvalit: 2.786511 bestmemit: 430.424118 0.103742 14.613617 0.759550 9.698384 0.043712 -0.032776&#10;## Iteration: 108 bestvalit: 2.449609 bestmemit: 405.335044 0.104002 30.652301 2.031517 9.889521 -0.062861 0.013673&#10;## Iteration: 109 bestvalit: 2.449609 bestmemit: 405.335044 0.104002 30.652301 2.031517 9.889521 -0.062861 0.013673&#10;## Iteration: 110 bestvalit: 2.449609 bestmemit: 405.335044 0.104002 30.652301 2.031517 9.889521 -0.062861 0.013673&#10;## Iteration: 111 bestvalit: 2.416582 bestmemit: 624.144745 0.110539 17.348768 1.165956 9.926090 -0.074172 -0.006543&#10;## Iteration: 112 bestvalit: 2.416582 bestmemit: 624.144745 0.110539 17.348768 1.165956 9.926090 -0.074172 -0.006543&#10;## Iteration: 113 bestvalit: 2.416582 bestmemit: 624.144745 0.110539 17.348768 1.165956 9.926090 -0.074172 -0.006543&#10;## Iteration: 114 bestvalit: 2.416582 bestmemit: 624.144745 0.110539 17.348768 1.165956 9.926090 -0.074172 -0.006543&#10;## Iteration: 115 bestvalit: 1.975567 bestmemit: 561.807558 0.110729 9.917919 4.501285 9.806397 -0.009725 0.048482&#10;## Iteration: 116 bestvalit: 1.975567 bestmemit: 561.807558 0.110729 9.917919 4.501285 9.806397 -0.009725 0.048482&#10;## Iteration: 117 bestvalit: 1.975567 bestmemit: 561.807558 0.110729 9.917919 4.501285 9.806397 -0.009725 0.048482&#10;## Iteration: 118 bestvalit: 1.975567 bestmemit: 561.807558 0.110729 9.917919 4.501285 9.806397 -0.009725 0.048482&#10;## Iteration: 119 bestvalit: 1.975567 bestmemit: 561.807558 0.110729 9.917919 4.501285 9.806397 -0.009725 0.048482&#10;## Iteration: 120 bestvalit: 1.975567 bestmemit: 561.807558 0.110729 9.917919 4.501285 9.806397 -0.009725 0.048482&#10;## Iteration: 121 bestvalit: 1.975567 bestmemit: 561.807558 0.110729 9.917919 4.501285 9.806397 -0.009725 0.048482&#10;## Iteration: 122 bestvalit: 1.975567 bestmemit: 561.807558 0.110729 9.917919 4.501285 9.806397 -0.009725 0.048482&#10;## Iteration: 123 bestvalit: 1.975567 bestmemit: 561.807558 0.110729 9.917919 4.501285 9.806397 -0.009725 0.048482&#10;## Iteration: 124 bestvalit: 1.975567 bestmemit: 561.807558 0.110729 9.917919 4.501285 9.806397 -0.009725 0.048482&#10;## Iteration: 125 bestvalit: 1.724043 bestmemit: 566.134988 0.114057 9.486160 3.679243 9.880730 -0.043408 -0.031316&#10;## Iteration: 126 bestvalit: 1.724043 bestmemit: 566.134988 0.114057 9.486160 3.679243 9.880730 -0.043408 -0.031316&#10;## Iteration: 127 bestvalit: 1.724043 bestmemit: 566.134988 0.114057 9.486160 3.679243 9.880730 -0.043408 -0.031316&#10;## Iteration: 128 bestvalit: 1.724043 bestmemit: 566.134988 0.114057 9.486160 3.679243 9.880730 -0.043408 -0.031316&#10;## Iteration: 129 bestvalit: 1.712154 bestmemit: 566.134988 0.116346 9.486160 3.679243 9.880730 -0.043408 -0.031316&#10;## Iteration: 130 bestvalit: 1.712154 bestmemit: 566.134988 0.116346 9.486160 3.679243 9.880730 -0.043408 -0.031316&#10;## Iteration: 131 bestvalit: 1.712154 bestmemit: 566.134988 0.116346 9.486160 3.679243 9.880730 -0.043408 -0.031316&#10;## Iteration: 132 bestvalit: 1.712154 bestmemit: 566.134988 0.116346 9.486160 3.679243 9.880730 -0.043408 -0.031316&#10;## Iteration: 133 bestvalit: 1.712154 bestmemit: 566.134988 0.116346 9.486160 3.679243 9.880730 -0.043408 -0.031316&#10;## Iteration: 134 bestvalit: 1.712154 bestmemit: 566.134988 0.116346 9.486160 3.679243 9.880730 -0.043408 -0.031316&#10;## Iteration: 135 bestvalit: 1.299255 bestmemit: 734.354653 0.115838 6.727759 2.859127 9.842684 -0.036713 0.048866&#10;## Iteration: 136 bestvalit: 1.299255 bestmemit: 734.354653 0.115838 6.727759 2.859127 9.842684 -0.036713 0.048866&#10;## Iteration: 137 bestvalit: 1.299255 bestmemit: 734.354653 0.115838 6.727759 2.859127 9.842684 -0.036713 0.048866&#10;## Iteration: 138 bestvalit: 1.299255 bestmemit: 734.354653 0.115838 6.727759 2.859127 9.842684 -0.036713 0.048866&#10;## Iteration: 139 bestvalit: 1.299255 bestmemit: 734.354653 0.115838 6.727759 2.859127 9.842684 -0.036713 0.048866&#10;## Iteration: 140 bestvalit: 1.299255 bestmemit: 734.354653 0.115838 6.727759 2.859127 9.842684 -0.036713 0.048866&#10;## Iteration: 141 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 142 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 143 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 144 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 145 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 146 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 147 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 148 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 149 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 150 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 151 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 152 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 153 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 154 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 155 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 156 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 157 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 158 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 159 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 160 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 161 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 162 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 163 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 164 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 165 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 166 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 167 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 168 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 169 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 170 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 171 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 172 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 173 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 174 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 175 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 176 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 177 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 178 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 179 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 180 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 181 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 182 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 183 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 184 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 185 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 186 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 187 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 188 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 189 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 190 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 191 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 192 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 193 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 194 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 195 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 196 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 197 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 198 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 199 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&#10;## Iteration: 200 bestvalit: 1.232035 bestmemit: 464.938535 0.105270 6.670577 4.162642 9.899531 -0.058988 -0.048299&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;best_params &amp;lt;- result$optim$bestmem&#10;names(best_params) &amp;lt;- c(&amp;quot;tc&amp;quot;, &amp;quot;beta&amp;quot;, &amp;quot;omega&amp;quot;, &amp;quot;phi&amp;quot;, &amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;)&#10;&#10;# 计算拟合值&#10;fitted_values &amp;lt;- lppl(t, best_params[&amp;quot;tc&amp;quot;], best_params[&amp;quot;beta&amp;quot;],&#10; best_params[&amp;quot;omega&amp;quot;], best_params[&amp;quot;phi&amp;quot;],&#10; best_params[&amp;quot;A&amp;quot;], best_params[&amp;quot;B&amp;quot;], best_params[&amp;quot;C&amp;quot;])&#10;predicted_prices &amp;lt;- exp(fitted_values)&#10;&#10;# 预测未来120天（修正行数不一致问题）&#10;future_t &amp;lt;- seq(max(t), max(t) + 119) # 改为119确保总天数120&#10;future_fitted &amp;lt;- sapply(future_t, function(x) {&#10; if (x &amp;gt;= best_params[&amp;quot;tc&amp;quot;] - 1e-5) {&#10; best_params[&amp;quot;A&amp;quot;]&#10; } else {&#10; lppl(x, best_params[&amp;quot;tc&amp;quot;], best_params[&amp;quot;beta&amp;quot;],&#10; best_params[&amp;quot;omega&amp;quot;], best_params[&amp;quot;phi&amp;quot;],&#10; best_params[&amp;quot;A&amp;quot;], best_params[&amp;quot;B&amp;quot;], best_params[&amp;quot;C&amp;quot;])&#10; }&#10;})&#10;future_prices &amp;lt;- exp(future_fitted)&#10;future_dates &amp;lt;- seq(max(dates), by = &amp;quot;day&amp;quot;, length.out = 120)&#10;&#10;# 可视化结果（确保数据长度一致）&#10;plot_data &amp;lt;- data.frame(&#10; Date = c(dates, future_dates),&#10; Price = c(prices, future_prices),&#10; Type = c(rep(&amp;quot;Actual&amp;quot;, length(prices)), rep(&amp;quot;Predicted&amp;quot;, length(future_prices)))&#10;)&#10;&#10;p1 &amp;lt;- ggplot(plot_data, aes(x = Date, y = Price, color = Type)) +&#10; geom_line() +&#10; geom_vline(xintercept = as.Date(dates[1]) + best_params[&amp;quot;tc&amp;quot;], linetype = &amp;quot;dashed&amp;quot;) +&#10; labs(title = &amp;quot;纳斯达克指数LPPL模型拟合与预测&amp;quot;,&#10; y = &amp;quot;指数值&amp;quot;,&#10; x = &amp;quot;日期&amp;quot;) +&#10; scale_color_manual(values = c(&amp;quot;Actual&amp;quot; = &amp;quot;blue&amp;quot;, &amp;quot;Predicted&amp;quot; = &amp;quot;red&amp;quot;)) +&#10; theme_minimal()&#10;&#10;# 分析对数周期振荡&#10;oscillations &amp;lt;- best_params[&amp;quot;C&amp;quot;] * (best_params[&amp;quot;tc&amp;quot;] - t)^best_params[&amp;quot;beta&amp;quot;] * &#10; cos(best_params[&amp;quot;omega&amp;quot;] * log(best_params[&amp;quot;tc&amp;quot;] - t) + best_params[&amp;quot;phi&amp;quot;])&#10;&#10;# 可视化振荡部分&#10;osc_data &amp;lt;- data.frame(&#10; Date = dates,&#10; Oscillation = oscillations&#10;)&#10;&#10;p2 &amp;lt;- ggplot(osc_data, aes(x = Date, y = Oscillation)) +&#10; geom_line(color = &amp;quot;blue&amp;quot;) +&#10; geom_hline(yintercept = 0, linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray&amp;quot;) +&#10; labs(title = &amp;quot;LPPL模型中的对数周期振荡&amp;quot;,&#10; y = &amp;quot;振荡幅度&amp;quot;,&#10; x = &amp;quot;日期&amp;quot;) +&#10; theme_minimal()&#10;&#10;# 预测未来价格走势（增加稳定性检查）&#10;future_t &amp;lt;- seq(max(t), max(t) + 120, by = 1) # 预测未来120天&#10;future_fitted &amp;lt;- numeric(length(future_t))&#10;&#10;for(i in seq_along(future_t)) {&#10; if(future_t[i] &amp;gt;= best_params[&amp;quot;tc&amp;quot;] - 1) {&#10; future_fitted[i] &amp;lt;- fitted_values[length(fitted_values)]&#10; } else {&#10; future_fitted[i] &amp;lt;- lppl(future_t[i], best_params[&amp;quot;tc&amp;quot;], best_params[&amp;quot;beta&amp;quot;], &#10; best_params[&amp;quot;omega&amp;quot;], best_params[&amp;quot;phi&amp;quot;], &#10; best_params[&amp;quot;A&amp;quot;], best_params[&amp;quot;B&amp;quot;], best_params[&amp;quot;C&amp;quot;])&#10; }&#10;}&#10;&#10;future_prices &amp;lt;- exp(future_fitted)&#10;future_prices &amp;lt;- ifelse(is.finite(future_prices), future_prices, NA)&#10;&#10;future_dates &amp;lt;- seq(max(dates), by = &amp;quot;day&amp;quot;, length.out = length(future_t))&#10;&#10;# 合并历史与预测数据&#10;prediction_data &amp;lt;- data.frame(&#10; Date = c(as.Date(dates), future_dates),&#10; Price = c(prices, future_prices),&#10; Type = c(rep(&amp;quot;历史&amp;quot;, length(prices)), rep(&amp;quot;预测&amp;quot;, length(future_prices)))&#10;)&#10;&#10;# 可视化预测结果&#10;p3 &amp;lt;- ggplot(prediction_data, aes(x = Date, y = Price, color = Type)) +&#10; geom_line() +&#10; geom_vline(xintercept = as.numeric(max(dates)), linetype = &amp;quot;dashed&amp;quot;, color = &amp;quot;gray&amp;quot;) +&#10; labs(title = &amp;quot;纳斯达克指数LPPL模型预测&amp;quot;,&#10; y = &amp;quot;指数值&amp;quot;,&#10; x = &amp;quot;日期&amp;quot;) +&#10; scale_color_manual(values = c(&amp;quot;历史&amp;quot; = &amp;quot;black&amp;quot;, &amp;quot;预测&amp;quot; = &amp;quot;red&amp;quot;)) +&#10; theme_minimal()&#10;&#10;print(p1)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img src="https://gewutang.cn/2025/07/04/lppl/index_files/figure-html/LPPL-1.png" width="672" /&gt;&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;print(p2)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img src="https://gewutang.cn/2025/07/04/lppl/index_files/figure-html/LPPL-2.png" width="672" /&gt;&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;print(p3)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img src="https://gewutang.cn/2025/07/04/lppl/index_files/figure-html/LPPL-3.png" width="672" /&gt;&lt;/p&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;# 输出关键参数&#10;cat(&amp;quot;LPPL模型参数估计结果:\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## LPPL模型参数估计结果:&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;print(best_params)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## tc beta omega phi A B &#10;## 464.93853499 0.10526956 6.67057660 4.16264248 9.89953086 -0.05898808 &#10;## C &#10;## -0.04829888&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre class="r"&gt;&lt;code&gt;cat(&amp;quot;\n预测的临界时间点:&amp;quot;, as.character(as.Date(dates[1] + round(best_params[&amp;quot;tc&amp;quot;]))), &amp;quot;\n&amp;quot;)&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;## &#10;## 预测的临界时间点: 2025-04-11&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&lt;div id="实证分析结果" class="section level1"&gt;&#10;&lt;h1&gt;实证分析结果&lt;/h1&gt;&#10;&lt;p&gt;通过对纳斯达克指数的 LPPL模型拟合，我们得到以下主要发现：&lt;/p&gt;&#10;&lt;p&gt;泡沫特征识别：模型成功捕捉到了纳斯达克指数在特定时期的加速上涨特征，以及伴随的对数周期性振荡，这与理论上的泡沫形成过程高度一致。临界时间预测：基于参数估计结果，模型预测了潜在的临界时间点 &lt;span class="math inline"&gt;\(t_c\)&lt;/span&gt;，这一时间点可视为泡沫可能破裂的理论时间。实际应用中，可结合其他指标（如交易量、波动率）进行综合判断。&lt;/p&gt;&#10;&lt;p&gt;振荡周期分析：对数周期振荡的频率参数 &lt;span class="math inline"&gt;\(\omega\)&lt;/span&gt; 反映了市场情绪的波动周期。通过分析振荡部分，我们可以识别市场参与者的从众行为强度及其变化趋势。&lt;/p&gt;&#10;&lt;p&gt;预测局限性：尽管 LPPL 模型在识别泡沫特征方面表现出色，但预测的临界时间点存在一定误差，特别是在市场环境发生重大变化时。因此，该模型更适合作为预警工具而非精确预测工具。&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;建议为提高 LPPL 模型的实用性，可考虑以下改进方向：多窗口分析：采用滚动窗口方法，定期重新估计模型参数，以适应市场结构的变化。集成其他指标：结合技术指标（如 RSI、MACD）和基本面因素，构建更全面的市场预警系统。参数优化改进：探索更高效的参数优化算法，提高模型拟合的稳定性和准确性。风险管理应用：将 LPPL 模型纳入风险管理框架，当检测到显著泡沫特征时，调整仓位或实施对冲策略。&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;LPPL 模型为分析金融市场中的泡沫现象提供了有力工具。通过对纳斯达克指数的实证分析，我们验证了模型在识别价格加速上涨和对数周期振荡方面的有效性。尽管模型预测存在一定局限性，但作为一种早期预警机制，它能够帮助投资者识别潜在的市场风险，及时调整投资策略。未来研究可进一步探索 LPPL 模型与其他市场分析方法的结合，以提高预测准确性和实用性。&lt;/p&gt;&#10;&lt;/div&gt;&#10;</description></item></channel></rss>