statsmodels.tsa.holtwinters.HoltWintersResults.simulate¶
-
HoltWintersResults.simulate(nsimulations, anchor=
None, repetitions=1, error='add', random_errors=None, random_state=None)[source]¶ 使用状态空间公式的随机模拟。
- Parameters:¶
- nsimulations
int 模拟步骤的数量。
- anchor
int,str,ordatetime,optional 模拟的第一个周期。模拟将以锚点之前的所有现有数据点为条件。类型取决于给定的内生变量在模型中的索引。两个特殊情况是字符串‘start’和‘end’。start表示从样本的第一个周期开始模拟,而end表示从样本后的第一个周期开始模拟。整数值可以从0到nobs,或者可以是负数以应用负索引。最后,如果向模型提供了日期/时间索引,则此参数可以是日期字符串或日期时间类型。默认值为‘end’。
- repetitions
int,optional 要生成的模拟路径数量。默认是1条模拟路径。
- error{“add”, “mul”, “additive”, “multiplicative”},
optional 状态空间公式的误差模型。默认是
"加法"。- random_errors
optional 指定如何获取随机误差。可以是以下之一:
None: 随机正态分布的值,方差根据拟合误差估计,从numpy的标准随机数生成器中抽取(可以使用random_state参数进行种子设定)。这是默认选项。来自
scipy.stats的分布函数,例如scipy.stats.norm:将分布函数拟合到拟合误差并从拟合的分布中抽取样本。 注意scipy.stats.norm和scipy.stats.norm()之间的区别,后者是一个冻结的分布函数。来自
scipy.stats的冻结分布函数,例如scipy.stats.norm(scale=2):从冻结的分布函数中抽取样本。一个形状为 (nsimulations, repetitions) 的
np.ndarray:使用给定的值作为随机误差。"bootstrap": 从拟合误差中对随机误差进行采样。
- random_state
intornp.random.RandomState,optional 随机数生成器的种子或一个
np.random.RandomState对象。仅在 random_errors 为None时使用。默认值为None。
- nsimulations
- Returns:¶
- sim
pd.Series,pd.DataFrameornp.ndarray 一个
np.ndarray、pd.Series或pd.DataFrame的模拟值。 如果原始数据是pd.Series或pd.DataFrame,sim 将是一个pd.Series如果 repetitions 是 1,并且是一个pd.DataFrame的形状 (nsimulations, repetitions) 否则。 否则,如果 repetitions 是 1,返回一个np.ndarray的形状 (nsimulations,),如果 repetitions 不是 1,则返回一个np.ndarray的形状 (nsimulations, repetitions)。
- sim
注释
该模拟基于Holt-Winter方法的状态空间模型。状态空间模型假设时间\(t\)的真实值围绕预测值随机分布。如果使用加性误差模型,这意味着:
\[\begin{split}y_t &= \hat{y}_{t|t-1} + e_t\\ e_t &\sim \mathcal{N}(0, \sigma^2)\end{split}\]使用乘法误差模型:
\[\begin{split}y_t &= \hat{y}_{t|t-1} \cdot (1 + e_t)\\ e_t &\sim \mathcal{N}(0, \sigma^2)\end{split}\]将这些方程代入平滑方程公式中,得到状态空间方程。这里使用的符号遵循[1]。
此外,
\[\begin{split}B_t &= b_{t-1} \circ_d \phi\\ L_t &= l_{t-1} \circ_b B_t\\ S_t &= s_{t-m}\\ Y_t &= L_t \circ_s S_t,\end{split}\]其中 \(\circ_d\) 是连接趋势和阻尼参数的操作(如果趋势是加性的则为乘法,如果趋势是乘性的则为幂),\(\circ_b\) 是连接水平和趋势的操作(如果趋势是加性的则为加法,如果趋势是乘性的则为乘法),\(\circ_s\) 是连接季节性到其余部分的操作。
状态空间方程可以表示为
\[\begin{split}y_t &= Y_t + \eta \cdot e_t\\ l_t &= L_t + \alpha \cdot (M_e \cdot L_t + \kappa_l) \cdot e_t\\ b_t &= B_t + \beta \cdot (M_e \cdot B_t + \kappa_b) \cdot e_t\\ s_t &= S_t + \gamma \cdot (M_e \cdot S_t + \kappa_s) \cdot e_t\\\end{split}\]与
\[\begin{split}\eta &= \begin{cases} Y_t\quad\text{if error is multiplicative}\\ 1\quad\text{else} \end{cases}\\ M_e &= \begin{cases} 1\quad\text{if error is multiplicative}\\ 0\quad\text{else} \end{cases}\\\end{split}\]并且,当使用加性误差模型时,
\[\begin{split}\kappa_l &= \begin{cases} \frac{1}{S_t}\quad \text{if seasonality is multiplicative}\\ 1\quad\text{else} \end{cases}\\ \kappa_b &= \begin{cases} \frac{\kappa_l}{l_{t-1}}\quad \text{if trend is multiplicative}\\ \kappa_l\quad\text{else} \end{cases}\\ \kappa_s &= \begin{cases} \frac{1}{L_t}\quad\text{if seasonality is multiplicative}\\ 1\quad\text{else} \end{cases}\end{split}\]当使用乘法误差模型时
\[\begin{split}\kappa_l &= \begin{cases} 0\quad \text{if seasonality is multiplicative}\\ S_t\quad\text{else} \end{cases}\\ \kappa_b &= \begin{cases} \frac{\kappa_l}{l_{t-1}}\quad \text{if trend is multiplicative}\\ \kappa_l + l_{t-1}\quad\text{else} \end{cases}\\ \kappa_s &= \begin{cases} 0\quad\text{if seasonality is multiplicative}\\ L_t\quad\text{else} \end{cases}\end{split}\]参考文献
[1]Hyndman, R.J., & Athanasopoulos, G. (2018) 预测:原理与实践,第二版,OTexts: 墨尔本,澳大利亚。OTexts.com/fpp2。访问于2020年2月28日。