# 数学函数 / 时间序列分析

## `ar(y, p, approach)`

声明：function

自回归模型，AR(p)模型，选择使用最小二乘，Yule-Walker方法，Foiward-backward,Geometric lattice,Burg's lattice-bas去估计p阶自回归模型的系数，返回结果有自回归系数、残差方差、预测值及预测波动等信息

<!-- tags: AR -->

| 参数       | 类型          | 说明                                     |
| ---------- | ------------- | ---------------------------------------- |
| `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模型： 其中：为原序列零均值化的新序列，是自回归方程系数，为移动平均系数，是零均值、方差为的平稳白噪声

<!-- tags: 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

<!-- tags: GM -->

| 参数 | 类型  | 说明                       |
| ---- | ----- | -------------------------- |
| `x`  | array | 数据矩阵，为一维数组类型； |
| `l`  | any   | 预测步长，为整数类型       |

返回：array

## `Time_ACF(y)`

声明：function

自相关系数，计算随机序列与所有滞后阶数的相关系数

<!-- tags: 计算 求解 -->

| 参数 | 类型  | 说明                                                                          |
| ---- | ----- | ----------------------------------------------------------------------------- |
| `y`  | array | 数组，样本序列；；p:整数，返回样本自相关系数序列的长度，默认值为3，允许缺省； |

返回：array

## `Time_Analyse(y, model, p, q, l)`

声明：function

ARMA模型分析，时间序列的ARMA模型分析，可以自动的选择q与p

<!-- tags: ARMA -->

| 参数    | 类型   | 说明                                          |
| ------- | ------ | --------------------------------------------- |
| `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 可把异方差方程进行整合，得到 用最小二乘法去估计方程的系数了，得到系数的相合估计。 或者用最大似然估计去估计参数，得到精度估计，最大似然估计的目标函数值为

<!-- tags: ARCH -->

| 参数       | 类型  | 说明                         |
| ---------- | ----- | ---------------------------- |
| `r_series` | array | 资产收益率，为一维数组类型； |
| `q`        | any   | 自回归阶数，为整数类型；     |
| `l`        | any   | 预测步长，为整数类型         |

返回：array

## `Time_ARCHTest(u, q, alpha)`

声明：function

时间序列异方差的ARCH检验，原假设都为没有异方差，即不存在ARCH效应，Hypothesis为1表示接受原假设，0表示拒绝原假设 检验统计量为： 对方程进行估计，得到F统计量和T×R2统计量并进行检验

<!-- tags: ARCH 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的平稳白噪声

<!-- tags: ARMA -->

| 参数 | 类型  | 说明                       |
| ---- | ----- | -------------------------- |
| `y`  | array | 样本序列，为一维数组类型； |
| `p`  | any   | 自回归阶数；               |
| `q`  | any   | 移动平均阶数               |
| `l`  | any   | 预测步长，整数             |

返回：array

## `Time_ARp(y, p, l)`

声明：function

建议使用AR模型替换，自回归模型，AR(p)模型，用Yule-Walker方程去估计p阶自回归模型的系数，返回结果有自回归系数、残差方差、预测值及预测波动。估计过程如下 AR(p)模型： 如有常数项，则 ，为自协方差 其中：为原序列零均值化的新序列，为原序列的均值，是自相关系数，是自回归方程系数，是零均值，方差为的平稳白噪声

<!-- tags: AR -->

| 参数 | 类型  | 说明                       |
| ---- | ----- | -------------------------- |
| `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为待估计参数

<!-- tags: 判断 检查 AR -->

| 参数    | 类型   | 说明                                   |
| ------- | ------ | -------------------------------------- |
| `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)： 最大似然估计的目标函数值为

<!-- tags: GARCH GJR IGARCH EGARCH -->

| 参数      | 类型   | 说明                         |
| --------- | ------ | ---------------------------- |
| `rseries` | array  | 资产收益率，为一维数组类型； |
| `model`   | string | 模型类别，为字符串类型；     |

返回：any

## `Time_GreenFun(ap, mq)`

声明：function

中间函数，ARMA模型的Green函数，Green函数的递推公式如下： 式中： ，，是自回归方程系数，为移动平均系数

<!-- tags: ARMA -->

| 参数 | 类型  | 说明                           |
| ---- | ----- | ------------------------------ |
| `ap` | array | 自相关系数，为一维数组类型；   |
| `mq` | array | 移动平均系数，为一维数组类型； |

返回：array

## `Time_InvFun(ap, mq)`

声明：function

中间函数，模型逆函数，ARMA模型的逆函数，Green函数的递推公式如下： 式中： ，，是自回归方程系数，为移动平均系数

<!-- tags: ARMA -->

| 参数 | 类型  | 说明                           |
| ---- | ----- | ------------------------------ |
| `ap` | array | 自相关系数，为一维数组类型；   |
| `mq` | array | 移动平均系数，为一维数组类型； |

返回：array

## `Time_MAq(y, q, l)`

声明：function

建议使用ARMA模型替换，移动平均模型，MA(q)模型，用条件最小二乘法去估计q阶移动平均模型的系数，返回结果有移动平均系数、残差方差、预测值及预测波动。 估计过程如下： MA(q)模型： 具有逆转形式： 用算子形式比较，可得： s 条件最小二乘法使得下列残差平方和最小： 可将上述转化为矩阵形式，先求得的取值，在利用上上式计算移动平均系数 如有常数，则常数项为原序列的均值。 ，为自协方差 其中：yt为原序列零均值化的新序列，μ为原序列的均值，θq为移动平均系数，εt是零均值，方差为σ2的平稳白噪声

<!-- tags: ARMA MA -->

| 参数 | 类型  | 说明                       |
| ---- | ----- | -------------------------- |
| `y`  | array | 样本序列，为一维数组类型； |
| `q`  | any   | 移动平均阶数；             |
| `l`  | any   | 预测步长；                 |

返回：array

## `Time_PACF(y)`

声明：function

偏自相关系数，计算随机序列与所有滞后阶数的偏自相关系数，返回结果是一个数组。偏相关系数的计算公式如下： 是自相关系数，是偏相关系数

<!-- tags: 计算 求解 -->

| 参数 | 类型  | 说明                     |
| ---- | ----- | ------------------------ |
| `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因果检验

<!-- tags: AR GARCH -->

| 参数     | 类型  | 说明                                                                                                 |
| -------- | ----- | ---------------------------------------------------------------------------------------------------- |
| `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统计量的绝对值比临界值的绝对值大，则可在该显著性水平下，拒绝原序列存在单位根的原假设，即原序列是平稳的

<!-- tags: 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统计量如下计算

<!-- tags: XESS YESS -->

| 参数    | 类型  | 说明                                  |
| ------- | ----- | ------------------------------------- |
| `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 协整检验结果数组
```
