# 数学函数 / 时间序列分析 ## `ar(y, p, approach)` 声明:function 自回归模型,AR(p)模型,选择使用最小二乘,Yule-Walker方法,Foiward-backward,Geometric lattice,Burg's lattice-bas去估计p阶自回归模型的系数,返回结果有自回归系数、残差方差、预测值及预测波动等信息 | 参数 | 类型 | 说明 | | ---------- | ------------- | ---------------------------------------- | | `y` | array of real | 样本序列,为一维数组类型,注意要零均值化 | | `p` | integer | 自回归阶数 | | `approach` | string | 估计方法 | 返回:array ### 示例 ```tsl elps := randnorm(0, 1, 200); y := array(); y[0] := 0; y[1] := 0; for i := 2 to 199 do y[i] := -0.5 * y[i-1]+0.3 * y[i-2]+elps[i]; return ar(y, 2, 'ls'); ``` ## `arma(series, p, q)` 声明:function 自回归移动平均模型,ARMA(p,q)模型,采用逆函数去估计自回归系数和移动平均系数,返回结果有自回归系数、移动平均系数、残差方差等信息 ARMA模型: 其中:为原序列零均值化的新序列,是自回归方程系数,为移动平均系数,是零均值、方差为的平稳白噪声 | 参数 | 类型 | 说明 | | -------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `series` | array | 样本序列,为一维数组类型,注意要零均值化 | | `p` | int | 自回归阶数,整数类型 | | `q` | int | 移动平均阶数,整数类型;返回结果:;Ret\["AR"\]:参数估计结果,,第一项为1;Ret\["MA"\]:参数估计结果,,第一项为1;Ret\["T-test"\]:AR模型参数的T检验;Ret\["LossFunction"\];Ret\["FPE"\]:预测最大误差;Ret\["AIC"\]:模型的AIC信息准则;Ret\["SC"\]:模型的SC信息准则;Ret\["e"\]:残差信息;Ret\["Inverted AR Roots"\]:AR特征方程的特征根;Ret\["Inverted MA Roots"\]:MA特征方程的特征根;Ret\["R_squared"\]:AR模型的可决系数;Ret\["Adjusted_R_squared "\]:AR模型的修正可决系数;Ret\["Sum_squared_resid"\]:AR模型的离差平方和;Ret\["Durbin Watson stat"\]:DW统计量;Ret\["Log Likelihood"\]:对数极大似然值;Ret\["S.E. of regression"\]:回归标准差 | 返回:array ### 示例 ```tsl elps := randnorm(0, 1, 200); y := array(); y[0] := 0; for i := 1 to 199 do y[i] := 0.8*y[i-1]+elps[i]-0.4*elps[i-1]; arma(y, 1, 1); ``` ## `garchFit(model_spec, y, x, e0, s0, y0)` 声明:function 广义自回归条件异方差模型,采用极大似然估计方法估计模型的参数 | 参数 | 类型 | 说明 | | ------------ | ----- | ------------------------------------------------------ | | `model_spec` | array | 模型设置项,为数据表类型,参考:表8-5 | | `y` | array | 原始数据,一维数字数组 | | `x` | array | 均值方程回归外生变量,二维数字数组,可缺省 | | `e0` | array | 自回归方程残差序列起始的几项取值,一维数字数组,可缺省 | | `s0` | array | 条件方程方差序列起始的几项取值,一维数字数组,可缺省 | | `y0` | array | 原始序列起始的几项取值,一维数字数组,可缺省 | 返回:array ### 示例 ```tsl // 以1995年1月至2000年8月日元兑换美元汇率值序列(JPY,如图8-9)为例介绍怎样用天软来进行ARCH建模(序列共1427个值)。 // 图8-9日元兑换美元汇率值(JPY)序列图8-10DJPY时间序列 // JPY序列显然是一个非平稳时间序列,对JPY进行差分,DJPY表示收益,见图8-10,因为DJPY是一个平稳时间序列,应该使用DJPY建立时间序列模型。按照ARMA模型中讲的那样对DJPY拟合ARMA模型,根据自相关系数以及偏自相关系数,AIC准则等,我们最终将模型定为AR(3)模型。 d_jpy := diff(jpy); m := mean(d_jpy); d_jpy := d_jpy-m; ret := arma(d_jpy, 3, 0); // 得到的结果是: // 图8-11 AR(3)残差 // 该模型的残差如图8-11所示,我们怀疑残差含有异方差,使用Time_ARCHTest函数检验。 Time_ARCHTest(ret["e"], 1, 0.05); // 图8-12 AR(3)残差 // 拒绝原假设,认为模型含有异方差,建立ARCH模型,首先建立ARCH(7)模型(尝试多次,最大滞后选为7为宜)。 // 图8-13ARCH模型结果图8-14异方差估计情况 modelspec := array( ("R": 3, "M": 0, "AR": nil, "MA": nil, "Regress": nil, "VarianceModel": "GARCH", "C": nan, "P": 0, "Q": 7, "GARCH": array(), "ARCH": array(), "Leverage": nil)); t := garchFit(modelspec, d_jpy); // 得到的异方差如图8-14。ARCH模型中的的滞后项太多,应该尝试建立GARCH(1, 1)模型: modelspec := array( ("R": 3, "M": 0, "AR": nil, "MA": nil, "Regress": nil, "VarianceModel": "GARCH", "C": nan, "P": 1, "Q": 1, "GARCH": array(), "ARCH": array(), "Leverage": nil)); t := garchFit(modelspec, d_jpy); // 图8-15GARCH模型结果图8-16方差估计情况 ``` ## `GM_Estimate(x, l)` 声明:function GM(1,1)模型,用于灰色系统模型的l步预测 结果说明: 平均相对误差:越小越接近零越好; 关联度:当ρ=0.5时,关联度大于0.6便满意 方差比:C 小误差概率:P | 参数 | 类型 | 说明 | | ---- | ----- | -------------------------- | | `x` | array | 数据矩阵,为一维数组类型; | | `l` | any | 预测步长,为整数类型 | 返回:array ## `Time_ACF(y)` 声明:function 自相关系数,计算随机序列与所有滞后阶数的相关系数 | 参数 | 类型 | 说明 | | ---- | ----- | ----------------------------------------------------------------------------- | | `y` | array | 数组,样本序列;;p:整数,返回样本自相关系数序列的长度,默认值为3,允许缺省; | 返回:array ## `Time_Analyse(y, model, p, q, l)` 声明:function ARMA模型分析,时间序列的ARMA模型分析,可以自动的选择q与p | 参数 | 类型 | 说明 | | ------- | ------ | --------------------------------------------- | | `y` | array | 样本序列,为一维数组类型; | | `model` | string | 模型类别为AR、MA、ARMA,为字符串类型; | | `p` | any | 自回归阶数,取0则自动选择阶数,为整数类型; | | `q` | any | 移动平均阶数,取0则自动选择阶数,为整数类型; | | `l` | any | 预测步长,为整型类型; | 返回:any ## `Time_ARCH(r_series, q, l)` 声明:function 自回归条件异方差模型,本模型的ARCH模型如下: sss 可把异方差方程进行整合,得到 用最小二乘法去估计方程的系数了,得到系数的相合估计。 或者用最大似然估计去估计参数,得到精度估计,最大似然估计的目标函数值为 | 参数 | 类型 | 说明 | | ---------- | ----- | ---------------------------- | | `r_series` | array | 资产收益率,为一维数组类型; | | `q` | any | 自回归阶数,为整数类型; | | `l` | any | 预测步长,为整数类型 | 返回:array ## `Time_ARCHTest(u, q, alpha)` 声明:function 时间序列异方差的ARCH检验,原假设都为没有异方差,即不存在ARCH效应,Hypothesis为1表示接受原假设,0表示拒绝原假设 检验统计量为: 对方程进行估计,得到F统计量和T×R2统计量并进行检验 | 参数 | 类型 | 说明 | | ------- | ----- | -------------------------------------------------------------- | | `u` | array | 残差序列,为一维数组类型 | | `q` | any | 滞后阶数,为整数类型 | | `alpha` | float | 1-alpha为置信水平,一般为5%,也有1%和10%,数值越小,判断越严格 | 返回:array ### 示例 ```tsl u := array(0.10, 0.12, 0.08, 0.11, 0.09, 0.13, 0.10, 0.07, 0.12, 0.09); return Time_ARCHTest(u, 1, 0.05); // 输出:返回包含 2 个元素的 ARCH 检验结果数组 ``` ## `Time_ARMA(y, p, q, l)` 声明:function 建议使用ARMA模型替换,自回归移动平均模型,ARMA(p,q)模型,采用逆函数去估计自回归系数和移动平均系数,返回结果有自回归系数、移动平均系数、残差方差、预测值及预测波动。 估计过程如下: ,为自协方差 其中:yt为原序列零均值化的新序列,μ为原序列的均值,ρp是自相关系数,φq是自回归方程系数,θq为移动平均系数,εt是零均值、方差为σ2的平稳白噪声 | 参数 | 类型 | 说明 | | ---- | ----- | -------------------------- | | `y` | array | 样本序列,为一维数组类型; | | `p` | any | 自回归阶数; | | `q` | any | 移动平均阶数 | | `l` | any | 预测步长,整数 | 返回:array ## `Time_ARp(y, p, l)` 声明:function 建议使用AR模型替换,自回归模型,AR(p)模型,用Yule-Walker方程去估计p阶自回归模型的系数,返回结果有自回归系数、残差方差、预测值及预测波动。估计过程如下 AR(p)模型: 如有常数项,则 ,为自协方差 其中:为原序列零均值化的新序列,为原序列的均值,是自相关系数,是自回归方程系数,是零均值,方差为的平稳白噪声 | 参数 | 类型 | 说明 | | ---- | ----- | -------------------------- | | `y` | array | 样本序列,为一维数组类型; | | `p` | any | 自回归阶数; | | `l` | any | 预测步长; | 返回:array ## `Time_AutoCov(y, l)` 声明:function 自协方差,求样本序列跟滞后L阶序列的协方差,即自协方差 自协方差计算公式如下: 其中:yt是样本序列,yL是滞后L阶的序列 | 参数 | 类型 | 说明 | | ---- | ----- | -------------------------- | | `y` | array | 样本序列,为一维数组类型; | | `l` | any | 滞后阶数,为整数类型; | 返回:any ### 示例 ```tsl return Time_AutoCov(array(1.0, 2.0, 3.0, 4.0, 5.0), 1); // 输出:1.25 ``` ## `Time_ChoseP(y, model, f)` 声明:function 判断AR模型最佳的阶数,采用信息准则函数判断模型的最佳阶数 其中:T为样本容量,K为待估计参数 | 参数 | 类型 | 说明 | | ------- | ------ | -------------------------------------- | | `y` | array | 样本序列,为一维数组类型; | | `model` | string | 模型类别为AR、MA、ARMA,为字符串类型; | | `f` | string | 判断准则为SBIC和AIC,为字符串类型 | 返回:any ## `Time_DanielTest(y, alpha)` 声明:function 在1-alpha置信水平下,进行随机时间序列的Daniel平稳性检验。返回结果为一个数组,第一个为q值(q>0:序列有上升趋势,q<0:序列有下降趋势),第二个为T统计量,第三个为p值,第四个为是否接受原假设。原假设为x是平稳序列,所以H为1表示接受原假设,0表示拒绝原假设 其中:qs是Spearman相关系数,Rt为秩统计量,n为样本容量 | 参数 | 类型 | 说明 | | ------- | ----- | ----------------------------------- | | `y` | array | 随机时间序列,为一维数组类型 | | `alpha` | float | 显著性水平,实数类型,取值在0-1之间 | 返回:array ## `Time_Diff(y, n)` 声明:function 序列差分 | 参数 | 类型 | 说明 | | ---- | ----- | ----------------------- | | `y` | array | 需要做差分的数组数据 | | `n` | any | 差分的阶数,0阶不做处理 | 返回:any ## `Time_GARCH(rseries, model)` 声明:function 广义自回归条件异方差模型,包含四种模型:GARCH(1,1)、GJR(1,1)、IGARCH(1,1)和EGARCH(1,1),本模型采用了最大似然估计法去估计模型的系数,可做一步预测。 GARCH(1,1): GJR(1,1): IGARCH(1,1): EGARCH(1,1): 最大似然估计的目标函数值为 | 参数 | 类型 | 说明 | | --------- | ------ | ---------------------------- | | `rseries` | array | 资产收益率,为一维数组类型; | | `model` | string | 模型类别,为字符串类型; | 返回:any ## `Time_GreenFun(ap, mq)` 声明:function 中间函数,ARMA模型的Green函数,Green函数的递推公式如下: 式中: ,,是自回归方程系数,为移动平均系数 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------------------ | | `ap` | array | 自相关系数,为一维数组类型; | | `mq` | array | 移动平均系数,为一维数组类型; | 返回:array ## `Time_InvFun(ap, mq)` 声明:function 中间函数,模型逆函数,ARMA模型的逆函数,Green函数的递推公式如下: 式中: ,,是自回归方程系数,为移动平均系数 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------------------ | | `ap` | array | 自相关系数,为一维数组类型; | | `mq` | array | 移动平均系数,为一维数组类型; | 返回:array ## `Time_MAq(y, q, l)` 声明:function 建议使用ARMA模型替换,移动平均模型,MA(q)模型,用条件最小二乘法去估计q阶移动平均模型的系数,返回结果有移动平均系数、残差方差、预测值及预测波动。 估计过程如下: MA(q)模型: 具有逆转形式: 用算子形式比较,可得: s 条件最小二乘法使得下列残差平方和最小: 可将上述转化为矩阵形式,先求得的取值,在利用上上式计算移动平均系数 如有常数,则常数项为原序列的均值。 ,为自协方差 其中:yt为原序列零均值化的新序列,μ为原序列的均值,θq为移动平均系数,εt是零均值,方差为σ2的平稳白噪声 | 参数 | 类型 | 说明 | | ---- | ----- | -------------------------- | | `y` | array | 样本序列,为一维数组类型; | | `q` | any | 移动平均阶数; | | `l` | any | 预测步长; | 返回:array ## `Time_PACF(y)` 声明:function 偏自相关系数,计算随机序列与所有滞后阶数的偏自相关系数,返回结果是一个数组。偏相关系数的计算公式如下: 是自相关系数,是偏相关系数 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------------ | | `y` | array | 样本序列,为一维数组类型 | 返回:array ## `Time_RandomTest(y, m, alpha)` 声明:function Ljung和Box提出的修正Qm统计量,用于检验序列是否为白噪声,原假设为白噪声序列,即纯随机序列。(Hypothesis为1表示接受原假设,0表示拒绝原假设) Qm统计量的计算公式如下: 其中:是自相关系数,T是样本容量,m是最大滞后长度 | 参数 | 类型 | 说明 | | ------- | ----- | ---------------------------------------------- | | `y` | array | 样本序列,为一维数组类型 | | `m` | any | 最大滞后长度,整数类型,一般取样本数的四分之一 | | `alpha` | float | 显著性水平,实数类型,取值在0-1之间 | 返回:array ## `Time_VolatilitySpillover(x, y, w_type, m, c_type)` 声明:function 波动溢出,底层模型为AR(3)-GARCH(1,1),对时间序列X与Y进行Granger因果检验 | 参数 | 类型 | 说明 | | -------- | ----- | ---------------------------------------------------------------------------------------------------- | | `x` | array | 一维数字数组,时间序列X | | `y` | array | 一维数字数组,时间序列Y | | `w_type` | any | 整型 或 一维数字数组,加权方式,一维数字数组表示可同时返回多种加权方式 | | `m` | any | 整数 或 一维数字数组,滞后阶数,一维数字数组表示同时计算多个M的场景,缺省时M:= array(5,10,20,30,40); | | `c_type` | any | 整数,因果检验类型 | 返回:array ### 示例 ```tsl x := array( 0.10, 0.12, 0.11, 0.15, 0.14, 0.18, 0.17, 0.20, 0.19, 0.23, 0.21, 0.25, 0.24, 0.28, 0.27, 0.30, 0.29, 0.33, 0.31, 0.35 ); y := array( 0.08, 0.09, 0.11, 0.10, 0.13, 0.12, 0.15, 0.14, 0.17, 0.16, 0.19, 0.18, 0.21, 0.20, 0.23, 0.22, 0.25, 0.24, 0.27, 0.26 ); return Time_VolatilitySpillover(x, y, 0, 5, -1); // 输出:返回包含 6 个元素的波动溢出检验结果数组 ``` ## `Times_ADFTest(y, diff, style, f, p, alpha)` 声明:function 时间序列的平稳性ADF检验;返回结果为ADF统计量和给定显著性水平下的ADF统计量的临界值;如果ADF统计量的绝对值比临界值的绝对值大,则可在该显著性水平下,拒绝原序列存在单位根的原假设,即原序列是平稳的 | 参数 | 类型 | 说明 | | ------- | ------ | ------------------------------------------------------------------------------------- | | `y` | array | 时间序列数据,为一维数组类型 | | `diff` | any | 差分次数,整数类型,0表示不进行差分 | | `style` | any | 是否存在常数或趋势项的选项,整数类型,无常数无趋势使用0、有常数无趋势1、有常数有趋势2 | | `f` | string | 滞后阶数判断信息准则,字符串类型,"SBIC","AIC" | | `p` | any | 滞后阶数,为整型类型,输入0则表示自动选择 | | `alpha` | float | 显著性水平,实数类型,范围在0-1之间 | 返回:array ## `Times_Cointergration(y, x, alpha)` 声明:function 建议使用Times_Cointergration_test函数替换本函数,协整检验—E-G两步法检验变量的协整关系,E-G法如下: 1)在因变量与自变量存在同阶单整关系的条件,进行最小二乘法回归; 2)把回归后的残差进行平稳性检验,如果残差序列是平稳的,则两者存在协整关系,否则不存在 | 参数 | 类型 | 说明 | | ------- | ----- | ---------------------------------------------------------------- | | `y` | array | 因变量,为一维数组类型; | | `x` | array | 自变量矩阵,为二维数组类型; | | `alpha` | float | 1-alpha为置信水平,一般为5%,也有1%和10%,数值越小,判断越严格; | 返回:string ## `Times_Cointergration_test(y, x, constant, alpha_type, style, criterion)` 声明:function E-G两步法协整检验变量的协整关系,E-G法基本步骤如下: 1)在因变量与自变量存在同阶单整关系的条件,进行最小二乘法回归; 2)把回归后的残差进行平稳性检验,如果残差序列是平稳的,则两者存在协整关系,否则不存在 | 参数 | 类型 | 说明 | | ------------ | ------ | -------------------------------------------------------------------------------------------------- | | `y` | array | 被解释变量,为一维数组类型 | | `x` | array | 解释变量,为一维数组类型 | | `constant` | bool | 回归方程是否含有常数项,为布尔类型 | | `alpha_type` | float | 显著性水平,为实数类型,一般在0-1之间 | | `style` | any | ADF法检验单整阶数时是否存在常数或趋势项,整数类型,无常数无趋势使用0、有常数无趋势1、有常数有趋势2 | | `criterion` | string | 滞后阶数判断信息准则,字符串类型,"SBIC","AIC" | 返回:array ## `Times_ECM(y, x, resid, alpha, q, p)` 声明:function 两变量间的误差修正模型,准确的刻画了两序列间的短期波动特征 误差修正模型是时间序列间协整关系的主要表现形式,准确的刻画了序列间的长期均衡关系和短期波动特征。设一阶自回归分布滞后模型为: 其中,是均值为零,方差为的白噪声,进行适当的整理有: 其中若记 称为误差修正项 | 参数 | 类型 | 说明 | | ------- | ----- | -------------------------------------------- | | `y` | array | 被解释变量,为一维数组类型 | | `x` | array | 解释变量,为一维数组类型 | | `resid` | array | 协整检验时的残差,没有输入,使用最小二乘得到 | | `alpha` | float | 显著性水平 | | `q` | any | 整数类型,被解释变量的滞后项 | | `p` | any | 整数类型,解释变量的滞后项 | 返回:any ## `Times_Granger(y, x, q, alpha)` 声明:function Granger因果检验,原假设:X不是Y的Granger原因,Hypothesis为1表示接受原假设,0表示拒绝原假设 原假设: 分别对上述两个回归方程做回归,提取残差平方和XESS跟YESS,则F统计量如下计算 | 参数 | 类型 | 说明 | | ------- | ----- | ------------------------------------- | | `y` | array | 被解释变量,为一维数组类型 | | `x` | array | 解释变量,为一维数组类型 | | `q` | any | 滞后阶数,为整数类型 | | `alpha` | float | 显著性水平,为实数类型,一般在0-1之间 | 返回:array ## `Times_GrangerCausality(series_matrix, lag_order)` 声明:function 对矩阵中的多个序列执行两两 Granger 因果检验 | 参数 | 类型 | 说明 | | --------------- | ----- | --------------------------------------------------- | | `series_matrix` | array | 多个时间序列组成的矩阵;可由两条序列用 `left_series | | `lag_order` | any | 滞后阶数 | 返回:array ## `Times_johansen(x, p, k)` 声明:function 进行Johansen协整检验,第一列的迹、最大特征值统计量的原假设是:没有协整关系;第二列的迹、最大特征值统计量的原假设是最多只有一个协整关系;第三列的迹、最大特征值统计量的原假设是最多只有两个协整关系…… | 参数 | 类型 | 说明 | | ---- | ----- | ---------------------------------------------------------------------------------------------------------------------- | | `x` | array | 输入多元时间序列,每一列为一指标,每行为一时间 (nobs\*m) | | `p` | any | 是否含时间趋势及常数项p = -1,没有时间趋势以及常数项p =0,含常数项p =1,含常数项以及一次时间项p >1,含常数项以及高次时间项 | | `k` | any | 滞后阶数 | 返回:array ### 示例 ```tsl x := array( (1.0, 1.1), (1.2, 1.3), (1.4, 1.5), (1.7, 1.6), (1.9, 2.0), (2.1, 2.2), (2.4, 2.3), (2.6, 2.7), (2.8, 2.9), (3.1, 3.0), (3.3, 3.4), (3.5, 3.6) ); return Times_johansen(x, 0, 1); // 输出:返回包含 7 个元素的 Johansen 协整检验结果数组 ```