📦 deps(tsl): sync tsl-playbook from ecedf69b

Source-Commit: ecedf69b9c
This commit is contained in:
ci[bot]
2026-08-24 09:29:51 +08:00
parent 2f0d80da65
commit 2b74e1466d
664 changed files with 28934 additions and 37020 deletions
@@ -0,0 +1,78 @@
# 数学函数 / 灰色系统
## `GM_Icorr(values, target_index)`
声明:function
计算数据矩阵中各序列相对于指定参考序列的灰色关联系数
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| -------------- | ------- | ------------ |
| `values` | array | 二维数据矩阵 |
| `target_index` | integer | 参考序列下标 |
返回:array
### 示例
```tsl
x := array((1, 2, 3), (2, 3, 4));
return GM_Icorr(x, 1);
// 输出:array(0.645833333333333,1.0)
```
## `GM_AGO(x, method, r)`
声明:function
数列生成,r(r>0)次的累加或累减生成新数列 1)累加:, 2)累减
| 参数 | 类型 | 说明 |
| -------- | ------ | --------------------------------- |
| `x` | array | 数据矩阵,为一维数组类型; |
| `method` | string | 生成方法(add,sub),为字符串类型; |
| `r` | any | 次数,为整数类型 |
返回:array
## `GM_Corr(x, l)`
声明:function
灰色关联度,以l行为参考数列的灰色关联度,返回的是关联度矩阵 ,, 以为参考数列,则关联度计算步骤如下: 1)初值化:; 2)求差数列:, 3)求两级最大和最小:, 4)求关联系数:,为分辨系数,是0到1之间的数 5)求关联度
| 参数 | 类型 | 说明 |
| ---- | ----- | -------------------------- |
| `x` | array | 数据矩阵,为二维数组类型; |
| `l` | any | 参考序列标号,为整数类型 |
返回:array
## `GM_Initial(x, method, un)`
声明:function
数据初始化,提供了几种数据变换的方法,有初值化、均值化、最小值化、最大值化、按行区间值化、按列区间值化、归一化、逆化、倒数化和始点零化处理原始的序列 1)初值化: 2)均值化:, 3)最小值化:, 4)最大值化:, 5)按行区间值化: 6)按列区间值化: 7)归一化:, 8)逆化: 9)倒数化: 10)始点零化
| 参数 | 类型 | 说明 |
| -------- | ------ | -------------------------------------------------------------------------- |
| `x` | array | 数据矩阵,为二维数组类型; |
| `method` | string | 处理方法(ini,mean,min,max,rrange,crange,norm,inv,rec,zero),为字符串类型; |
| `un` | array | 归一化单位,为一维数组类型 |
返回:array
## `GM_Scorr(x, method)`
声明:function
灰色绝对关联度、灰色相对关联度和灰色综合关联度,返回的是关联度矩阵 ,, 1)灰色绝对关联度: 2)灰色相对关联度:先对数列进行初值化,然后求新数列的灰色绝对关联度,即为原数列的灰色相对关联度 3)灰色综合关联度
| 参数 | 类型 | 说明 |
| -------- | ------ | --------------------------------- |
| `x` | array | 数据矩阵,为二维数组类型; |
| `method` | string | 方法(abs,ret,com),为字符串类型; |
返回:array
@@ -53,3 +53,238 @@ value := array(
("date": 20180803T, "yield": 0.009));
return ytmToAccumulativeYTM(value, "yield", 2, 0);
```
## `accumulativeYtMtoYtm(t, fname, dw)`
声明:function
复合益率转日收益率
| 参数 | 类型 | 说明 |
| ------- | ------- | ---------------------------------- |
| `t` | array | 数据表类型,复合收益率序列 |
| `fname` | string | 字符串,收益字段名称 |
| `dw` | integer | 整数,决定源数据的单位和返回的数据 |
返回:array
### 示例
```tsl
// 源数据单位为1,设dw=2,同时返回复合收益率和转换后的日收益率
t1 := array(('日期': 20180801T, '复合收益率': 0.1),
('日期': 20180802T, '复合收益率': 0.4),
('日期': 20180803T, '复合收益率': 0.7));
r1 := accumulativeYtMtoYtm(t1, '复合收益率', 2);
// 源数据单位为%,设dw=3,同时返回复合收益率和转换后的日收益率
t2 := array(('日期': 20180801T, '复合收益率(%)': 10),
('日期': 20180802T, '复合收益率(%)': 40),
('日期': 20180803T, '复合收益率(%)': 70));
r2 := accumulativeYtMtoYtm(t2, '复合收益率(%)', 3);
return r1|r2;
// 输出:返回:
```
## `multyValue(v1, v2)`
声明:function
乘法(财务分析)
| 参数 | 类型 | 说明 |
| ---- | ---- | ------------ |
| `v1` | real | 实型,期末值 |
| `v2` | real | 实型,期初值 |
返回:real
### 示例
```tsl
// 返回取-3与-5的乘积。
return multyValue(-3, -5);
// 输出:-15
```
## `outPutGrowRatio(v1, v2)`
声明:function
增长率(%)
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------ |
| `v1` | float | 实型,期末值 |
| `v2` | float | 实型,期初值 |
返回:float
### 示例
```tsl
// 返回13到14的增长率(%)
outPutGrowRatio(14, 13);
// 输出:7.69
```
## `outPutGrowRatio2(v1, v2)`
声明:function
增长率(%)
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------ |
| `v1` | float | 实型,期末值 |
| `v2` | float | 实型,期初值 |
返回:float
### 示例
```tsl
// 返回13到14的增长率(%)
outPutGrowRatio2(14, 13);
// 输出:7.69
```
## `outPutGrowRatio3(v1, v2)`
声明:function
增长率(%)
| 参数 | 类型 | 说明 |
| ---- | ---- | ------------ |
| `v1` | real | 实型,期末值 |
| `v2` | real | 实型,期初值 |
返回:real
### 示例
```tsl
// 返回14到13的增长率(%)
return outPutGrowRatio3(14, 13);
// 输出:7.69
```
## `outPutGrowValue(v1, v2)`
声明:function
增长
| 参数 | 类型 | 说明 |
| ---- | ---- | ------------ |
| `v1` | real | 实型,期末值 |
| `v2` | real | 实型,期初值 |
返回:real
### 示例
```tsl
// 返回13与14的差值
return outPutGrowValue(13, 14);
// 输出:-1
```
## `outPutGrowValue2(v1, v2)`
声明:function
增长
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------ |
| `v1` | float | 实型,期末值 |
| `v2` | float | 实型,期初值 |
返回:float
### 示例
```tsl
// 返回13与14差值
outPutGrowValue2(13, 14);
// 输出:-1
```
## `outPutGrowValue3(v1, v2)`
声明:function
增长
| 参数 | 类型 | 说明 |
| ---- | ---- | ------------ |
| `v1` | real | 实型,期末值 |
| `v2` | real | 实型,期初值 |
返回:real
### 示例
```tsl
// 返回13与14的差值
return outPutGrowValue3(13, 14);
// 输出:-1
```
## `outPutLnGrowRatio(v1, v2)`
声明:function
对数增长率输出(%)
| 参数 | 类型 | 说明 |
| ---- | ---- | ------------ |
| `v1` | real | 实型,期末值 |
| `v2` | real | 实型,期初值 |
返回:real
### 示例
```tsl
// 取3与4的对数增长率
return outPutLnGrowRatio(3, 4);
// 输出:-28.77
```
## `ratioValue(v1, v2)`
声明:function
比率(财务分析)
| 参数 | 类型 | 说明 |
| ---- | ---- | ------------ |
| `v1` | real | 实型,期末值 |
| `v2` | real | 实型,期初值 |
返回:real
### 示例
```tsl
// 返回-1与-2的比率。
return ratioValue(-1, -2);
// 输出:-0.5
```
## `RatioValue_Math(v1, v2)`
声明:function
比率(数学分析)。针对除法计算处理,主要是对除0情况的考虑
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------ |
| `v1` | float | 实数。期末值 |
| `v2` | float | 实数。期初值 |
返回:float
@@ -0,0 +1,479 @@
# 数学函数 / 多元统计分析
## `Cluster_Kmeans(samples, class_count, options)`
声明:function
执行 K-means 聚类
| 参数 | 类型 | 说明 |
| ------------- | ----- | ------------------------------------------------------ |
| `samples` | array | 样本矩阵 |
| `class_count` | any | 聚类数量 |
| `options` | array | 参数表;常见键包括 `maxiter``tol``distance``out` |
返回:array
## `Cluster_System(a, dmethods, methods, options)`
声明:function
sample是一个样本数据观测矩阵,每一行是一个样本数据,本函数依据各种不同的距离对样本进行谱系聚类
| 参数 | 类型 | 说明 |
| ---------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `a` | array | 样本数据观测矩阵,每一行是一个样本数据 |
| `dmethods` | any | 整数或字符串类型,距离方式,参数的输入格式参考\[Distance\]name的输入,缺省欧式距离 |
| `methods` | any | 1:组间以中心距离,默认组间中心距离;2:以组间最短距离;3:以组间最大距离 |
| `options` | array | 默认为输出谱系树;Options\['best':1\]:输出最优分类;Options\['tree':1\]:输出谱系树,默认输出谱系关系;Options\['out':0\]:最佳分类排列方式。1每一行为一个类(默认)0各个样本对应的类 |
返回:array
## `Cluster_ward(samples)`
声明:function
执行 Ward 聚类
| 参数 | 类型 | 说明 |
| --------- | ----- | -------- |
| `samples` | array | 样本矩阵 |
返回:array
### 示例
```tsl
samples := array((1.0, 1.0), (1.2, 1.1), (4.0, 4.2), (4.1, 3.9));
return Cluster_ward(samples);
// 输出:返回包含 3 个元素的聚类结果数组
```
## `corr(a, _type, tail)`
声明:function
计算相关系数矩阵及其检验P值
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ------- | ------------- | ------------------------------------------------------------------------- |
| `a` | array of real | 样本数据观测矩阵,二维数字数组 |
| `_type` | integer | 1:pearson相关;2:Kendall等级相关;3:Spearman秩相关 |
| `tail` | string | 假设检验的三种类型,字符串,取值为both、left和right,缺省是只输出相关系数 |
返回:array
### 示例
范例01:只返回相关系数矩阵
```tsl
a := rand(3, 4);
return corr(a, 1);
```
范例02:同时返回相关系数矩阵和假设检验 P 值
```tsl
a := rand(3, 4);
return corr(a, 1, 'both');
// 输出:返回二维数组;第 0 项为相关系数矩阵,第 1 项为假设检验 P 值
```
## `corr_canonical(x, y, alpha, standarize_choice)`
声明:function
典型相关分析,默认条件从中心化数据出发衡量两组随机变量之间的相关性
| 参数 | 类型 | 说明 |
| ------------------- | ----- | -------------------------------------------------------------- |
| `x` | array | X属性样本数据,二维数字数组,详见实例分析 |
| `y` | array | Y属性样本数据,二维数字数组,详见实例分析 |
| `alpha` | float | 置信度,实数型,0~1之间,缺省值0(不执行典型相关系数显著性检验) |
| `standarize_choice` | any | 原始数据标准化选择,整数型,0~7,缺省值为0(保持原始数据) |
返回:array
## `corr_Kendall(x_values, y_values)`
声明:function
计算 Kendall 秩相关系数
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ---------- | ----- | ---------- |
| `x_values` | array | 第一组数据 |
| `y_values` | array | 第二组数据 |
返回:float
## `Corr_partial(x, y, z, _type)`
声明:function
偏相关系数,返回x和y在控制变量z下的偏相关系数,行为样本,列为指标
| 参数 | 类型 | 说明 |
| ------- | ----- | ---------------------------------------------------------------------------------------------------------------- |
| `x` | array | 变量一,二维实数数组 |
| `y` | array | 变量二,二维实数数组 |
| `z` | array | 控制变量,二维实数数组 |
| `_type` | any | 1:pearson偏相关;2:Spearman偏相关;tail:假设检验的三种类型,字符串,取值为both、left和right,缺省是只输出相关系数 |
返回:any
## `corr_Spearman(x, y)`
声明:function
Spearman相关系数,简称斯皮尔曼相关系数,经常用希腊字母ρ表示。 它是衡量两个变量的依赖性的非参数指标。它利用单调方程评价两个统计变量的相关性。 如果数据中没有重复值,并且当两个变量完全单调相关时,斯皮尔曼相关系数则为+1或1
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------------- |
| `x` | array | 一维数组,随机变量x |
| `y` | array | 一维数组,随机变量y |
返回:float
## `corrcoef(a)`
声明:function
计算简单相关系数矩阵及其检验P值,以及简单相关系数置信区间的上下界(显著性水平为0.05)
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ---- | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `a` | array,tablearray | 样本数据观测矩阵,二维数字数组返回结果:Ret["r"]:样本数据观测矩阵的简单相关系数矩阵Ret["p"]:检验相关系数是否显著的P值,二维数组Ret["rlo"]:简单相关系数置信区间的下界,二维数组Ret["rup"]:简单相关系数置信区间的上界,二维数组 |
返回:any
### 示例
```tsl
a := rand(7, 4);
return corrcoef(a); // 返回简单相关系数分析
// 输出:结果:
```
## `correlationMatrix(a1, t)`
声明:function
相关系数矩阵求解
| 参数 | 类型 | 说明 |
| ---- | ----- | ---- |
| `a1` | array | |
| `t` | float | |
返回:array
### 示例
```tsl
a := rand(4, 3);
correlationMatrix(a, 1);
```
## `corrMatrixAdjust(a, adjust_type, n)`
声明:function
相关系数矩阵调整:将相关系数大或小的样本排在一起(重构),输出结构调整,不改变相关系数本身
| 参数 | 类型 | 说明 |
| ------------- | ---------- | ------------------------------- |
| `a` | array | 二维数字数组,协方差矩阵 |
| `adjust_type` | userdefine | 用户自定义,调整方式,默认为0 |
| `n` | integer | 整数,分为N类,AdjustType=1专用 |
返回:array
### 示例
```tsl
a := corr(rand(6, 6));
return corrMatrixAdjust(a, 1, 5);
```
## `cov2CorrMatrix(a)`
声明:function
协方差矩阵转为相关系数矩阵
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------------------ |
| `a` | array | 二维数字数组,协方差矩阵 |
返回:array
### 示例
```tsl
a := covariance(rand(4, 3));
return cov2CorrMatrix(a);
```
## `covariance(a)`
声明:function
计算协方差矩阵
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ---- |
| `a` | array | |
返回:any
### 示例
```tsl
a := rand(4, 3);
covariance(a);
```
## `discrim(a, x, method, options)`
声明:function
按照给定分类训练样本,根据训练结果对待定样本类别判定,也可作为原样本的回代检验
| 参数 | 类型 | 说明 |
| --------- | ------------- | ------------------------------------------------- |
| `a` | array of real | 样本数据观测矩阵,每行为一个样本,第0列为所在分类 |
| `x` | array of real | 样本数据观测矩阵,为待分类样本 |
| `method` | integer | 为判别方法,默认为 0 bayesian 判别,1为距离判别 |
| `options` | array | 为方法选项 |
返回:array
### 示例
```tsl
a := array(
(3.00, 8.35, 23.53, 7.51, 8.62, 17.42, 10.00, 1.04, 11.21),
(3.00, 9.25, 23.75, 6.61, 9.19, 17.77, 10.48, 1.72, 10.51),
(3.00, 8.19, 30.5, 4.72, 9.78, 16.28, 7.6, 2.52, 10.32),
(3.00, 7.73, 29.2, 5.42, 9.43, 19.29, 8.49, 2.52, 10.00),
(3.00, 9.42, 27.93, 8.2, 8.14, 16.17, 9.42, 1.55, 9.76),
(3.00, 9.16, 27.98, 9.01, 9.32, 15.99, 9.1, 1.82, 11.35),
(3.00, 10.06, 28.64, 10.52, 10.05, 16.18, 8.39, 1.96, 10.81),
(1.00, 8.67, 36.05, 7.31, 7.75, 16.67, 11.68, 2.38, 12.88),
(1.00, 9.98, 37.69, 7.01, 8.94, 16.15, 11.08, 0.83, 11.67),
(1.00, 6.77, 38.69, 6.01, 8.82, 14.79, 11.44, 1.74, 13.23),
(1.00, 8.14, 37.75, 9.61, 8.49, 13.15, 9.76, 1.28, 11.28),
(1.00, 7.67, 35.71, 8.04, 8.31, 15.13, 7.67, 1.41, 13.25),
(1.00, 7.9, 39.77, 8.49, 12.94, 19.29, 11.05, 2.04, 13.29),
(1.00, 7.18, 40.91, 7.32, 8.94, 17.6, 12.75, 1.14, 14.8),
(1.00, 8.82, 33.7, 7.59, 10.98, 18.82, 14.73, 1.78, 10.1),
(1.00, 6.25, 35.02, 4.72, 6.28, 10.03, 7.15, 1.93, 10.39),
(2.00, 10.6, 52.41, 7.7, 9.98, 12.53, 11.7, 2.31, 14.69),
(3.00, 7.27, 52.65, 3.84, 9.16, 13.03, 15.26, 1.98, 14.57),
(3.00, 13.45, 55.85, 5.5, 7.45, 9.55, 9.52, 2.21, 16.3),
(3.00, 10.85, 44.68, 7.32, 14.51, 17.13, 12.08, 1.26, 11.57),
(3.00, 7.21, 45.79, 7.66, 10.36, 16.56, 12.86, 2.25, 11.69),
(3.00, 7.68, 50.37, 11.35, 13.3, 19.25, 14.59, 2.75, 14.87),
(2.00, 7.78, 48.44, 8.00, 20.51, 22.12, 15.73, 1.15, 16.61));
x := array(
(9.09, 28.12, 7.4, 9.62, 17.26, 11.12, 2.49, 12.65),
(9.41, 28.2, 5.77, 10.8, 16.36, 11.56, 1.53, 12.17),
(8.7, 28.12, 7.21, 10.53, 19.45, 13.3, 1.66, 11.96),
(6.93, 29.85, 4.54, 9.49, 16.62, 10.65, 1.88, 13.61));
options := array('cov': 1, 'backtest': 1, 'crosstest': 1);
return discrim(a, x, 0, options);
// 计算结果:
```
## `distance(x, y, name)`
声明:function
计算样本和样本间的距离或样本数据观测矩阵的距离矩阵,其中距离包括欧氏距离,欧氏距离平方,方差加权距离,Chebychev距离,Block距离,夹角余弦,广义距离
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ------ | ------- | ---------------------------------------------- |
| `x` | array | 样本数据观测矩阵或样本数据,一维或二维数字数组 |
| `y` | array | 样本数据,一维数字数组 |
| `name` | integer | 距离方式,为一整数或字符串 |
返回:array
### 示例
范例01:计算两个样本之间的欧氏距离
```tsl
x := Array(22, 35, 24, 32, 43, 53);
y := Array(1, 2, 3, 4, 5, 6);
name := 'euclidean';
return distance(x, y, name);
// 输出:80.04998438475
```
范例02:计算样本数据观测矩阵的距离矩阵
```tsl
x := array(
(700.9, 39.77, 8.49, 12.94, 19.27, 11.05, 2.04, 13.29),
(7.68, 50.37, 11.35, 13.3, 19.25, 14.59, 2.75, 14.87),
(9.42, 27.93, 8.2, 8.14, 16.17, 9.42, 1.55, 9.76),
(9.16, 27000.98, 9.01, 9.32, 15.99, 9.1, 1.82, 11.35),
(10.06, 28.64, 10.52, 10.05, 16.18, 8.39, 1.96, 10.81));
name := "euclidean";
return distance(x, name);
// 输出:
// array(
// (0, 693.32, 691.62, 26970.08, 690.96),
// (693.32, 0, 24.64, 26950.61, 23.54),
// (691.62, 24.64, 0, 26973.05, 3.5),
// (26970.08, 26950.61, 26973.05, 0, 26972.34),
// (690.96, 23.54, 3.5, 26972.34, 0))
```
## `factor(x, var_value)`
声明:function
对样本数据进行因子分析,分别采用主成分分析法估计因子载荷矩阵(因子载荷矩阵不唯一),方差最大法做载荷矩阵的正交旋转矩阵,回归方法计算因子得分
| 参数 | 类型 | 说明 |
| ----------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `x` | array | 二维维实数数组,表示样本矩阵; |
| `var_value` | float | 实数,表示方差贡献率,控制因子个数;;返回结果:ssRet\["Correlation Matrix",0\]:样本数据的相关系数矩阵;Ret\["kmo",0\]:KMO检验值;0.9<KMO: 非常适合;0.8<KMO<0.9:适合;0.7<KMO<0.8:一般; 0.6<KMO<0.7:适合度较低;KMO<0.6:适合度很低;ret\["Total Variance Explained",0\]:特征值、方差贡献率、累计方差贡献率等信息;ret\["Component Matrix",0\]:因子载荷矩阵;ret\["Communalities",0\]:共同变量度,即载荷矩阵行的平方和;ret\["thogonal matrix",0\]:正交变换后的载荷矩阵;ret\["Rotation matrix",0\]:旋转矩阵;ret\["Factor score",0\]:因子得分 |
返回:array
### 示例
```tsl
stockn := getBk("上证A股");
vo := BackUpSystemParameters();
setSysParam(pn_date(), today());
sto := array();
for n_i := 0 to length(stockn)-1 do
begin
setSysParam(pn_stock(), stockn[n_i]);
if isStockGoMarket(intToDate(20011231)) then
sto[length(sto)] := stockn[n_i];
end
st := array2Str(sto, ";");
a1 := query("", st, true, "", "代码", defaultStockId(),
"主营业务利润", report(46008, 20101231),
"利润总额", report(46024, 20101231),
"净利润", report(46033, 20101231),
"加权每股收益", report(42003, 20101231),
"每股净资产", report(42006, 20101231),
"加权净资产收益率", report(42013, 20101231),
"资产总计", report(44059, 20101231),
"股本", report(44099, 20101231));
RestoreSystemParameters(vo);
a := zeros(mrows(a1), mcols(a1));
a[:, :] := a1[:, :];
stock := a[:, 0];
data := a[:, 1:8];
// 取得纯数据矩阵
br := factor(data, 0.85); //
return br;
```
## `histc(a, b)`
声明:function
端点定位频数,判断序列a 中各个元素在b中各个段位中的频数
<!-- tags: 判断 检查 -->
| 参数 | 类型 | 说明 |
| ---- | ----- | -------- |
| `a` | array | 一维数组 |
| `b` | array | 一维数组 |
返回:array
### 示例
```tsl
a := rand(1000)*5;
b := array(0, 1, 2, 3, 4, 5);
histc(a, b);
```
## `princomp(x, ep, is_stand, resid)`
声明:function
主成分分析,isStand为0时从中心化协方差出发进行主成分分析,为1时从相关系数出发,进行主成分分析
| 参数 | 类型 | 说明 |
| ---------- | ------------- | ------------------------------------------- |
| `x` | array of real | 样本数据,二维数字数组; |
| `ep` | real | 累计方差贡献度阈值,实数,缺省时默认为0.85; |
| `is_stand` | bool | 是否标准化,布尔类型,缺省时为真; |
| `resid` | array | 残差,变参输出,二维数字数组; |
返回:array
### 示例
```tsl
data := array(
(947.00, 23.4, 14.8, 45.3, 0.46, 85.2, 373.00, 9.54, 0.37, 3.88),
(935.00, 23.2, 16.2, 41.7, 0.4, 83.3, 305.00, 7.9, 0.38, 4.81),
(918.2, 20.9, 14.8, 43.8, 0.38, 82.6, 320.00, 9.51, 0.43, 4.52),
(910.7, 23.4, 16.1, 44.00, 0.46, 85.2, 338.00, 8.6, 0.33, 3.84),
(905.00, 22.9, 17.00, 39.8, 0.45, 80.4, 348.00, 9.53, 0.42, 4.4),
(890.6, 22.3, 15.7, 44.00, 0.41, 85.4, 286.00, 8.67, 0.39, 4.5),
(853.4, 20.9, 15.9, 41.6, 0.35, 85.4, 273.00, 9.79, 0.42, 4.29),
(837.3, 20.2, 14.4, 37.3, 0.33, 82.5, 326.00, 7.62, 0.36, 4.73),
(833.3, 22.2, 15.2, 38.3, 0.37, 82.2, 310.00, 7.84, 0.4, 5.1),
(760.9, 20.4, 15.5, 40.7, 0.32, 84.2, 268.00, 7.75, 0.35, 4.52),
(760.3, 20.8, 15.1, 44.8, 0.35, 79.5, 273.00, 8.91, 0.45, 5.05),
(742.5, 23.4, 14.7, 43.1, 0.35, 79.5, 310.00, 9.13, 0.4, 4.36));
return princomp(data, 0.85, 1, resid);
```
## `Regress_domin_formula(y, x)`
声明:function
相对重要性分析-R2公式分解法 功能描述: 1、相对重要性分析 2、算法:根据含常数项的多元回归的r2的分解公式,来计算 不同解释变量的相对贡献度 3、公式法: 未考虑到不同解释变量之间的相互关系, 贡献度可能为负数
<!-- tags: R2 -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------------- |
| `y` | array | Array of number,因变量 |
| `x` | array | Array of number,自变量 |
返回:array
## `Regress_domin_marginal(y, x, variable, option)`
声明:function
相对重要性分析-边际R2法 功能描述: 获取指定变量或所有变量的相对重要性分析, 与公式法相比,考虑了变量的相互关系,且贡献为正, 但是贡献度的和近似等于R2
<!-- tags: R2 -->
| 参数 | 类型 | 说明 |
| ---------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `y` | array | 因变量,被解释变量,是一维数字数组 |
| `x` | array | 自变量,解释变量,是二维数字数组 |
| `variable` | any | 指定变量,通过给X的列名,来指定单个变量,给nil时,表示所有变量【默认】 |
| `option` | any | 相对重要性的算法选择;1:利用包含指定变量回归中贡献度的均值计算【默认】,即平均R2边际效用法;0:利用完整回归中剔除其他变量的贡献度计算,即快速R2边际效用法 |
返回:array
@@ -0,0 +1,51 @@
# 数学函数 / 数值计算 / 数值微积分
## `hessian(fun, x)`
声明:function
海塞矩阵 求解函数 fun 在x点的 海塞矩阵
| 参数 | 类型 | 说明 |
| ----- | ------ | ---------------- |
| `fun` | string | 字符串,函数名 |
| `x` | array | 一维数组,指定点 |
返回:array
### 示例
```tsl
return hessian("Hessian.demo", array(3, 4));
```
## `integral(call_back, a, b, method)`
声明:function
求函数的数值积分
| 参数 | 类型 | 说明 |
| ----------- | ------ | -------------------- |
| `call_back` | string | 计算被积函数值的回调 |
| `a` | double | 实型变量。积分下限 |
| `b` | double | 实型变量。积分上限 |
| `method` | string | 积分方法 |
返回:double
### 示例
范例01:使用 Romberg 方法计算积分
```tsl
function fun1(x);
begin
return 2 * x + 1;
end;
a := 1;
b := 3;
callback := "fun1";
return integral(callback, a, b, 'romberg');
// 输出:10
```
@@ -0,0 +1,278 @@
# 数学函数 / 数值计算 / 插值
## `chckxy(x, y)`
声明:function
合并xy后对x列正序排列
| 参数 | 类型 | 说明 |
| ---- | ----- | -------- |
| `x` | array | 一维数组 |
| `y` | array | 一维数组 |
返回:array
### 示例
```tsl
uses interp_unit;
x := array(5, 1, 19, 8);
y := array(2, 3, 1, 7);
chckxy(x, y);
return x | y;
// 输出:array((1,3),(5,2),(8,7),(19,1))
```
## `histc2(a, b)`
声明:function
记录a中的元素在b中第几个区间的位置
| 参数 | 类型 | 说明 |
| ---- | ----- | -------- |
| `a` | array | 一维数组 |
| `b` | array | 一维数组 |
返回:array
### 示例
```tsl
uses interp_unit;
a := 1->10;
b := 3->7;
return histc2(a, b);
// 输出:array(0,0,1,1,2,3,4,0,0,0)
```
## `nearest(x, y, xi)`
声明:function
最邻近插值
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------------- |
| `x` | array | 一维数组 横坐标序列 |
| `y` | array | 一维数组 纵坐标序列 |
| `xi` | array | 一维数组 插值点序列 |
返回:array
### 示例
```tsl
uses interp_unit;
x := array(5, 1, 19, 8);
y := array(2, 3, 1, 7);
xi := array(4, 12);
return nearest(x, y, xi);
// 输出:array(3,1)
```
## `pchip(x, y, xx)`
声明:function
分段三次hermite插值
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------------- |
| `x` | array | 一维数组 横坐标序列 |
| `y` | array | 一维数组 纵坐标序列 |
| `xx` | array | 一维数组 插值点序列 |
返回:array
### 示例
```tsl
uses interp_unit;
x := array(5, 1, 19, 8);
y := array(2, 3, 1, 7);
xx := array(4, 12);
return pchip(x, y, xx);
// 输出:array(3.34030621353744,6.93450987255447)
```
## `ppval(pp, xx)`
声明:function
对插值点列的值数据区间中计算出插值
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ----------------------------- |
| `pp` | array | 二维数组,包含列 "x"、"coefs" |
| `xx` | array | 一维数组 插值点序列 |
返回:array
### 示例
```tsl
uses interp_unit;
x := array(1, 5, 8, 19);
y := array(3, 2, 7, 1);
s := array(0, 0, 0, 0);
dx := array(4, 3, 11);
divdif := array(-0.25, 1.66666666666667, -0.545454545454545);
pp := pwch(x, y, s, dx, divdif);
xx := array(4, 12);
return ppval(pp, xx);
// 输出:array(2.15625,5.19684447783622)
```
## `pwch(x, y, s, dx, divdif)`
声明:function
计算下xy所对应的不同间隔区间
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| -------- | ----- | -------- |
| `x` | array | 一维数组 |
| `y` | array | 一维数组 |
| `s` | array | 一维数组 |
| `dx` | array | 一维数组 |
| `divdif` | array | 一维数组 |
返回:array
### 示例
```tsl
uses interp_unit;
x := array(1, 5, 8, 19);
y := array(3, 2, 7, 1);
s := array(0, 0, 0, 0);
dx := array(4, 3, 11);
divdif := array(-0.25, 1.66666666666667, -0.545454545454545);
return pwch(x, y, s, dx, divdif);
// 输出:array("x":(1,5,8,19),"coefs":
// ((0.03125,-0.1875,0,3),
// (-0.370370370370371,1.66666666666667,0,2),
// (0.00901577761081892,-0.148760330578512,0,7)))
```
## `interp(x, y, xi, method)`
声明:function
分段插值函数,根据给定的数据 x,y 对数据xv进行分段插值,可选择方法
| 参数 | 类型 | 说明 |
| -------- | ------------- | ------------------------------------------------------------- |
| `x` | array of real | 实型一维数组,长度为N。存放给定N个点的值Xi,要求X0<X1...<Xn-1 |
| `y` | array of real | 实型一维数组,长度为N。存放N个给定点上的函数值Yi |
| `xi` | array of real | 实数或者一维实数数组,存放指定插值点的值 |
| `method` | string | 方法选择,具体取值如下: |
返回:array
### 示例
范例01:使用三次样条插值生成一组插值点
```tsl
x := array(0, 0.01)->1;
y := x^2-x;
xi := array(0.005, 0.01)->1;
yi := interp(x, y, xi, 'spline');
return yi;
```
范例02:最近邻插值
```tsl
x_ := array(5, 1, 19, 8);
y_ := array(2, 3, 1, 7);
xi := array(4, 12);
return interp(x_, y_, xi, "nearest");
// 输出:array(2,7)
```
范例03:分段线性插值
```tsl
x_ := array(5, 1, 19, 8);
y_ := array(2, 3, 1, 7);
xi := array(4, 12);
return interp(x_, y_, xi, "linear");
// 输出:array(2.25,4.8182)
```
范例04:三次样条插值
```tsl
x_ := array(5, 1, 19, 8);
y_ := array(2, 3, 1, 7);
xi := array(4, 12);
return interp(x_, y_, xi, "spline");
// 输出:array(1.1407,13.9444)
```
范例05:分段三次 Hermite 插值
```tsl
x_ := array(5, 1, 19, 8);
y_ := array(2, 3, 1, 7);
xi := array(4, 12);
return interp(x_, y_, xi, "pchip");
// 输出:array(2.0156,6.7115)
```
## `linear(x, y, xi)`
声明:function
线性插值
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------------- |
| `x` | array | 一维数组 横坐标序列 |
| `y` | array | 一维数组 纵坐标序列 |
| `xi` | array | 一维数组 插值点序列 |
返回:array
### 示例
```tsl
uses interp_unit; // 置顶
x := array(5, 1, 19, 8);
y := array(2, 3, 1, 7);
xi := array(4, 12);
return interp_unit.linear(x, y, xi);
// 输出:array(2.66666666666667,1.77777777777778)
```
## `spline(x1, y1, xx1)`
声明:function
三次样条插值
| 参数 | 类型 | 说明 |
| ----- | ----- | ----------------------- |
| `x1` | array | 一维数字数组 横坐标序列 |
| `y1` | array | 一维数字数组 纵坐标序列 |
| `xx1` | array | 实数或一维数字数组 插值 |
返回:array
### 示例
```tsl
x := array(5, 1, 19, 8);
y := array(2, 3, 1, 7);
xx := array(4, 12);
return spline(x, y, xx);
// 输出:array(1.1407,13.9444)
```
@@ -0,0 +1,297 @@
# 数学函数 / 数值计算 / 矩阵运算及分解
## `chol(h, l, p, options, sneg)`
声明:function
进行乔列斯基分解,H对称正定,则可以得到三角阵L
| 参数 | 类型 | 说明 |
| --------- | ------- | ------------------------------------------------------------ |
| `h` | array | 需要被分解的对称矩阵,正定矩阵的分解才能成功 |
| `l` | array | 变参返回乔列斯基分解得到的三角阵 |
| `p` | integer | 变参返回H的分解信息,-1表示全部分解成功,否则表示分解到第p步 |
| `options` | array | 三角阵选项,默认'upper'为上三角,'lower' 为下三角 |
| `sneg` | array | 当 H 非正定时计算曲率方向,正定时为空 |
返回:array
### 示例
```tsl
h := corr(rand(100, 4));
chol(h, l, p); // 乔列斯基分解
if p = -1 then return l; // p=-1表示分解成功
```
## `cond(x)`
声明:function
求矩阵 X 的条件数,最大奇异值除最小奇异值
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------------------------- |
| `x` | array | array 需要求条件数的矩阵或二维数组 |
返回:real
### 示例
```tsl
x := array((9, 1), (-1, 0), (0, 2), (1, 1));
return cond(x); // 输出:4.22
```
## `det(a)`
声明:function
行列式
| 参数 | 类型 | 说明 |
| ---- | ----- | ----------------- |
| `a` | array | 二维数字数组 样本 |
返回:real
### 示例
```tsl
a := array((1, 2), (3, 4));
return det(a); // 输出:-2
```
## `diag(a)`
声明:function
对角阵
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------- |
| `a` | array | array 数组 |
返回:array
### 示例
```tsl
a := array((2, 1), (1, 3));
return diag(a); // 输出:array(2,3);
```
## `eigen(a, eigen, eigenvectors, isreal)`
声明:function
特征根与特征向量
| 参数 | 类型 | 说明 |
| -------------- | ------- | --------------------------------- |
| `a` | array | array 特征值分解的数据 |
| `eigen` | array | array 变参返回特征值 |
| `eigenvectors` | array | array 变参返回特征向量 |
| `isreal` | integer | bool 是否只输出实特征值及特征向量 |
返回:integer
### 示例
```tsl
a := array((1, 2), (3, 4));
eigen(a, eigen);
return eigen;
// array(-0.37,5.37)
```
## `Eigen_Jacobi(matrix, eigen_values, eigen_vectors)`
声明:function
用 Jacobi 方法计算矩阵特征值和特征向量
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| --------------- | ----- | ---------------- |
| `matrix` | array | 待分解矩阵 |
| `eigen_values` | any | 接收特征值数组 |
| `eigen_vectors` | any | 接收特征向量矩阵 |
返回:void
### 示例
```tsl
matrix := array((2.0, 1.0), (1.0, 2.0));
eigen_values := array();
eigen_vectors := array();
Eigen_Jacobi(matrix, eigen_values, eigen_vectors);
return array(eigen_values, eigen_vectors);
// 输出:返回特征值数组和特征向量矩阵
```
## `isDefinite(h)`
声明:function
判断矩阵是否正定、半正定,采用 Cholesky 分解方法
<!-- tags: 判断 检查 -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------- |
| `h` | array | array 样本 |
返回:real
### 示例
```tsl
x := array((3, 1), (1, 4));
return isDefinite(x); // 输出:1
```
## `isSymmetry(a, tol)`
声明:function
判断是否为对称矩阵
<!-- tags: 判断 检查 -->
| 参数 | 类型 | 说明 |
| ----- | ----- | -------------- |
| `a` | array | array 二维数组 |
| `tol` | real | real 精度 |
返回:integer
### 示例
```tsl
a := array((2, 1), (1, 3));
return isSymmetry(a, 0.1); // 输出:1
```
## `norm2(a, flag)`
声明:function
范数
| 参数 | 类型 | 说明 |
| ------ | ------ | ----------------- |
| `a` | array | 二维数字数组 样本 |
| `flag` | string | string 范数类型 |
返回:real
### 示例
```tsl
a := array((2, 1), (1, 3));
return norm2(a, 'inf'); // 输出:4
```
## `orth(a)`
声明:function
矩阵范围内的标准正交基向量
| 参数 | 类型 | 说明 |
| ---- | ----- | ------ |
| `a` | array | 数组, |
返回:array
### 示例
```tsl
// 计算矩阵A的标准正交基
a := array((0, 1), (1, 1), (1, 0));
return orth(a);
```
## `pinv(a, t)`
声明:function
伪逆
| 参数 | 类型 | 说明 |
| ---- | ----- | --------------------------------------- |
| `a` | array | array 矩阵 |
| `t` | real | real 精度 默认为 2.220446049250313e-016 |
返回:array
### 示例
```tsl
x := array((9, 1), (-1, 0), (0, 2), (1, 1));
return pinv(x);
```
## `reIndex2(data, flag)`
声明:function
修改数组的行标或列名,主要用于字符串下标修改为数字下标等
| 参数 | 类型 | 说明 |
| ------ | ---------------- | ---- |
| `data` | array,tablearray | |
| `flag` | integer | |
返回:array,tablearray
### 示例
范例01:将表列标改为数字
```tsl
a := array('C': ('A': 1, 'B': 'too'), 'D': ('A': 2, 'B': 'two'));
return reIndex2(a, 0);
```
范例02:将行列标作为首列首行
```tsl
a := array('C': ('A': 1, 'B': 'too'), 'D': ('A': 2, 'B': 'two'));
return reIndex2(a, 5);
```
## `roots(p)`
声明:function
一元n次方程求根
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------ |
| `p` | array | array 多项式 |
返回:array
### 示例
```tsl
// 求根:3x^3+x^2+x^1+0^0=0
return roots(array(0, 1, 1, 3));
```
## `Standarize_II(sample, leib)`
声明:function
数据预处理,对二维数字数组进行标准化化处理;行:样本个数;列:因子个数
| 参数 | 类型 | 说明 |
| -------- | ----- | ----------------- |
| `sample` | array | 二维数字数组 样本 |
| `leib` | any | Int 标准化类型 |
返回:array
@@ -37,3 +37,253 @@ return ret;
// ("b","c"),
// ("c"))
```
## `betainc(x, a, b, tail)`
声明:function
不完全贝塔函数
| 参数 | 类型 | 说明 |
| ------ | ------ | ------------------------------------- |
| `x` | array | (一维数字数组,实数) 变量 要求0<=x<=1; |
| `a` | float | float 不完全贝塔函数的参数 要求a>=0; |
| `b` | float | float 不完全贝塔函数的参数 要求b>=0; |
| `tail` | string | 返回类型 |
返回:array
### 示例
```tsl
a := 3;
b := 4;
tail := 'upper';
x := rand(10);
return array(betainc(x, a, b), betainc(x, a, b, tail));
```
## `maxDrawDown(data, updn, interval, ifabs)`
声明:function
最大回撤
| 参数 | 类型 | 说明 |
| ---------- | ------- | ----------------------------------------------- |
| `data` | array | 一维数字序列 |
| `updn` | bool | 涨跌标示符。1为求最大涨,0为求最大跌(默认值) |
| `interval` | integer | 最大区间,为空或者小于1时,求整个区间(默认值) |
| `ifabs` | float | 预留字段,暂时没有实际意义,可不给值 。 |
返回:real/table
### 示例
范例01
```tsl
// 计算一组序列的最大涨幅
data := array(3, 1, 7, 5, 6, 3);
return maxDrawDown(data, 1);
// 输出:
// 1
// 2
// 6
// 6
// 入点为 data[1],出点为 data[2],两者差为 6,最大涨幅比例差为 6
```
范例02
```tsl
// ------计算100日股票的最大跌幅
setSysParam(pn_stock(), 'SZ000002');
setSysParam(pn_date(), 20181031T);
setSysParam(pn_rate(), 1);
setSysParam(pn_rateday(), 20181031T);
setSysParam(pn_cycle(), cy_day());
data := nDay3(100, close());
t := maxDrawDown(data);
return t;
// 输出:
// 12
// 43
// 6.96759
// 0.25765
// 注:若需计算最大跌幅率,则只需t[3] * 100即可。
```
## `minRecoveryTime(r, n1, n2)`
声明:function
最小恢复时间
| 参数 | 类型 | 说明 |
| ---- | ------- | -------------------- |
| `r` | array | (一维数字数组) 序列, |
| `n1` | integer | Int 买入点位置, |
| `n2` | integer | Int 卖出点位置 |
返回:integer
### 示例
```tsl
// 科大讯飞(SZ002230)在20201220最近十个交易日序列中第一天购买第二天卖出后的最小恢复时间
setSysParam(pn_stock(), "SZ002230");
setSysParam(PN_Date(), 20201220t);
r := nDay(10, "close", close())[:, "close"];
return minRecoveryTime(r, 0, 1);
// 输出:6
```
## `nchoosek(n, k)`
声明:function
样本组合
| 参数 | 类型 | 说明 |
| ---- | ------- | ------------------ |
| `n` | array | 样本(一维数组) |
| `k` | integer | 每组样本数量(整数) |
返回:array
### 示例
范例01:从四个样本中选取两个进行组合
```tsl
return nchoosek(array('a', 'b', 'c', 'd'), 2);
// 输出:
// array(
// ("d", "c"),
// ("d", "b"),
// ("d", "a"),
// ("c", "b"),
// ("c", "a"),
// ("b", "a"))
```
## `percentage(y, per, style)`
声明:function
百分位去极值
| 参数 | 类型 | 说明 |
| ------- | ----------- | ------------------------------------------------------------------------------------------- |
| `y` | array | 数字数组,待处理数据 |
| `per` | real\|array | 实数或者一维数字数组,去极值百分位;5表示 5%; |
| `style` | integer | 整数,0 或者不输入时 去 百分位大于 per 和小于per的;1, 去除小于per的;2 去除 大于per的 数据 |
返回:array
### 示例
```tsl
y := rand(100, 2);
per := 20;
style := 0;
return percentage(y, per, style);
```
## `percentileOfScore(data, score, _type)`
声明:function
百分位占比(%)
| 参数 | 类型 | 说明 |
| ------- | ------- | ---------------- |
| `data` | array | 数组 待处理数据, |
| `score` | float | float 待排序值, |
| `_type` | integer | 算法 |
返回:array
### 示例
```tsl
// 去除随机数组的极值
data := array(1, 2, 2, 4);
ret := array();
n := 0;
for i := 0 to 5 do
begin
ret[n, 'score'] := i;
for j, kind in array('rank', 'strict', 'weak', 'mean')do
begin
ret[n, kind] := percentileOfScore(data, i, j);
end
ret[n, 'percenrank'] := percentrank(data, i);
n++;
end;
return ret;
```
## `perms(x)`
声明:function
样本排列
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------- |
| `x` | array | 样本,数组或数字 |
返回:array
### 示例
范例01:求10的阶乘
```tsl
return perms(10);
// 输出:3628800
```
范例02:排列组合
```tsl
return perms(array("a", "b", "c"));
// 输出:
// array(
// ("c", "b", "a"),
// ("c", "a", "b"),
// ("b", "c", "a"),
// ("b", "a", "c"),
// ("a", "b", "c"),
// ("a", "c", "b"))
```
范例03:返回数组Array(('A','B'),('C', 'D'))中任意两个数据的排列组合
```tsl
v := Array(('A', 'B'), ('C', 'D'));
return perms(v, 2);
```
范例04:对排列组合的每列求和
```tsl
func := new funcExe();
a := array("A", "B", "C");
return perms(a, 3, func);
type funcExe = class
public
Data;
function create();
begin
Data := "";
end;
function Exe(dat);
begin
Data += dat;
end;
end;
```
@@ -30,3 +30,874 @@ return nonLP_fmincon(
"sum", array(1.0), empty_matrix, empty_matrix,
empty_matrix, empty_matrix, "");
```
## `Fmin(fun, x0, a, b, aeq, beq, lb, ub, nonlcon)`
声明:function
用起作用集法求任意形式的非线性优化问题,返回最优点和最优值。新的非线性规划代码建议使用 `Prog_N`
来源:天软金融分析.NET函数大全 > TSL函数 > 数学函数 > 优化 > Fmin
Source ID21143
| 参数 | 类型 | 说明 |
| --------- | ------ | ------------------------------------ |
| `fun` | string | 目标函数名 |
| `x0` | array | 初值向量 |
| `a` | array | 线性不等式约束系数矩阵 |
| `b` | array | 线性不等式约束右侧向量 |
| `aeq` | array | 线性等式约束系数矩阵 |
| `beq` | array | 线性等式约束右侧向量 |
| `lb` | array | 变量下界 |
| `ub` | array | 变量上界 |
| `nonlcon` | string | 非线性约束回调名;无约束时传空字符串 |
返回:array
### 示例
```tsl
return Fmin(
"sum",
array(0.0),
array(),
array(),
array(),
array(),
array(-1.0),
array(1.0),
""
);
// 输出:返回包含最优点和最优值的数组
```
## `H_J_CallBack(x, r)`
声明:function
H_J算法回调
<!-- tags: H_J -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------- |
| `x` | array | 一维数字数组类型 |
| `r` | float | 实数类型 |
返回:float
## `H_J_Method_Pgm(call_back)`
声明:function
H_J算法测试
<!-- tags: H_J -->
| 参数 | 类型 | 说明 |
| ----------- | ------ | ---------------------------- |
| `call_back` | string | 字符串类型,计算目标值的回调 |
返回:array
## `Hooke_Jeeves_Method(x0, d0, d_min, r, call_back)`
声明:function
H-J法求解无约束最优化问题
| 参数 | 类型 | 说明 |
| ----------- | ------ | ---------------------------- |
| `x0` | array | 一维数字数组类型 |
| `d0` | array | 一维数字数组类型 |
| `d_min` | array | 一维数字数组类型 |
| `r` | float | 实数类型 |
| `call_back` | string | 字符串类型,计算目标值的回调 |
返回:array
### 示例
```tsl
return Hooke_Jeeves_Method(
array(2.0),
array(1.0),
array(0.01),
0.5,
"H_J_CallBack"
);
// 输出:返回包含 1 个元素的最优解数组
```
## `intLinProg(f, a, b, aeq, beq, int_par)`
声明:function
(线性规划,包括整数规划,01规划建议统一使用prog_L函数)解决如下整数规划模型问题
| 参数 | 类型 | 说明 |
| --------- | ------------- | -------------------------------------------------------------------------------------------- |
| `f` | array of real | 一维实数数组,表示整数规划模型的目标函数系数; |
| `a` | array of real | 二维实数数组,表示整数规划模型的带“”约束方程系数矩阵,如果是带“”,则将该方程两边同乘以“-1”; |
| `b` | array of real | 一维实数数组,表示整数规划模型带“”约束方程的约束值; |
| `aeq` | array of real | 二维实数数组,表示整数规划模型带“=”约束方程系数矩阵; |
| `beq` | array of real | 一维实数数组,表示整数规划模型带“=”约束方程的约束值; |
| `int_par` | array of real | 一维整数数组,表示要取整数的变量,缺省时表示全部变量取整; |
返回:array
### 示例
求解模型:最大化 `40x1 + 90x2`,约束为 `9x1 + 7x2 <= 56``7x1 + 20x2 <= 70`,且 `x1``x2` 为非负整数。
范例01:整数线性规划
```tsl
f := array(-40, -90);
a := array((9, 7), (7, 20));
b := array(56, 70);
aeq := array();
beq := array();
int_par := array();
return intLinProg(f, a, b, aeq, beq, int_par);
// 输出:x1=4,x2=2,f(x)=-340
```
## `linearProgramming(f, a, b, aeq, beq)`
声明:function
(线性规划,包括整数规划,01规划建议统一使用prog_L函数),解决如下线性规划模型问题
| 参数 | 类型 | 说明 |
| ----- | ------------- | -------------------------------------------------------------------------------------------- |
| `f` | array of real | 一维实数数组,表示线性规划模型的目标函数系数; |
| `a` | array of real | 二维实数数组,表示线性规划模型的带“”约束方程系数矩阵,如果是带“”,则将该方程两边同乘以“-1”; |
| `b` | array of real | 一维实数数组,表示线性规划模型带“”约束方程的约束值; |
| `aeq` | array of real | 二维实数数组,表示线性规划模型带“=”约束方程系数矩阵; |
| `beq` | array of real | 一维实数数组,表示线性规划模型带“=”约束方程的约束值; |
返回:any
### 示例
求解模型:最小化 `-5x1 - 4x2 - 6x3`,约束为 `x1 - x2 + x3 <= 20``3x1 + 2x2 + 4x3 <= 42``3x1 + 2x2 <= 30`,且各变量非负。
范例01:线性规划
```tsl
f := array(-5, -4, -6);
a := array((1, -1, 1), (3, 2, 4), (3, 2, 0));
b := array(20, 42, 30);
aeq := array();
beq := array();
return linearProgramming(f, a, b, aeq, beq);
// 输出:x1=0,x2=15,x3=3,f(x)=-78
```
## `NonLP_BSearch(fun, x0, h)`
声明:function
一维盲人搜索方法,目标函数既可以是单峰,也可以是多峰。返回最优点和最优值。(中间函数)
<!-- tags: 查找 搜索 lookup -->
| 参数 | 类型 | 说明 |
| ----- | ------ | ---------------------------- |
| `fun` | string | 目标函数表达式,为字符串类型 |
| `x0` | float | 初值,为实数类型; |
| `h` | float | 步长,为实数类型; |
返回:array
## `NonLP_Fibonacci(fun, a, b)`
声明:function
(一维最小值搜索建议统一使用NonLP_Fminbnd函数),斐波那契法,用斐波那契数列去搜索\[a,b\]区间内目标函数的最小值,返回最优点和最优值
<!-- tags: 查找 搜索 lookup -->
| 参数 | 类型 | 说明 |
| ----- | ------ | ------------------------------ |
| `fun` | string | 目标函数表达式,为字符串类型; |
| `a` | float | 区间左侧,为实数类型; |
| `b` | float | 区间右侧,为实数类型 |
返回:array
## `NonLP_Fminbnd(fun, a, b, methods)`
声明:function
一维最小值搜索,求解模型如下: min fun(x)
<!-- tags: 查找 搜索 lookup -->
| 参数 | 类型 | 说明 |
| --------- | ------ | ------------------------------------------------------------------------------ |
| `fun` | string | 目标函数(函数名字符串) |
| `a` | float | 下界,实数 |
| `b` | float | 上界,实数 |
| `methods` | any | 方法选择0 :黄金分割法+抛物线法(默认)1 : 盲人收索法2 :黄金分割法3 :斐波那契法 |
返回:array
### 示例
```tsl
return NonLP_Fminbnd("abs", -2.0, 3.0, 0);
// 输出:返回包含 X、opt 和 Iter 的结果数组
```
## `NonLP_Fminsearch(fun, x0, methods)`
声明:function
无约束最小值求解,求解模型如下: min fun(x)
<!-- tags: 查找 搜索 lookup -->
| 参数 | 类型 | 说明 |
| --------- | ------ | -------------------------------------------------------------------------- |
| `fun` | string | 目标函数,函数名字符串 |
| `x0` | array | 初始值,一维数字数组 |
| `methods` | any | 方法选择0 单纯形法1 转轴法2 模式搜索法3 拟牛顿下山法(默认方法,推荐使用) |
返回:array
## `NonLP_Golden(fun, a, b)`
声明:function
(一维最小值搜索建议统一使用NonLP_Fminbnd函数),黄金分割法搜索\[a,b\]区间内目标函数的最小值,返回最优点和最优值
<!-- tags: 查找 搜索 lookup -->
| 参数 | 类型 | 说明 |
| ----- | ------ | ------------------------------ |
| `fun` | string | 目标函数表达式,为字符串类型; |
| `a` | float | 区间左侧,为实数类型; |
| `b` | float | 区间右侧,为实数类型 |
返回:array
## `NonLP_GP(fun, a, b)`
声明:function
(一维最小值搜索建议统一使用NonLP_Fminbnd函数),黄金分割+抛物线插值法:一维优化方法,返回最优点和最优值
<!-- tags: 查找 搜索 lookup -->
| 参数 | 类型 | 说明 |
| ----- | ------ | ------------------------------ |
| `fun` | string | 目标函数表达式,为字符串类型; |
| `a` | float | 区间左侧,为实数类型; |
| `b` | float | 区间右侧,为实数类型; |
返回:array
## `NonLP_Hooke_Jeeves(fun, x0)`
声明:function
(无约束最小值求解建议统一使用NonLP_Fminsearch函数)模式搜索法,又叫Hooke-Jeeves法,求解无约束多维极值问题,返回最优点和最优值
<!-- tags: 查找 搜索 lookup -->
| 参数 | 类型 | 说明 |
| ----- | ------ | ------------------------------ |
| `fun` | string | 目标函数表达式,为字符串类型; |
| `x0` | array | 初值向量,为一维数组类型 |
返回:array
## `NonLP_minFactor(fun, x0, aeq, beq, nonlcon)`
声明:function
(非线性规划建议统一使用prog_n函数),乘子法求等式约束问题,可求解如下问题
| 参数 | 类型 | 说明 |
| --------- | ------ | ------------------------------------ |
| `fun` | string | 目标函数表达式,为字符串类型; |
| `x0` | array | 初值向量,为一维数组类型; |
| `aeq` | array | 线性矩阵等式约束,为二维数组类型; |
| `beq` | array | 线性向量等式约束值,为一维数组类型; |
| `nonlcon` | string | 非线性约束回调,为字符串类型; |
返回:array
## `NonLP_minPS(fun, x0, a, b, nonlcon)`
声明:function
(非线性规划建议统一使用prog_n函数),坐标轮换法求不等式约束问题,初值必须在可行域内!可求解如下问题
| 参数 | 类型 | 说明 |
| --------- | ------ | -------------------------------------- |
| `fun` | string | 目标函数表达式,为字符串类型; |
| `x0` | array | 初值向量,为一维数组类型; |
| `a` | array | 线性矩阵不等式约束,为二维数组类型; |
| `b` | array | 线性向量不等式约束值,为一维数组类型; |
| `nonlcon` | string | 非线性约束回调,为字符串类型; |
返回:array
## `NonLP_minSUMT(fun, x0, a, b, aeq, beq, nonlcon, methods)`
声明:function
(非线性规划建议统一使用prog_n函数)混合惩罚函数+转轴法/模式搜索法:可解所有优化问题,返回最优点、最优值和迭代次数。可求解如下问题
<!-- tags: 查找 搜索 lookup -->
| 参数 | 类型 | 说明 |
| --------- | ------ | -------------------------------------- |
| `fun` | string | 目标函数表达式,为字符串类型; |
| `x0` | array | 初值向量,为一维数组类型; |
| `a` | array | 线性矩阵不等式约束,为二维数组类型; |
| `b` | array | 线性向量不等式约束值,为一维数组类型; |
| `aeq` | array | 线性矩阵等式约束,为二维数组类型; |
| `beq` | array | 线性向量等式约束值,为一维数组类型; |
| `nonlcon` | string | 非线性约束回调,为字符串类型; |
| `methods` | string | 方法选择,NM,Rb,HJ |
返回:array
## `NonLP_Nelder(fun, x0)`
声明:function
(无约束最小值求解建议统一使用NonLP_Fminsearch函数)内德-米德法,无约束多维的非线性规划方法,即单纯形法。返回最优点和最优值
<!-- tags: 查找 搜索 lookup -->
| 参数 | 类型 | 说明 |
| ----- | ------ | ------------------------------ |
| `fun` | string | 目标函数表达式,为字符串类型; |
| `x0` | array | 初值向量,为一维数组类型 |
返回:array
## `NonLP_Range(fun, x0, h)`
声明:function
进退法,可一维优化问题的确定搜索区间,但目标函数必须是单峰函数,返回结果为上下界的取值。(中间函数)
<!-- tags: 查找 搜索 lookup -->
| 参数 | 类型 | 说明 |
| ----- | ------ | ---------------------------- |
| `fun` | string | 目标函数表达式,为字符串类型 |
| `x0` | float | 初值,为实数类型; |
| `h` | float | 步长,为实数类型; |
返回:array
## `NonLP_Rosenbrock(fun, x0)`
声明:function
(无约束最小值求解建议统一使用NonLP_Fminsearch函数)Rosenbrock求无约束多维极值问题,返回最优点和最优值
<!-- tags: 查找 搜索 lookup -->
| 参数 | 类型 | 说明 |
| ----- | ------ | ------------------------------ |
| `fun` | string | 目标函数表达式,为字符串类型; |
| `x0` | array | 初值向量,为一维数组类型 |
返回:array
## `ozProg(f, a, b)`
声明:function
(线性规划,包括整数规划,01规划建议统一使用prog_L函数),0-1规划,解决如下0-1整数规划模型问题 返回该0-1规划模型的最小值及其对应变量的取值,其中可以转化为和
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------------------------------------------------------------------------------------- |
| `f` | array | 一维实数数组,表示0-1规划模型的目标函数系数; |
| `a` | array | 二维实数数组,表示0-1规划模型的带“”约束方程系数矩阵,如果是带“”,则将该方程两边同乘以“-1”; |
| `b` | array | 一维实数数组,表示0-1规划模型带“”约束方程的约束值; |
返回:array
### 示例
```tsl
f := array(-3, 2, -5);
a := array((1, 2, -1), (1, 4, 1), (1, 1, 0), (4, 0, 1));
b := array(2, 4, 3, 6);
ozProg(f, a, b);
// 输出:x1=1,x2=0,x3=1,f(x)=-8
```
## `Prog_L(f, a, b, aeq, beq, lb, ub, x0, options, ozarr, intarr)`
声明:function
使用单纯形法,和起作用集法,系统默认作用集形法求解线性规划问题,即求解目标都为线性和约束条件都为线性的规划问题 Prog_L(f,A,b) 求解不等式约束 Prog_L(f,A,b,Aeq,beq) 求解不等式约束、等式约束 Prog_L(f,A,b,Aeq,beq,LB,UB) 求解不等式约束、等式约束、上下界限约束 Prog_L(f,A,b,Aeq,beq,LB,UB,x0,options) 求解不等式约束、等式约束,上下限约束,加入用户算法设置 Prog_L(f,A,b,Aeq,beq,LB,UB,x0,options,ozarr) 求解不等式约束、等式约束、上下限约束、0-1 约束 Prog_L(f,A,b,Aeq,beq,LB,UB,x0,options,ozarr,intarr) 求解不等式约束、等式约束、上下限约束、0-1 约束、整数约束 模型表达: min= sum(f\*x) st. A:\*x<=b Aeq :\* x = Beq lb<x<ub x = (0 or 1) x = integer
<!-- tags: LB UB -->
| 参数 | 类型 | 说明 |
| --------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `f` | array | 线性目标,一维数字数组,不可缺省 |
| `a` | array | 线性约束,二维数字数组,不可缺省 |
| `b` | array | 线性约束,一维数字数组,不可缺省 |
| `aeq` | array | 线性约束,二维数字数组,缺省为空 |
| `beq` | array | 线性约束,一维数字数组,缺省为空 |
| `lb` | array | 下界约束,一维数字数组,缺省为空 |
| `ub` | array | 上界约束,一维数字数组,缺省为空 |
| `x0` | array | 初始值,一维数组 |
| `options` | array | 选项设置,数据表类型,缺省为:array( 'algorithm' :'activeset'//'simplex' 单纯形,'activeset' 作用集法;//(当整数、0-1 约束时推荐使用)'maxiter': 400 , //最大迭代次数;'tolcon': 1.0e-10, //约束容忍误差;'tolfun' : 1.0e-8 , //目标最小误差;'tolx' : 1.0e-8 //变量最小变化) |
| `ozarr` | array | 01约束条件,第1个变量为01变量则ozarr := array(0) |
| `intarr` | array | 整数约束条件,第2,3两个变量为整数变量则 intarr:=array(1,2);返回结果:;数据表类型;ret\["X"\] : 变量取值,一维数字数组;ret\["Fval"\] :规划目标值,实数;ret\["Error_M"\] : 结果信息,整数;ret\["Iter"\] : 迭代次数,整数 |
返回:array
## `Prog_M(fun, x0, goal, weight, a, b, aeq, beq, lb, ub, nlc, options)`
声明:function
求解多目标规划问题 模型表达: min AttainFactor st. f(x)-AttainFactor\*wight <=goal //目标约束 c(x)<=0; //非线性不等式约束 ceq(x)=0; //非线性等式约束 A\*x<=b; //线性不等式约束 aeq\*x=beq; //线性等式约束 lb<=x<=ub ; //边界约束
| 参数 | 类型 | 说明 |
| --------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `fun` | array | 目标函数,函数名字符串 |
| `x0` | array | 初始值 |
| `goal` | array | 目标中各个分目标的差,一维数组和目标个数相同 |
| `weight` | array | 目标中各个分量的在总体中的比重,一维数组和目标个数相同 |
| `a` | array | 不等式约束,二维数组 |
| `b` | array | 不等式约束,一维数组 |
| `aeq` | array | 等式约束,二维数组 |
| `beq` | array | 等式约束,一维数组 |
| `lb` | array | 下界,一维数组 |
| `ub` | array | 上界,一维数组 |
| `nlc` | string | 非线性约束,约束函数名字符串 |
| `options` | array | 算法参数设置,默认为:array('maxiter':400, //最大迭代次数'maxfunevals':'100\*numberofvariables', //目标回调最大次数'tolcon':1.0e-6,//约束容忍误差'tolfun' :1.0e-6,//目标最小误差'tolx' :1.0e-6, //变量最小变化'diffmaxchange':1e-1,//差分时最大步长'diffminchange':1e-8)// 差分时最小步长 |
返回:array
## `Prog_N(fun, x0, a, b, aeq, beq, lb, ub, nlc, options)`
声明:function
采用拟牛顿下山方法求解非线性规划求解。 Prog_n(fun,x0) 无约束最小值约束 Prog_n(fun,x0,A,B) 非线性不等式约束求解 Prog_n(fun,A,b,Aeq,beq) 求解不等式约束、等式约束 Prog_n(fun,x0,A,b,Aeq,beq,LB,UB) 求解不等式约束、等式约束、上下界限约束 Prog_n(fun,x0,A,b,Aeq,beq,LB,UB,x0,options) 模型表达 1非线性无约束最小值 min fun(x) 2非线性规划求解 min fun(x) st. c(x)<=0; //非线性不等式约束 ceq(x)=0; //非线性等式约束 A\*x<=b; //线性不等式约束 aeq\*x=beq; //线性等式约束 lb<=x<=ub ; //边界约束
<!-- tags: LB UB -->
| 参数 | 类型 | 说明 |
| --------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `fun` | array | 目标函数,目标函数名字符串类型,不可缺省。其中,目标函数的返回值必须是一个实数(1x1的矩阵,或长度为1的数组都不允许) |
| `x0` | array | 初始值,一维数字数组,不可缺省 |
| `a` | array | 不等式约束,二维数组,缺省为空 |
| `b` | array | 不等式约束,一维数组,缺省为空 |
| `aeq` | array | 等式约束,二维数组,缺省为空 |
| `beq` | array | 等式约束,一维数组,缺省为空 |
| `lb` | array | 下界,一维数组,缺省为空 |
| `ub` | array | 上界,一维数组,缺省为空 |
| `nlc` | array | 非线性约束,函数名,字符串 |
| `options` | array | 算法参数设置,默认为array('maxiter':400 , //最大迭代次数'maxfunevals':'100\*numberofvariables', //目标回调最大次数'tolcon':1.0e-6 ,//约束容忍误差'tolfun' :1.0e-6 ,//目标最小误差'tolx' :1.0e-6 , //变量最小变化'diffmaxchange':1e-1,//差分时最大步长'diffminchange':1e-8 )// 差分时最小步长 |
返回:array
## `Prog_Q(h, f, a, b, aeq, beq, lb, ub, x0, options)`
声明:function
二次规划问题求解(采用作用集方法) Prog_Q(H,f,A,b) 求解不等式约束 Prog_Q(H,f,A,b,Aeq,beq) 求解不等式约束、等式约束 Prog_Q(H,f,A,b,Aeq,beq,LB,UB) 求解不等式约束、等式约束、上下界限约束 Prog_Q(H,f,A,b,Aeq,beq,LB,UB,x0,options) 模型表达: min= `x\* H\* x /2 + sum(f\*x) st. A:\*x<=b Aeq :\* x = Beq; lb<x<ub
<!-- tags: LB UB -->
| 参数 | 类型 | 说明 |
| --------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `h` | array | 二次型,正定二次型二维数字数组,不可缺省 |
| `f` | array | 线性目标,一维数字数组,不可缺省 |
| `a` | array | 线性约束,二维数字数组,不可缺省 |
| `b` | array | 线性约束,一维数字数组,不可缺省 |
| `aeq` | array | 线性约束,二维数字数组,缺省为空 |
| `beq` | array | 线性约束,一维数字数组,缺省为空 |
| `lb` | array | 下界约束,一维数字数组,缺省为空 |
| `ub` | array | 上界约束,一维数字数组,缺省为空 |
| `x0` | array | 初始值,一维数组 |
| `options` | array | 选项设置,数据表类型,缺省为array('maxiter': 400 , //最大迭代次数'tolcon': 1.0e-6, //约束容忍误差'tolfun' : 1.0e-6 , //目标最小误差'tolx' : 1.0e-6 //变量最小变化) |
返回:array
## `quadLagR(h, f, aeq, beq)`
声明:function
(二次规划建议统一使用prog_Q函数)解决如下二次规划模型问题
| 参数 | 类型 | 说明 |
| ----- | ---------------- | ----------------------------------------------------- |
| `h` | array,tablearray | 二维实数数组,表示二次项目标函数系数,为对称矩阵 |
| `f` | array,tablearray | 一维实数数组,表示二次规划模型的目标函数系数; |
| `aeq` | array,tablearray | 二维实数数组,表示二次规划模型带“=”约束方程系数矩阵; |
| `beq` | array,tablearray | 一维实数数组,表示二次规划模型带“=”约束方程的约束值。 |
返回:any
### 示例
求解模型:最小化 `2x1^2 + x2^2 + x1*x2 - x1 - x2`,约束为 `x1 + x2 = 1`
范例01:带等式约束的二次规划
```tsl
h := Array((4, 1), (1, 2));
f := Array(-1, -1);
aeq := array((1, 1));
beq := array(1);
return quadLagR(h, f, aeq, beq);
// 输出:x1=0.25, x2=0.75, 最小值f(x)=-0.125
```
## `quadprog(h, f, a, b, aeq, beq)`
声明:function
(二次规划建议统一使用prog_Q函数),解决如下二次规划模型问题
| 参数 | 类型 | 说明 |
| ----- | ------------- | -------------------------------------------------------------------------------------------- |
| `h` | array of real | 二维实数数组,表示二次项目标函数系数,为对称矩阵 |
| `f` | array of real | 一维实数数组,表示二次规划模型的目标函数系数; |
| `a` | array of real | 二维实数数组,表示二次规划模型的带“”约束方程系数矩阵,如果是带“”,则将该方程两边同乘以“-1”; |
| `b` | array of real | 一维实数数组,表示二次规划模型带“”约束方程的约束值; |
| `aeq` | array of real | 二维实数数组,表示二次规划模型带“=”约束方程系数矩阵; |
| `beq` | array of real | 一维实数数组,表示二次规划模型带“=”约束方程的约束值; |
返回:array
### 示例
求解模型:最小化 `1/2*x1^2 + x2^2 - x1*x2 - 2x1 - 6x2`,并满足文中所列不等式及非负约束。
范例01:带不等式约束的二次规划
```tsl
h := Array((1, -1), (-1, 2));
f := Array(-2, -6);
a := Array((1, 1), (-1, 2), (2, 1));
b := array(2, 2, 3);
aeq := array();
beq := array();
return quadprog(h, f, a, b, aeq, beq);
// 输出:x1=0.6667,x2=1.3333,f(x)=-8.2222
```
## `quadTrackRoute(h, f, a, b, aeq, beq, x0)`
声明:function
(二次规划建议统一使用prog_Q函数)解决如下二次规划模型问题
| 参数 | 类型 | 说明 |
| ----- | ------------- | -------------------------------------------------------------------------------------------- |
| `h` | array of real | 二维实数数组,表示二次项目标函数系数,为对称矩阵 |
| `f` | | 一维实数数组,表示二次规划模型的目标函数系数; |
| `a` | array of real | 二维实数数组,表示二次规划模型的带“”约束方程系数矩阵,如果是带“”,则将该方程两边同乘以“-1”; |
| `b` | array of real | 一维实数数组,表示二次规划模型带“”约束方程的约束值; |
| `aeq` | array of real | 二维实数数组,表示二次规划模型带“=”约束方程系数矩阵; |
| `beq` | array of real | 一维实数数组,表示二次规划模型带“=”约束方程的约束值; |
| `x0` | array of real | 变量的初始点。 |
返回:array
### 示例
求解模型:最小化 `2x1^2 + 2x2^2 - x1*x2 + 8x1 - 6x2`,约束为 `x1 + x2 <= 2``2x1 - x2 <= 1`
范例01:指定初始点的二次规划
```tsl
h := Array((4, -1), (-1, 4));
f := Array(8, -6);
a := Array((1, 1), (2, -1));
b := array(2, 1);
aeq := array();
beq := array();
x0 := array(0, 0);
return quadTrackRoute(h, f, a, b, aeq, beq, x0);
// 输出:x1=-1.733333, x2=1.066667, 最小值f(x)=-10.13333
```
## `SUMT_Method(x0, call_back)`
声明:function
SUMT法求解有约束最优化问题
<!-- tags: SUMT -->
| 参数 | 类型 | 说明 |
| ----------- | ------ | ---------------------------------- |
| `x0` | array | 一维数字数组类型,各个变量的初始值 |
| `call_back` | string | 字符串类型,计算目标值的回调 |
返回:array
### 示例
```tsl
return SUMT_Method(array(1.0), "Sumt_Method_CallBack");
// 输出:返回包含 1 个元素的最优解数组
```
## `Sumt_Method__Pgm()`
声明:function
Sumt算法测试
返回:array
## `Sumt_Method_CallBack(x, r)`
声明:function
Sumt算法回调
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------- |
| `x` | array | 一维数字数组类型 |
| `r` | float | 实数类型 |
返回:float
## `tsOptimizer`
声明:class
天软规划求解基类,以面向对象方式封装 `Prog_N``Prog_Q``Prog_L`
<!-- tags: 数学优化 约束求解 最优解 -->
来源:depth=3
Source ID21162
Source URL<http://www.tinysoft.com/tsdn/helpdoc/display.tsl?id=21162>
### `Ff`
声明:field
线性目标
可见性:`public`
类型:array
### `Fh`
声明:field
二次型
可见性:`public`
类型:array
### `Fa`
声明:field
线性约束系数矩阵
可见性:`public`
类型:array
### `Fb`
声明:field
线性约束右侧向量
可见性:`public`
类型:array
### `FAeq`
声明:field
线性等式约束系数矩阵
可见性:`public`
类型:array
### `FBeq`
声明:field
线性等式约束右侧向量
可见性:`public`
类型:array
### `FLb`
声明:field
变量下界约束
可见性:`public`
类型:array
### `FUb`
声明:field
变量上界约束
可见性:`public`
类型:array
### `FOzarr`
声明:field
0-1 约束条件
可见性:`public`
类型:array
### `FIntarr`
声明:field
整数约束条件
可见性:`public`
类型:array
### `Fx0`
声明:field
优化初始值
可见性:`public`
类型:array
### `Foptions`
声明:field
算法选项设置
可见性:`public`
类型:array
### `Fresult`
声明:field
优化后的结果
可见性:`public`
类型:array
### `Obj(x)`
声明:function
计算优化目标
<!-- tags: 数学优化 约束求解 -->
可见性:`public`
| 参数 | 类型 | 说明 |
| ---- | ---- | ------------------------------------ |
| `x` | real | 当前优化变量向量,用于计算目标函数值 |
返回:float
### `Con(x)`
声明:function
增加非线性约束
<!-- tags: 定义 非线性约束 优化约束 -->
可见性:`public`
| 参数 | 类型 | 说明 |
| ---- | ----- | -------------------------------------- |
| `x` | array | 当前优化变量向量,用于计算非线性约束值 |
返回:array
### `Prog()`
声明:function
执行优化并返回 `Fresult`
<!-- tags: 调用 数学优化 约束求解 -->
可见性:`public`
返回:array
### `Prog_Debug()`
声明:function
查询优化结果并进行约束校验
<!-- tags: 数学优化 约束求解 约束条件 限制条件 -->
可见性:`public`
返回:array
### `Prog_Debugprint(space)`
声明:function
打印当前优化结果质量
<!-- tags: 输出 数学优化 约束求解 -->
可见性:`public`
| 参数 | 类型 | 说明 |
| ------- | ---- | ------------------------------------------------- |
| `space` | int | 可选。默认 0。优化结果打印时使用的缩进/格式控制值 |
返回:nil
### `Prog_ConsTest_Linear()`
声明:function
检测当前线性约束是否可行
<!-- tags: 检查 线性约束 可行性 -->
可见性:`public`
返回:array
@@ -23,3 +23,201 @@ cm := array((1.0, 0.0), (0.0, 1.0));
return rotatedComponentMatrix(cm);
// 输出:array((1.0,0.0),(0.0,1.0))
```
## `componentMatrix(eigen_value, eigen_vector, max_eigen_value)`
声明:function
载荷矩阵
| 参数 | 类型 | 说明 |
| ----------------- | ----- | ------------------------------------ |
| `eigen_value` | array | 一维数字数组类型,特征根 |
| `eigen_vector` | array | 二维数字数组类型,特征向量 |
| `max_eigen_value` | array | 一维数字数组类型,主因子对应的特征根 |
返回:array
### 示例
```tsl
// 设置样本矩阵
zt := array((0.7592, 1.7593, 21.9279, 48.5626, 55.1679),
(0.0490, 0.4457, 2.2255, 82.2658, 192.4348),
(-2.2313, -1.3096, -59.8883, 3.9922, -80.2419),
(0.1364, 0.539, 4.3910, 55.1438, 46.0612),
(0.7233, 1.9467, 15.6127, 111.3018, 58.3969));
z_t_s := Standarize_II(z_t); // 标准化
mt_Transposition(z_t_s, z); // 转置
r := correlationMatrix(z); // 相关系数矩阵
Eigen_Jacobi(r, eigen_value, eigen_vector); // 特征值&特征向量
return componentMatrix(eigen_value, eigen_vector, max_eigen_value);
```
## `componentScoreMatrix(cm, r)`
声明:function
因子得分系数矩阵
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------------------------ |
| `cm` | array | 二维数字数组类型,载荷矩阵 |
| `r` | array | 二维数字数组类型,相关系数矩阵 |
返回:array
### 示例
```tsl
// 设置样本矩阵
zt := array((0.7592, 1.7593, 21.9279, 48.5626, 55.1679),
(0.0490, 0.4457, 2.2255, 82.2658, 192.4348),
(-2.2313, -1.3096, -59.8883, 3.9922, -80.2419),
(0.1364, 0.539, 4.3910, 55.1438, 46.0612),
(0.7233, 1.9467, 15.6127, 111.3018, 58.3969));
z_t_s := Standarize_II(z_t); // 标准化
mt_Transposition(z_t_s, z); // 转置
r := correlationMatrix(z); // 相关系数矩阵
Eigen_Jacobi(r, eigen_value, eigen_vector); // 特征值&特征向量
cm := componentMatrix(eigen_value, eigen_vector, max_eigen_value); // 载荷矩阵
return componentScoreMatrix(cm, r);
```
## `eastrq(b, c, q)`
声明:function
返回 Eastrq 对应的数据
<!-- tags: 返回 获取 -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------- |
| `b` | array | 二维数字数组类型 |
| `c` | array | 二维数字数组类型 |
| `q` | array | 二维数字数组类型 |
返回:int
### 示例
```tsl
b := array((1.0, 2.0, 3.0), (2.0, 3.0, 4.0), (3.0, 4.0, 5.0));
c := array((1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (0.0, 0.0, 1.0));
q := array((1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (0.0, 0.0, 1.0));
return eastrq(b, c, q);
// 输出:0
```
## `factorScoreMatrix(cs, z)`
声明:function
主因子得分
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------------------------ |
| `cs` | array | 二维数字数组类型,因子得分矩阵 |
| `z` | array | 二维数字数组类型,原始数据矩阵 |
返回:array
### 示例
```tsl
// 设置样本矩阵
zt := array((0.7592, 1.7593, 21.9279, 48.5626, 55.1679),
(0.0490, 0.4457, 2.2255, 82.2658, 192.4348),
(-2.2313, -1.3096, -59.8883, 3.9922, -80.2419),
(0.1364, 0.539, 4.3910, 55.1438, 46.0612),
(0.7233, 1.9467, 15.6127, 111.3018, 58.3969));
z_t_s := Standarize_II(z_t); // 标准化
mt_Transposition(z_t_s, z); // 转置
r := correlationMatrix(z); // 相关系数矩阵
Eigen_Jacobi(r, eigen_value, eigen_vector); // 特征值&特征向量
cm := componentMatrix(eigen_value, eigen_vector, max_eigen_value); // 载荷矩阵
cs := componentScoreMatrix(cm, r); // 因子得分矩阵
return factorScoreMatrix(cs, zt);
```
## `fScoreResult(factor_arr, max_eigen_value)`
声明:function
获取主因子得分
<!-- tags: 获取 查询 -->
| 参数 | 类型 | 说明 |
| ----------------- | ----- | ------------------------------------ |
| `factor_arr` | array | 二维数字数组类型,因子得分矩阵 |
| `max_eigen_value` | array | 二维数字数组类型,主因子对应的特征根 |
返回:array
### 示例
```tsl
// 设置样本矩阵
zt := array((0.7592, 1.7593, 21.9279, 48.5626, 55.1679),
(0.0490, 0.4457, 2.2255, 82.2658, 192.4348),
(-2.2313, -1.3096, -59.8883, 3.9922, -80.2419),
(0.1364, 0.539, 4.3910, 55.1438, 46.0612),
(0.7233, 1.9467, 15.6127, 111.3018, 58.3969));
z_t_s := Standarize_II(z_t); // 标准化
mt_Transposition(z_t_s, z); // 转置
r := correlationMatrix(z); // 相关系数矩阵
Eigen_Jacobi(r, eigen_value, eigen_vector); // 特征值&特征向量
cm := componentMatrix(eigen_value, eigen_vector, max_eigen_value); // 载荷矩阵
cs := componentScoreMatrix(cm, r); // 因子得分系数矩阵
f_arr := factorScoreMatrix(cs, z_t_s); // 样本公共因子得分
return fScoreResult(f_arr, max_eigen_value);
```
## `getEigenValue(a, eigen_value)`
声明:function
通过赋值得到EigenValue
<!-- tags: 获取 查询 -->
| 参数 | 类型 | 说明 |
| ------------- | ----- | ---------------- |
| `a` | array | 二维数字数组类型 |
| `eigen_value` | array | 一维数字数组类型 |
返回:any
### 示例
```tsl
matrix := array((2.0, 1.0), (1.0, 3.0));
eigen_value := array();
getEigenValue(matrix, eigen_value);
return eigen_value;
// 输出:返回包含 2 个元素的特征值数组
```
## `mbbub(p, z)`
声明:function
排序,对数组P按照从小到大的顺序排序,把数组排序的顺序对应的下标值返回到数组Z中
<!-- tags: 排序 sort -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------- |
| `p` | array | 一维数字数组类型 |
| `z` | array | 一维数字数组类型 |
返回:array
### 示例
```tsl
p := array(2.72, 1.24, 1.31, 0.02, 0.88, 2.18);
return mbbub(p, z);
```
@@ -0,0 +1,25 @@
# 数学函数 / 主成分分析
## `princaipalComponentAnalysis(zt)`
声明:function
主成分分析
| 参数 | 类型 | 说明 |
| ---- | ----- | -------------------------- |
| `zt` | array | 二维数字数组类型,样本矩阵 |
返回:array
### 示例
```tsl
// 设置样本矩阵
zt := array((0.7592, 1.7593, 21.9279, 48.5626, 55.1679),
(0.0490, 0.4457, 2.2255, 82.2658, 192.4348),
(-2.2313, -1.3096, -59.8883, 3.9922, -80.2419),
(0.1364, 0.539, 4.3910, 55.1438, 46.0612),
(0.7233, 1.9467, 15.6127, 111.3018, 58.3969));
return princaipalComponentAnalysis(zt);
```
@@ -0,0 +1,16 @@
# 数学函数 / 概率分布
## `Norm_LinearTransform(mu, sigma, a, b)`
声明:function
正态分布线性变换,得到变换后的均值、协方差或方差
| 参数 | 类型 | 说明 |
| ------- | ----- | -------------------------------------- |
| `mu` | array | 实数或二维数组(n\*1),原正态分布均值 |
| `sigma` | array | 实数或二维数组(n\*1),原正态分布方差 |
| `a` | array | 实数或二维数组(n\*1),线性变换常数项 |
| `b` | array | 实数或二维数组(n\*1),线性变换系数项 |
返回:array
@@ -31,3 +31,621 @@ x := array(
(4.0, 3.0));
return regress_ridge(y, x, 0.1, true, 0.05);
```
## `boxcox(y)`
声明:function
在做线性回归的过程中,不可观测的误差可能是和预测变量相关,于是给线性回归的最小二乘法估计系数的结果带来误差,为了解决这样的方差齐性问题,所以考虑对相应应变量做Box-Cox变换,变换之后,可以一定程度上减小不可观测的误差和预测变量的相关性
| 参数 | 类型 | 说明 |
| ---- | ------------- | -------------------------- |
| `y` | array of real | 因变量序列,为一维数组类型 |
返回:array
### 示例
```tsl
data := rand(100);
return boxcox(data);
```
## `NW_Adjustment_Simplification(y, alpha, al)`
声明:function
在单因子有效性的检验中,进行检验的往往是组合收益率序列或者因子收益率序列在 时序上是否显著异于零,这一过程本身并不涉及回归过程,因此无法直接使用上一节中介绍的调整方法。然而,我们知道组合收益或者因子收益在时序上极有可能存在异方差和自相关特性,因此在计算序列标准误时,必须对其进行 Newey-West 调整,从而得到其标准差的一致性估计,进而得到更稳健的 t 值。 关于这个问题Bali et al(2016)指出对于单个因子收益率序列的显著性检验,我们可以将其转换为一个简单的线性回归模型:将 1 作为自变量,将因子收益率作为因变量,进行回归得到残差变量。此时残差项即为因子收益率减去它在时间序列上的均值。把残差项和X=1代入即可得到简化的结果,对Q的估计形式如下:QNW-Simple=1Tt=1Tet2+l=1Lt=l+1Twletet-l 其中,wl=1-l1+L 这里的Q实际上不是矩阵,只是一个数。 将Q代入Cov\[β\*\]中就可以求出收益率方差的估计,之后就可以进行T检验了。σ2=QNW-Simple/T
<!-- tags: QNW -->
| 参数 | 类型 | 说明 |
| ------- | ----- | ------------------------------------------------------------------------------------- |
| `y` | array | 一维数字数组, 因变量 |
| `alpha` | float | 实数,显著性水平,应为0到1之间的值,默认0.05 |
| `al` | any | 整数,自相关最大滞后阶数,可缺省,默认用Newey and West (1994)?提出的方法计算,至少为1 |
返回:array
## `Regress_AdjustedR2(r, t, k)`
声明:function
计算回归方程经调整的R平方,考虑由于加入新的解释变量而产生自由度的损失
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ---- | ---- | ----------------------------------- |
| `r` | any | 回归方程的拟合优度R平方,实数类型; |
| `t` | any | 样本的容量,整数类型; |
| `k` | any | 自变量的个数; |
返回:any
## `Regress_AicAndSbic(u, k, t)`
声明:function
信息准则函数,判断序列的最佳滞后阶数,分别计算AIC和SBIC统计量,并把结果赋值到一个一维数组,第一个是Aic值,第二个Sbic值。当选择最佳滞后阶数时,统计量越小越好。 AIC和SBIC的表达式如下所示: 其中:T为样本容量;k为自变量个数;u为残差
<!-- tags: 判断 检查 AIC SBIC -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------------------------------ |
| `u` | array | 回归方程的残差序列,为一维数组类型; |
| `k` | any | 解释变量的个数; |
| `t` | any | 样本的容量,整数类型; |
返回:array
## `Regress_Binary(y, x, extimation, methods, constant, alpha)`
声明:function
二元离散选择模型。返回结果有方程的系数、负2倍对数似然值和Wald检验(原假设为解释变量对被解释变量影响不显著,检验包含统计量、P值和原假设的值1表示接受原假设,0表示拒绝原假设)
| 参数 | 类型 | 说明 |
| ------------ | ------ | --------------------------------------------------------------- |
| `y` | array | 二元离散被解释变量序列,为一维数组类型 |
| `x` | array | 解释变量矩阵,每一列为一个解释变量,为二维数组类型 |
| `extimation` | string | 模型选择,字符串类型,"logit"或"probi" |
| `methods` | any | 0:单纯形法,1:转轴法,2:模式搜索法, 3:拟牛顿下山法,一般使用3方法 |
| `constant` | bool | object |
| `alpha` | float | 显著性水平,实数类型,取值在0-1之间,缺省时只输出模型的估计 |
返回:array
## `Regress_CMLS(y, x, u, constant)`
声明:function
线性回归方程的最小二乘法参数估计(可选择是否包含常数项),返回回归方程的系数,如果有常数项则排在第一项
| 参数 | 类型 | 说明 |
| ---------- | ----- | -------------------------------------------------- |
| `y` | array | 被解释变量序列,为一维数组类型 |
| `x` | array | 解释变量矩阵,为二维数组类型,每一列为一个解释变量 |
| `u` | array | 残差序列,为一维数组类型,变参 |
| `constant` | bool | 是否包含常数项,为布尔类型,缺省为true |
返回:array
## `Regress_Constraint(y, x, constant, a, b, aeq, beq, alpha, options, lb, ub)`
声明:function
线性约束最小二乘回归
| 参数 | 类型 | 说明 |
| ---------- | ----- | ---------------------------------------------------------- |
| `y` | array | 被解释变量序列,为一维数组类型,不可缺省 |
| `x` | array | 解释变量矩阵,为二维数组类型,每一列为一个自变量,不可缺省 |
| `constant` | bool | object |
| `a` | array | 不等式约束二维数字数组,不可缺省 |
| `b` | array | 不等式约束一维数字数组,不可缺省 |
| `aeq` | array | 等式约束二维数字数组 |
| `beq` | array | 等式约束一维数字数组 |
| `alpha` | float | 显著性水平,实数或整数,在0与1之间,缺省时只做参数的估计 |
| `options` | any | 方法选择: 0 残差平方和最小;1 方差最小 |
| `lb` | array | 下界约束一维数组 |
| `ub` | array | 上界约束一维数组 |
返回:array
## `Regress_DWTest(u)`
声明:function
德宾-沃森检验:检验随机误差项是否存在一阶自相关。结果返回DW统计量 DW统计量:(一般认为值在2附近,则随机误差项不存在自相关)
<!-- tags: DW -->
| 参数 | 类型 | 说明 |
| ---- | ----- | -------------------------- |
| `u` | array | 方程残差,为一维数组类型; |
返回:any
## `Regress_FTest(y, u, k, alpha)`
声明:function
在1-alpha的置信水平下,方程线性关系的置信检验:F检验;返回的结果是一个数组,第一个数为F统计值,二为p值,三为原假设的值(0表示拒绝,1表示接受) F-检验统计量: 其中:RSS是残差平方和,即; ESS是回归平方和,因变量的拟合值与因变量均值的差的平方,即; TSS是总平方和 TSS=RSS+ESS; 原假设:(为方程的系数)表示回归方程不显著
<!-- tags: RSS ESS TSS -->
| 参数 | 类型 | 说明 |
| ------- | ----- | ---------------------------------------------------------------- |
| `y` | array | 被解释变量序列,为一维数组类型; |
| `u` | array | 回归方程的残差序列,为一维数组类型; |
| `k` | any | 自变量的个数; |
| `alpha` | float | 1-alpha为置信水平,一般为5%,也有1%和10%,数值越小,判断越严格; |
返回:array
## `Regress_GRStest(alpha_values, residual_matrix, factor_matrix)`
声明:function
执行 GRS 检验
<!-- tags: GRS -->
| 参数 | 类型 | 说明 |
| ----------------- | ----- | ---------------------- |
| `alpha_values` | array | 截距项或 alpha 向量 |
| `residual_matrix` | array | 回归残差矩阵 |
| `factor_matrix` | array | 因子收益或因子暴露矩阵 |
返回:array
## `Regress_HettestSpearman(y, x, alpha, constant)`
声明:function
基于等级相关系数的异方差检验
| 参数 | 类型 | 说明 |
| ---------- | ----- | ------------------------------- |
| `y` | array | 数组,因变量,一维数字数组 |
| `x` | array | 数组,自变量,二维数字数组 |
| `alpha` | float | 实数,显著性水平,值域为\[0,1\] |
| `constant` | bool | object |
返回:array
## `Regress_JBTest(y, alpha)`
声明:function
在1-alpha的置信水平下,Jarque-Bera检验:检验y是否符合正态分布;返回一个数组,第一个数为Jarque-Bera统计值,二为p值,三为原假设的值(0表示拒绝,1表示接受); Jarque-Bera统计量: 其中:S、K分别表是随即变量的偏度和峰度;T:样本容量; Jarque-Bera统计量服从渐进的分布。 原假设:随机序列为正态分布
| 参数 | 类型 | 说明 |
| ------- | ----- | ---------------------------------------------------------------- |
| `y` | array | 随即序列,接受检验的序列,一维数组类型 |
| `alpha` | float | 1-alpha为置信水平,一般为5%,也有1%和10%,数值越小,判断越严格; |
返回:array
## `Regress_Logistic(y, x, constant, alpha)`
声明:function
logit二元离散选择模型。返回结果有方程的系数、负2倍对数似然值和Wald检验(原假设为解释变量对被解释变量影响不显著,检验包含统计量、P值和原假设的值1表示接受原假设,0表示拒绝原假设)
| 参数 | 类型 | 说明 |
| ---------- | ----- | -------------------------------------------------------------------------------------------------------------------------- |
| `y` | array | 因变量序列,为一维数组类型; |
| `x` | array | 自变量矩阵,为二维数组类型,每一列为一个自变量;自变量x的长度应小于等于因变量y,否则会报错,最好等于,若小于会对结果有影响 |
| `constant` | bool | object |
| `alpha` | float | 显著性水平,一般为5%,也有1%和10%,数值越小,判断越严格;默认为0.05 |
返回:array
## `Regress_MLS(y, x, u)`
声明:function
线性回归方程的最小二乘法参数估计(包含常数项),返回回归方程的系数,常数项排在第一项
| 参数 | 类型 | 说明 |
| ---- | ----- | -------------------------------------------------- |
| `y` | array | 被解释变量序列,为一维数组类型 |
| `x` | array | 解释变量矩阵,为二维数组类型,每一列为一个解释变量 |
| `u` | array | 残差序列,为一维数组类型,变参 |
返回:array
## `Regress_NLM(func, x, y, initial)`
声明:function
多元非线性回归,采用Marquardt方法求多元非线性方程的最小二乘回归系数
| 参数 | 类型 | 说明 |
| --------- | ------ | -------------------------------------------------- |
| `func` | string | 回归方程函数名,为字符串类型 |
| `x` | array | 解释变量矩阵,为二维数组类型,每一列为一个解释变量 |
| `y` | array | 被解释变量序列,为一维数组类型 |
| `initial` | array | 估计参数初始值,一维数字数组 |
返回:array
### 示例
```tsl
x := array(
(273.100, 2577.400),
(339.000, 3496.200),
(396.900, 4283.000),
(429.900, 4838.900),
(441.900, 5160.300),
(438.400, 5425.100),
(432.200, 5854.020),
(434.000, 6280.000),
(437.000, 6859.600),
(433.500, 7702.800),
(438.700, 8472.200),
(455.800, 9421.600),
(464.000, 10493.000),
(471.000, 11759.500),
(493.600, 13785.800)
);
y := array(
2110.810,
2851.340,
3537.570,
3919.470,
4185.640,
4331.600,
4615.900,
4998.000,
5309.000,
6029.880,
6510.940,
7182.100,
7942.880,
8696.550,
9997.470
);
x := x[:, 0:1];
return Regress_NLM(
"Demo_Regress_NLM_CallBack",
x,
y,
array(-0.2, 0.2, 0.8)
);
// 输出:返回非线性回归结果数组
function Demo_Regress_NLM_CallBack(beta, x);
begin
return beta[0] * (x[0] ^ beta[1]) * (x[1] ^ beta[2]);
end;
```
## `Regress_pri(y, x, exps, alpha)`
声明:function
主成分回归,利用解释变量(Z 分数标准化)进行主成分分析降维得到的主成分,来对被解释变量(Z分数标准化)进行回归,进而消除多重共线性
| 参数 | 类型 | 说明 |
| ------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `y` | array | 被解释变量序列,为一维数组类型 |
| `x` | array | 解释变量矩阵,为二维数组类型,每一列为一个解释变量 |
| `exps` | float | 主成分累计贡献率,作为选取主成分数目的依据,当为小数时,代表累计贡献率的阀值,比如0.85,当为整数时,代表取的主成分的个数,比如2表示取前2个主成分。 |
| `alpha` | float | 显著性水平,实数或整数,在01之间 |
返回:array
### 示例
```tsl
y := array(1.0, 2.0, 2.5, 4.0, 5.0);
x := array(
(1.0, 1.1),
(2.0, 1.9),
(3.0, 3.2),
(4.0, 3.8),
(5.0, 5.1)
);
return Regress_pri(y, x, 0.85, 0.05);
// 输出:返回包含 6 个元素的主成分回归结果数组
```
## `Regress_QRlsq(y, x, u, constant)`
声明:function
线性回归方程基于QR分解的最小二乘法参数估计(可选择是否包含常数项),返回回归方程的系数,如果有常数项则排在第一项
<!-- tags: QR -->
| 参数 | 类型 | 说明 |
| ---------- | ----- | ------------------------------------------------ |
| `y` | array | 因变量序列,为一维数组类型; |
| `x` | array | 自变量矩阵,为二维数组类型,每一列为一个自变量; |
| `u` | array | 残差序列,为一维数组类型; |
| `constant` | bool | object |
返回:array
## `Regress_RSquare(y, u, weight, dtype)`
声明:function
计算回归方程的拟合程度R平方,可适用与一元或多元的线性回归
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| -------- | ----- | ------------------------------------ |
| `y` | array | 因变量序列,为一维数组类型; |
| `u` | array | 回归方程的残差序列,为一维数组类型; |
| `weight` | array | 一维数字数组,权重 |
| `dtype` | any | 整型,返回数据类型 |
返回:array
## `Regress_Stepwise(y, x, a_e, a_d)`
声明:function
逐步回归,默认的回归方程包含常数项,程序返回的结果:ret\["x"\]为筛选的变量的下标,ret\["regress"\]为筛选变量与因变量进行回归的结果
<!-- tags: 过滤 筛选 filter -->
| 参数 | 类型 | 说明 |
| ----- | ----- | ------------------------------------------------ |
| `y` | array | 因变量序列,为一维数组类型 |
| `x` | array | 自变量矩阵,为二维数组类型,每一列为一个解释变量 |
| `a_e` | float | 选取变量的显著性水平,默认为0.05,为实数类型 |
| `a_d` | float | 剔除变量的显著性水平,默认为0.1,为实数类型 |
返回:array
## `Regress_TTest(x, a, u, k, alpha, constant)`
声明:function
在1-alpha的置信水平下,n元线性回归变量系数的置信检验:T检验;返回的结果是一个数组,第一个数为T统计值,二为p值,三为原假设的值(0表示拒绝,1表示接受) n元线性回归 T-检验统计量: 其中:为方程系数的估计,T为样本容量,k为自变量个数,X为常量加自变量的矩阵,其中; 原假设:(为方程的系数)表示回归方程不显著
| 参数 | 类型 | 说明 |
| ---------- | ----- | ---------------------------------------------------------------- |
| `x` | array | 变量矩阵,为二维数组类型,每一列为一个解释变量; |
| `a` | array | 回归系数,为一维数组类型; |
| `u` | array | 方程残差,为一维数组类型; |
| `k` | any | 自变量个数,为整数类型; |
| `alpha` | float | 1-alpha为置信水平,一般为5%,也有1%和10%,数值越小,判断越严格; |
| `constant` | bool | object |
返回:array
## `Regress_TTest_NW(x, a, u, alpha, constant, al, v_ols)`
声明:function
用NW调整对回归系数进行T检验。此调整用于当残差或者因变量(两者等价)存在异方差性并且存在自相关性时,利用OLS回归后对回归系数的协方差矩阵进行NW调整计算,得到每个系数NW调整后的标准误,再进行T检验。公式如下QNW=1Tt=1Tet2XtXt'+l=1Lt=l+1Twletet-lXtXt-l'+Xt-lXt' 其中,wl=1-l1+L 其中e为残差序列,Xi为X第i行的转置,L为自相关最大滞后阶数,Newey and West (1994)?提出可以用下面这个公式自动计算L=4\*(T100)2/9 之后代入下式计算出回归系数的协方差矩阵,它的对角元即为每个系数的方差Covβ\*=X'X-1X'σ2ΩXX'X-1=TX'X-1QNWX'X-1
<!-- tags: NW OLS QNW T100 XX TX -->
| 参数 | 类型 | 说明 |
| ---------- | ----- | ---------------------------------------------------------------------------------------------------------- |
| `x` | array | 二维数字数组, 自变量,不需要包含全1列 |
| `a` | array | 一维数字数组,回归系数, 有常数项回归时,a 为 常数项系数 union 自变量系数,;无常数项回归时,a 为 自变量系数 |
| `u` | array | 一维数字数组,残差序列,一维数字数组 |
| `alpha` | float | 实数,显著性水平,应为0到1之间的值,默认0.05 |
| `constant` | bool | object |
| `al` | any | 整数,自相关最大滞后阶数,可缺省,默认用Newey and West (1994)?提出的方法计算,至少为1 |
| `v_ols` | array | 二维数字数组,回归系数协方差矩阵,中间计算变量,无返回,但后续可以直接调用 |
返回:array
## `Regress_TTest_RWLS(x, a, u, k, alpha, constant, weight, restrictiveness)`
声明:function
T检验,在alpha的置信水平下,n元线性回归变量系数的显著性检验 原假设:回归方程系数不显著。带约束的加权最小二乘 RWLS 模型,对回归系数进行显著性检验, 适用于以下
<!-- tags: RWLS -->
| 参数 | 类型 | 说明 |
| ----------------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `x` | array | 一维数字数组,自变量矩阵,注意:含常数项的回归不需要给全1列 |
| `a` | array | 一维数字数组,方程系数;有常数项时,a 为 常数项系数 union 自变量系数;无常数项时,a 为 自变量系数 |
| `u` | array | 一维数字数组,残差序列 |
| `k` | any | 整型,自变量的个数;k = length(a)-constant;有常数项回归时,k := mcols(x);;无常数项回归,k := mcols(x)-1; |
| `alpha` | float | 实数,显著性水平 |
| `constant` | bool | Bool,是否为含常数项回归 |
| `weight` | array | 数组,加权回归的权重,默认等权重 |
| `restrictiveness` | array | 数组,线性约束,只需要给对应于回归系数个数长度的一维数组,默认无约束;例如:有5个系数,分别为x0,x1,x2,x3,x4;约束为: x1+x2+3x4=3;则所给的参数为:array(0,1,1,0,3) |
返回:array
## `Regress_TTest_White(x, a, u, alpha, constant, v_ols)`
声明:function
用White调整对回归系数进行T检验。此调整用于当残差或者因变量(两者等价)存在异方差性但不存在自相关性时,利用OLS回归后对回归系数的协方差矩阵进行White调整计算,得到每个系数White调整后的标准误,再进行T检验。公式如下QWhite=1Ti=1Tei2XiXi' 其中e为残差序列,Xi为X第i行的转置 之后代入下式计算出回归系数的协方差矩阵,它的对角元即为每个系数的方差Covβ\*=X'X-1X'σ2ΩXX'X-1=TX'X-1QWhiteX'X-1
<!-- tags: OLS XX TX -->
| 参数 | 类型 | 说明 |
| ---------- | ----- | ---------------------------------------------------------------------------------------------------------- |
| `x` | array | 二维数字数组, 自变量,不需要包含全1列 |
| `a` | array | 一维数字数组,回归系数, 有常数项回归时,a 为 常数项系数 union 自变量系数,;无常数项回归时,a 为 自变量系数 |
| `u` | array | 一维数字数组,残差序列,一维数字数组 |
| `alpha` | float | 实数,显著性水平,应为0到1之间的值,默认0.05 |
| `constant` | bool | object |
| `v_ols` | array | 二维数字数组,回归系数协方差矩阵,中间计算变量,无返回,但后续可以直接调用 |
返回:array
## `Regress_VIF(x)`
声明:function
x的多重共线性分析,输出方差扩大因子VIF指标和条件数,一般VIF大于10,表明存在严重的多重共线性;5<VIF<10,表明存在多重共线性;如果VIF小于5的话,表明这种回归模型的多重共线性可以接受。用条件数判断多重共线性的准则 0<k<10时,设计矩阵X没有多重共线性; 10≤k<100时,认为X存在较强的多重共线性; 当k≥100时,则认为存在严重的多重共线性
<!-- tags: VIF -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------------- |
| `x` | array | 数据,每一列是一个指标 |
返回:array
## `Regress_VIFR2(x, w, constant)`
声明:function
vif分析增强
| 参数 | 类型 | 说明 |
| ---------- | ---- | ------------- |
| `x` | any | 表达式,自变量 |
| `w` | any | 表达式,权重 |
| `constant` | bool | object |
返回:array
## `Regress_White(y, x, crr, alpha)`
声明:function
包含无交叉项和交叉项两种,用于检验回归方程的异方差性,原假设为不存在异方差(Hypothesis的值0表示拒绝,1表示接受)
| 参数 | 类型 | 说明 |
| ------- | ----- | ---------------------------------------------------------------- |
| `y` | array | 被解释变量,为一维数组类型 |
| `x` | array | 解释变量,为二维数组类型 |
| `crr` | any | 交叉项,0为无交叉项,1为有交叉项 |
| `alpha` | float | 1-alpha为置信水平,一般为5%,也有1%和10%,数值越小,判断越严格; |
返回:array
## `Regress_WLS(y_values, x_values, weights, residuals)`
声明:function
执行加权最小二乘回归并输出残差
| 参数 | 类型 | 说明 |
| ----------- | ----- | ------------ |
| `y_values` | array | 因变量样本 |
| `x_values` | array | 自变量样本 |
| `weights` | array | 权重序列 |
| `residuals` | any | 接收残差序列 |
返回:array
## `regression(y, x, alpha, constant, options)`
声明:function
线性回归方程的最小二乘法参数估计及检验(可选择是否包含常数项),返回结果有回归系数、R平方、调整R平方、残差序列、残差检验、F检验、T检验、DW统计量和信息准则
<!-- tags: DW -->
| 参数 | 类型 | 说明 |
| ---------- | ---------------- | ---- |
| `y` | array,tablearray | |
| `x` | array,tablearray | |
| `alpha` | real | |
| `constant` | bool | |
| `options` | array,tablearray | |
返回:array,tablearray
### 示例
```tsl
y := array(0.001, 0.564, 0.193, 0.809, 0.585, 0.48, 0.35, 0.896, 0.823, 0.747);
x := array(
(0.174, 0.859),
(0.711, 0.514),
(0.304, 0.015),
(0.091, 0.364),
(0.147, 0.166),
(0.989, 0.446),
(0.119, 0.005),
(0.009, 0.378),
(0.532, 0.571),
(0.602, 0.607));
// u作为变参返回
return regression(y, x, 0.05, 1);
```
## `Regression_OLS_NW(y, x, constant, alpha, al)`
声明:function
NW调整的OLS回归,此调整用于当残差或者因变量(两者等价)存在异方差性并且自相关性时,利用OLS回归后对回归系数的协方差矩阵进行NW调整计算,得到每个系数White调整后的标准误,再进行T检验。T检验部分相关公式详见Regress_TTest_NW,回归系数的OLS解如下β\*=(X'X)-1X'y 其余部分定义与普通最小二乘OLS一致
<!-- tags: NW OLS -->
| 参数 | 类型 | 说明 |
| ---------- | ----- | ------------------------------------------------------------------------------------- |
| `y` | array | 一维数字数组, 因变量 |
| `x` | array | 二维数字数组, 自变量,不需要包含全1列 |
| `constant` | bool | object |
| `alpha` | float | 实数,显著性水平,应为0到1之间的值,默认0.05 |
| `al` | any | 整数,自相关最大滞后阶数,可缺省,默认用Newey and West (1994)?提出的方法计算,至少为1 |
返回:array
## `Regression_OLS_White(y, x, constant, alpha)`
声明:function
White调整的OLS回归,此调整用于当残差或者因变量(两者等价)存在异方差性但不存在自相关性时,利用OLS回归后对回归系数的协方差矩阵进行White调整计算,得到每个系数White调整后的标准误,再进行T检验。T检验部分相关公式详见Regress_TTest_White,回归系数的OLS解如下β\*=(X'X)-1X'y 其余部分定义与普通最小二乘OLS一致
<!-- tags: OLS -->
| 参数 | 类型 | 说明 |
| ---------- | ----- | -------------------------------------------- |
| `y` | array | 一维数字数组, 因变量 |
| `x` | array | 二维数字数组, 自变量,不需要包含全1列 |
| `constant` | bool | object |
| `alpha` | float | 实数,显著性水平,应为0到1之间的值,默认0.05 |
返回:array
## `Regression_WLS(y, x, alpha, constant, wtype, m1, m2, steps, wweight)`
声明:function
加权最小二乘法回归, WType为0时,必须给出m1 权重系数下限,m2 权重系数上限,steps 步长,用于计算最优权重,WType为1时,必须给出wweight权重向量
| 参数 | 类型 | 说明 |
| ---------- | ----- | --------------------------------------------------------------------- |
| `y` | array | 因变量,一维数字数组 |
| `x` | array | 自变量,二维数字数组 |
| `alpha` | float | 显著性水平,实数 |
| `constant` | bool | object |
| `wtype` | bool | object |
| `m1` | float | 权重系数下限,实数 |
| `m2` | float | 权重系数上限,实数 |
| `steps` | float | 步长,实数 |
| `wweight` | array | 权重向量,一维数字数组,当WType设置为1时,需要此参数的输入;返回结果: |
返回:array
## `Robustfit_M(y, x, alpha, constant, wfun, tune, options)`
声明:function
基于M估计的稳健回归及其检验
| 参数 | 类型 | 说明 |
| ---------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `y` | array | 一维数字数组,因变量 |
| `x` | array | 二维数字数组,自变量 |
| `alpha` | float | 实数,显著性水平 |
| `constant` | bool | object |
| `wfun` | string | 字符串,权重函数 |
| `tune` | float | 实数,调节常数 |
| `options` | array | 可选。为数组类型,格式为array( 'maxiter':最大迭代次数, 'tol':标准误差, 'ifregtest':是否返回回归检验),默认值为array('maxiter':50, 'tol':1e-6, 'ifregtest':True)。其中'maxiter'、'tol'与迭代优化相关,分别表示最大迭代次数与相邻两次迭代的标准误差;'ifregtest'是布尔类型,控制输出结果是否返回回归检验,若为真,其回归检验指标使用加权最小二乘的回归检验,可参考Regression_WLS。 |
返回:array
@@ -0,0 +1,210 @@
# 数学函数 / 回归
## `LeastSquares_CurveFitting(f, y)`
声明:function
最小二乘法进行回归
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------------------- |
| `f` | array | 二维数字数组类型,系数矩阵 |
| `y` | array | 一维数字数组类型,观察数据值 |
返回:array
## `LnRegression_CallBack(x)`
声明:function
Ln(x)回归回调函数
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------- |
| `x` | array | 二维数字数组类型 |
返回:array
## `multipleRegression(x, y, call_back)`
声明:function
多元回归
| 参数 | 类型 | 说明 |
| ----------- | ------ | ------------------------------ |
| `x` | array | 二维数字数组类型,观察数据点 |
| `y` | array | 一维数字数组类型,观察数据值 |
| `call_back` | string | 字符串类型,计算系数矩阵的回调 |
返回:array
### 示例
```tsl
x := array((0.00, 0.00), (0.00, 1.00), (1.00, 0.00), (1.00, 1.00));
y := array(1.00, 2.00, 2.00, 3.00);
call_back := 'MultipleRegression_CallBack';
multipleRegression(x, y, call_back);
// 输出:
```
## `MultipleRegression_CallBack(x)`
声明:function
多元线性回归的回调函数
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------- |
| `x` | array | 二维数字数组类型 |
返回:array
## `MultipleRegression_Pgm(x, y)`
声明:function
多元线性回归测试
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------- |
| `x` | array | 二维数字数组类型 |
| `y` | array | 一维数字数组类型 |
返回:array
## `MultipleUnLinearRegression_Pgm(x, y, call_back)`
声明:function
多元非线性回归测试
| 参数 | 类型 | 说明 |
| ----------- | ------ | ---------------------------- |
| `x` | array | 二维数字数组类型,观察数据点 |
| `y` | array | 一维数字数组类型,观察数据值 |
| `call_back` | string | 字符串类型 |
返回:array
## `MultiUnLineralRegression_CallBack(x)`
声明:function
多元非线性回归的回调函数
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------- |
| `x` | array | 二维数字数组类型 |
返回:array
## `polynomialRegression(x, y, m)`
声明:function
多项式回归
| 参数 | 类型 | 说明 |
| ---- | ------- | --------------------------- |
| `x` | array | 一维数字数组类型,观察数据点 |
| `y` | array | 一维数字数组类型,观察数据值 |
| `m` | integer | 整数类型,拟合最大阶数 |
返回:array
### 示例
```tsl
x := array(0.00, 1.00, 2.00);
y := array(1.00, 2.00, 3);
return polynomialRegression(x, y, 1);
```
## `PolynomialRegression_Pgm(x, y, m)`
声明:function
多项式回归测试
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------------- |
| `x` | array | 一维数字数组类型 |
| `y` | array | 一维数字数组类型 |
| `m` | any | 整数类型,拟合最大阶数 |
返回:array
## `SingleLinearRegression_CallBack(x)`
声明:function
单元线性回归的回调函数
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------- |
| `x` | array | 二维数字数组类型 |
返回:array
## `SingleLineralRegression_Pgm(x, y)`
声明:function
单元线性回归测试
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------- |
| `x` | array | 一维数字数组类型 |
| `y` | array | 一维数字数组类型 |
返回:array
## `singleRegression(x, y, call_back)`
声明:function
单元回归
| 参数 | 类型 | 说明 |
| ----------- | ------ | ---------------------------- |
| `x` | array | 一维数字数组类型,观察数据点 |
| `y` | array | 一维数字数组类型,观察数据值 |
| `call_back` | string | 字符串,计算系数矩阵的回调 |
返回:array
### 示例
```tsl
x := array(0.00, 1.00, 2.00);
y := array(1.00, 2.00, 3);
call_back := 'SingleLinearRegression_CallBack';
return singleRegression(x, y, call_back);
```
## `SingleUnLineralRegression_CallBack(x)`
声明:function
单元非线性回归的回调函数
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------- |
| `x` | array | 一维数字数组类型 |
返回:array
## `SingleUnLineralRegression_Pgm(x, y)`
声明:function
单元非线性回归测试
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------- |
| `x` | array | 一维数字数组类型 |
| `y` | array | 一维数字数组类型 |
返回:array
@@ -0,0 +1,16 @@
# 数学函数 / 信号处理
## `filter_hp(y, l)`
声明:function
HP滤波法
<!-- tags: 过滤 筛选 filter HP -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ---------------------- |
| `y` | array | 一维数字数组,时间序列 |
| `l` | any | 整数,平滑参数 |
返回:array
@@ -52,3 +52,426 @@ return estimate_tp(
array(0.478, 0.328), array(1000, 750), 0.05, "both");
// 输出:array("Lower":0.104311,"upper":0.195689)
```
## `Anova_Bartlett(y, alpha)`
声明:function
在1-alpha的置信水平下,Bartlett方法检验方差齐性;B-Stat为统计值,P-Value为p值,df为自由度,Hypothesis为是否接受原假设 模型表达: Bartlett检验思想来源于几何平均数小于或等于算术平均数 原假设:是水平个数 ,其中 修正的Bartlett检验
| 参数 | 类型 | 说明 |
| ------- | ----- | -------------------------------------------- |
| `y` | array | 数据矩阵,为二维数组类型,每一行表示一个水平 |
| `alpha` | float | 显著性水平,实数或整数,在01之间 |
返回:array
## `Anova_Levene(y, alpha)`
声明:function
在1-Alpha的置信水平下,Levene方法检验方差齐性,和Bartlett检验不同的是,Levene检验不要求总体具有正态性。返回一个数组,F-Stat为统计值,P-Value为p值,df1df2为自由度,Hypothesis为是否接受原假设 模型表达: 原假设:是水平个数 ,其中是观察数目,是水平数目
| 参数 | 类型 | 说明 |
| ------- | ----- | -------------------------------------------- |
| `y` | array | 数据矩阵,为二维数组类型,每一行表示一个水平 |
| `alpha` | float | 显著性水平,实数或整数,在01之间 |
返回:array
## `Anova_Single(y, alpha)`
声明:function
在1-alpha置信水平下,在假设服从正态分布,且方差齐性,样本之间独立的基础上,判断各水平的均值是否显著相等 模型表达: , 其中:效应平方和:,误差平方和: 总离差
| 参数 | 类型 | 说明 |
| ------- | ----- | -------------------------------------------- |
| `y` | array | 数据矩阵,为二维数组类型,每一行表示一个水平 |
| `alpha` | float | 显著性水平,实数或整数,在01之间 |
返回:array
## `Anova_Twice(y, alpha)`
声明:function
在1-alpha的置信水平下,进行双因子方差分析,假设每一种情况都服从一个正态分布,且方差相等,数据独立,判断各水平的均值是否显著相等 模型表达: 有A,B两个因素,因素A有r个水平,B有s个水平,对于A,B每一个组合(Ai,Bj)都进行t次试验,得到结果: 因素B 因素A B1 B2 … Bs A1 X111, X112,…,X11t X121, X122,…,X12t … X1s1, X1s2,…,X1st A2 X211, X212,…, X21t X221, X222,…, X22t … X2s1, X2s2,…, X2st … … … … Ar Xr11, Xr12,…, Xr1t Xr21, Xr22,…, Xr2t … Xrs1, Xrs2,…, Xrst 设:且相互独立 ,其中,是水平Ai的效应,是水平Bj的效应,称为水平Ai和Bj的交互效应。, 原假设:,, 现构造了3个F统计量来分别检验假设,原理略
<!-- tags: B1 B2 A1 X111 X112 X121 X122 A2 X211 X212 X221 X222 -->
| 参数 | 类型 | 说明 |
| ------- | ----- | ----------------------------------------------------------------------------------------------- |
| `y` | array | 数据矩阵,为二维数组类型,每rep行,每一列表示一个交叉项 |
| `alpha` | float | 显著性水平,实数或整数,在01之间;Rep:每一个交叉项,做rep次试验,rep=1时,没有交叉效应为0的假设 |
返回:array
## `Estimate_SND(x, alpha, tail)`
声明:function
在1-alpha置信水平下,求单个正态总体方差的置信区间(或下置信区间,上置信区间)
| 参数 | 类型 | 说明 |
| ------- | ------ | ------------------------------------------------------- |
| `x` | array | 样本序列,一维数组 |
| `alpha` | float | 显著性水平,实数,在0,1之间 |
| `tail` | string | 求取置信区间类型,字符串,取both,left,right,缺省取both |
返回:array
## `Estimate_SNU(x, d, alpha, tail)`
声明:function
在1-alpha置信水平下,分为标准差未知和已知两种情况求单个正态总体均值的置信区间(或下置信区间,上置信区间)
| 参数 | 类型 | 说明 |
| ------- | ------ | ------------------------------------------------------- |
| `x` | array | 样本序列,一维数组 |
| `d` | float | 正态总体的标准差,若未知,则输入nil,实数 |
| `alpha` | float | 显著性水平,实数,在0,1之间 |
| `tail` | string | 求取置信区间类型,字符串,取both,left,right,缺省取both |
返回:array
## `Estimate_TND(x, alpha, tail)`
声明:function
在1-alpha置信水平下,求两个正态总体方差之比的置信区间(或下置信区间,上置信区间)
| 参数 | 类型 | 说明 |
| ------- | ------ | ------------------------------------------------------- |
| `x` | array | 样本序列,含两行的二维数字数组,每行为一个样本 |
| `alpha` | float | 显著性水平,实数,在0,1之间 |
| `tail` | string | 求取置信区间类型,字符串,取both,left,right,缺省取both |
返回:array
## `Estimate_TNU(x, d, alpha, tail, equal)`
声明:function
在1-alpha置信水平下,分为标准差未知和已知两种情况求两个正态总体均值差的置信区间(或下置信区间,上置信区间)
| 参数 | 类型 | 说明 |
| ------- | ------ | ------------------------------------------------------------------ |
| `x` | array | 样本序列,含两行的二维数字数组,每行为一个样本 |
| `d` | array | 正态总体的标准差数组,若未知,则输入array(nil,nil),为一维数组类型 |
| `alpha` | float | 显著性水平,实数,在0,1之间 |
| `tail` | string | 求取置信区间类型,字符串,取both,left,right,缺省取both |
| `equal` | bool | 当标准差未知时,方差是否相等,布尔型 |
返回:array
## `Hypoth_IndepTest(x, alpha)`
声明:function
列联表检验法检验两个随机变量的独立性检验,返回的结果是一个数组,第一个数为统计值,二为p值,三为原假设的值(0表示拒绝,1表示接受) 模型表达: 原假设:H0:X 与Y 相互独立 检验统计量: 其中
<!-- tags: H0 -->
| 参数 | 类型 | 说明 |
| ------- | ----- | -------------------------------- |
| `x` | array | 样本矩阵,为二维数组类型 |
| `alpha` | float | 显著性水平,实数或整数,在01之间 |
返回:array
## `Hypoth_KruskalWallis(x, alpha)`
声明:function
两个或多个随机变量的独立性检验。本模型原假设为各随机变量相互独立
| 参数 | 类型 | 说明 |
| ------- | ----- | ---------------------------------------- |
| `x` | array | 样本矩阵,为二维数组类型,每行为一个样本 |
| `alpha` | float | 显著性水平,实数或整数,在01之间 |
返回:array
## `Hypoth_Kstest(data, tail, alpha, cdf)`
声明:function
在alpha的显著性水平下进行ks检验,检验序列是否服从cdf这种分布(缺省为标准正态分布),Hypothesis为测试结果,若Hypothesis=1,则认为服从;Hypothesis=0,可以认为不服从该分布
| 参数 | 类型 | 说明 |
| ------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `data` | array | 样本数据,一维数字数组 |
| `tail` | string | 检验类型,字符串类型,必须包含在array("both","left","right")中 |
| `alpha` | float | 显著性水平,实数或整数,在01之间 |
| `cdf` | array | 分布的累计概率分布,二维数字数组,第一列为随机变量,第二列为其对应的分布函数值,缺省为标准正态分布;返回结果:;ret\["statistical"\]:KS统计量;ret\["criticalValue"\]:KS检验的临界值;ret\["P-Value"\]:KS检验的P值;ret\["Hypothesis"\]:是否服从设定的分布 |
返回:array
## `Hypoth_lillietest(data, alpha, distr)`
声明:function
在alpha的显著性水平下进行lillietest检验,检验序列是否服从正态分布或对数分布(分布参数估计出来),Hypothesis为测试结果,若Hypothesis=1,则认为服从;Hypothesis=0,可以认为不服从该分布
| 参数 | 类型 | 说明 |
| ------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `data` | array | 样本数据,一维数字数组 |
| `alpha` | float | 显著性水平,实数或整数,在01之间 |
| `distr` | string | 分布函数类型,字符串数据,有"norm"、"exp";返回结果:ret\[""kstat"\]:统计量;ret\["cv"\]:检验统计量的临界值;ret\["P-Value"\]:检验的P值;ret\["Hypothesis"\]:是否服从设定的分布 |
返回:array
## `Hypoth_LSUTest(mx, s, n, u, tail, alpha)`
声明:function
单个或两个总体大样本的均值检验,即大样本U检验,返回的结果是一个数组,第一个数为统计值,二为p值,三为原假设的值(0表示拒绝,1表示接受) 模型表达 单个总体大样本的均值原假设:tail取值both:;left:;right 两个总体大样本的均值假设:tail取值both:;left;right: 检验统计量: 或 其中:x为样本x的均值,y为样本y的均值,为正态总体x方差,为正态总本y方差,m,n分别为样本x和y的容量s
| 参数 | 类型 | 说明 |
| ------- | ------ | ---------------------------------------------------------- |
| `mx` | array | 样本均值数组,第一行为样本1,第二行为样本2,为一维数组类型 |
| `s` | any | 样本方差数组,第一行为样本1,第二行为样本2,为一维数组类型 |
| `n` | array | 样本容量,第一行为样本1,第二行为样本2,为一维数组类型 |
| `u` | float | 单个总体时,为假设检验均值,两个总体时,为均值差 |
| `tail` | string | 假设检验类型 |
| `alpha` | float | 显著性水平,实数或整数,在01之间 |
返回:array
## `Hypoth_McNemarTest(x, alpha)`
声明:function
非参数检验-McNemar检验。 对配对样本进行McNemar检验 McNemar检验以研究对象自身为对照,检验其两组样本变化是否显著 要求待检验的两组样本的观察值是二分类数据 检验统计量服从卡方分布
| 参数 | 类型 | 说明 |
| ------- | ----- | ---------------------------------- |
| `x` | array | 样本统计列联表,为二维数字数组类型 |
| `alpha` | float | 显著性水平,在0-1之间,为实数类型 |
返回:array
## `Hypoth_PNUTest(samples, mean_diff, std_dev, tail, alpha)`
声明:function
执行配对样本均值差 U 检验
| 参数 | 类型 | 说明 |
| ----------- | ------ | -------------------------------------------- |
| `samples` | array | 两组配对样本数据 |
| `mean_diff` | float | 原假设均值差 |
| `std_dev` | float | 差值标准差;未知时传 `nil` |
| `tail` | string | 检验方向;常用 `"both"``"left"``"right"` |
| `alpha` | float | 显著性水平 |
返回:array
## `Hypoth_PSignTest(x, pi, q0, tail, alpha)`
声明:function
非参数检验-配对样本符号检验,配对样本的符号检验 要求样本矩阵中两个样本是配对出现的 可以按照实际需求选择双侧或单侧检验
| 参数 | 类型 | 说明 |
| ------- | ------ | --------------------------------------- |
| `x` | array | 一维数字数组,样本矩阵 |
| `pi` | float | 实数,分位点 |
| `q0` | float | 实数,检验值 |
| `tail` | string | 字符串,双侧检验 or 左侧检验 or 右侧检验 |
| `alpha` | float | 实数,显著性水平 |
返回:array
### 示例
```tsl
samples := array(
(5, 4, 7, 3, 5, 8, 5, 6),
(6, 6, 7, 4, 3, 9, 7, 6)
);
return Hypoth_PSignTest(samples, 0.5, 0.0, "both", 0.05);
// 输出:返回包含统计量、p 值和检验结论的数组
```
## `Hypoth_PWilcoxonTest(x, m0, tail, alpha)`
声明:function
非参数检验-配对样本Wilcoxon符号秩检验,配对样本的Wilcoxon符号秩检验 要求样本矩阵中两个样本是配对出现的 可以按照实际需求选择双侧或单侧检验
| 参数 | 类型 | 说明 |
| ------- | ------ | --------------------------------------- |
| `x` | array | 一维数字数组,样本矩阵 |
| `m0` | float | 实数,检验值 |
| `tail` | string | 字符串,双侧检验 or 左侧检验 or 右侧检验 |
| `alpha` | float | 实数,显著性水平 |
返回:array
### 示例
```tsl
samples := array(
(5, 4, 7, 3, 5, 8, 5, 6),
(6, 6, 7, 4, 3, 9, 7, 6)
);
return Hypoth_PWilcoxonTest(samples, 0.0, "both", 0.05);
// 输出:返回包含统计量、p 值和检验结论的数组
```
## `Hypoth_SignTest(x, pi, q0, tail, alpha)`
声明:function
非参数检验-符号检验。对单样本进行符号检验 可以按照实际需求选择双侧或单侧检验 其中,检验变量服从二项分布
| 参数 | 类型 | 说明 |
| ------- | ------ | --------------------------------------------------------------------------------------- |
| `x` | array | 样本序列,为一维数字数组类型 |
| `pi` | float | 分位点,为实数类型 |
| `q0` | float | 检验值,即检验分位点的值,为实数类型 |
| `tail` | string | 假设检验的三种类型,both(双侧检验),left(左侧检验),right(右侧检验),为字符串类型 |
| `alpha` | float | 显著性水平,在0-1之间,为实数类型 |
返回:array
## `Hypoth_SNDTest(x, d2, tail, alpha)`
声明:function
单个正态总体方差的卡方检验,返回的结果是一个数组,第一个数为统计值,二为p值,三为原假设的值(0表示拒绝,1表示接受) 模型表达: 原假设:tail取值both:;left:;right: 检验统计量: 其中:为假设检验的方差,n为样本容量,s为样本标准差
| 参数 | 类型 | 说明 |
| ------- | ------ | -------------------------------- |
| `x` | array | 样本序列,为一维数组类型 |
| `d2` | float | 假设检验的方差,为实数类型 |
| `tail` | string | 假设检验类型 |
| `alpha` | float | 显著性水平,实数或整数,在01之间 |
返回:array
## `Hypoth_SNUTest(x, u, d, tail, alpha)`
声明:function
单个正态总体的均值检验,分为标准差未知和已知两个情况,返回结果是一个数组,第一个数为统计值,二为p值,三为原假设的值(0表示拒绝,1表示接受) 模型表达: 原假设:tail取值both:;left:;right: 检验统计量:分为两种情况 1)标准差已知时,即d有取值,为U检验: 2)标准差未知时,即d取nil,为T检验: 其中:x为样本均值,为检验均值,为正态总体标准差,n为样本容量,s为样本标准差
| 参数 | 类型 | 说明 |
| ------- | ------ | --------------------------------------------------- |
| `x` | array | 样本序列,为一维数组类型 |
| `u` | float | 假设检验均值,为实数类型 |
| `d` | float | 正态总体的标准差,为实数类型,若未知,则输入nil |
| `tail` | string | 假设检验的三种类型,字符串,取值为both、left和right |
| `alpha` | float | 显著性水平,实数或整数,在01之间 |
返回:array
## `Hypoth_TailRes(sta, v, tail, alpha)`
声明:function
根据tail的取值,进行单侧和双侧检验,原理是根据检验统计量计算P值,若alpha>p,则拒绝原假设,若alpha<p,则接受原假设;最后返回假设检验的结果。原假设分别是
| 参数 | 类型 | 说明 |
| ------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `sta` | float | 统计量的值,为实数类型 |
| `v` | float | 整体分布的p分位数,1-v为检验的p值,为实数类型 |
| `tail` | string | 取值为both、left和right |
| `alpha` | float | 显著性水平,实数或整数,在0-1之间;返回结果:ret\["Statistic"\]:假设检验统计量;ret\["P-Value "\]:假设检验的P值;ret\["Hypothesis "\]:是否接受原假设 |
返回:array
## `Hypoth_TNDTest(x, tail, alpha)`
声明:function
两个正态总体方差比的F检验,返回的结果是一个数组,第一个数为统计值,二为p值,三为原假设的值(0表示拒绝,1表示接受) 模型表达: 原假设:tail取值both:;left:;right: 检验统计量: 其中:Sx为x的样本标准差,Sy为y的样本标准差
| 参数 | 类型 | 说明 |
| ------- | ------ | ---------------------------------------------------------- |
| `x` | array | 样本序列矩阵,第一行为样本1,第二行为样本2,为二维数组类型 |
| `tail` | string | 假设检验类型 |
| `alpha` | float | 显著性水平,实数或整数,在01之间 |
返回:array
## `Hypoth_TNUTest(x, uu, d, tail, alpha, isequal)`
声明:function
两个正态总体均值差的检验,分为标准差未知和已知两个情况,返回的结果是一个数组,第一个数为统计值,二为p值,三为是否接受原假设 模型表达: 原假设:tail取值both:;left:;right: 检验统计量: 标准差已知时,即d数组有取值,为u检验: 标准差未知时,即d取(nil,nil),为t检验:, 其中:为样本x的均值,为样本y的均值,,为正态总体x,y的方差,分别为样本x和y的容量,为联合样本标准差
| 参数 | 类型 | 说明 |
| --------- | ------ | ------------------------------------------------------------- |
| `x` | array | 样本序列矩阵,为二维数组类型,第一行为样本1,第二行为样本2 |
| `uu` | float | 假设检验均值差,为实数类型 |
| `d` | float | 正态总体的标准差数组,为一维数组类型,若未知,则输入(nil,nil) |
| `tail` | string | 假设检验的三种类型,字符串,取值为both、left和right |
| `alpha` | float | 显著性水平,实数或整数,在01之间 |
| `isequal` | bool | object |
返回:array
## `Hypoth_WilcoxonTest(x, m0, tail, alpha)`
声明:function
非参数检验-Wilcoxon符号秩检验。单样本Wilcoxon符号秩检验 原理:把观测值和零假设的中心位置之差的绝对值的秩按照不同的符号相加作为其检验统计量。 此检验假定样本来自于连续对称总体。 计算步骤: 1、计算样本点到检验值的距离; 2、对上述距离的绝对值进行排序并计算秩,对相同的样本点则取平均秩; 3、分别计算大于检验值与小于检验值样本的秩和; 4、对得到的统计量计算p值
<!-- tags: 排序 sort -->
| 参数 | 类型 | 说明 |
| ------- | ------ | --------------------------------------------------------------------------------------- |
| `x` | array | 样本序列,为一维数字数组类型 |
| `m0` | float | 检验值,为实数类型 |
| `tail` | string | 假设检验的三种类型,both(双侧检验),left(左侧检验),right(右侧检验),为字符串类型 |
| `alpha` | float | 显著性水平,在0-1之间,为实数类型 |
返回:array
## `normPlot(x, return_type)`
声明:function
基于正态概率的正态性检验, ReturnType为0时返回我们常说的QQ图的散点数据,为1返回衡量散点与直线拟合程度的可决系数
<!-- tags: QQ -->
| 参数 | 类型 | 说明 |
| ------------- | ------------- | ----------------------------------------------------------------- |
| `x` | array of real | 检验样本序列,为一维数组类型 |
| `return_type` | integer | 返回类型选项,为0返回散点数据,为1返回直线拟合的可决系数。缺省为0 |
返回:array
### 示例
范例01:返回 QQ 图的散点数据
```tsl
x := rand(10);
return normPlot(x);
// 输出:
// array(
// ("采样位数": 0.171976955840364, "理想位数": -1.64484977722168),
// ("采样位数": 0.301570532377809, "理想位数": -1.03643536567688),
// ("采样位数": 0.470976530341431, "理想位数": -0.674489885568619),
// ("采样位数": 0.479131903499365, "理想位数": -0.38532167673111),
// ("采样位数": 0.678062069928274, "理想位数": -0.125661492347717),
// ("采样位数": 0.735156666953117, "理想位数": 0.125661492347717),
// ("采样位数": 0.739045920781791, "理想位数": 0.38532167673111),
// ("采样位数": 0.780685598030686, "理想位数": 0.674489885568619),
// ("采样位数": 0.817699506180361, "理想位数": 1.03643536567688),
// ("采样位数": 0.828364443266764, "理想位数": 1.64484977722168))
```
范例02:返回散点与直线拟合程度的可决系数
```tsl
x := rand(10);
return normPlot(x, 1);
// 输出:0.911334081735257
```
@@ -0,0 +1,544 @@
# 数学函数 / 统计函数
## `betaAndAlpha(y, x, beta, alpha)`
声明:function
获取斜率和截距
<!-- tags: 获取 查询 -->
| 参数 | 类型 | 说明 |
| ------- | ----- | ------------------ |
| `y` | array | 一维数字数组 |
| `x` | array | 一维数字数组 |
| `beta` | real | 实数,斜率,返回值 |
| `alpha` | real | 实数,截距,返回值 |
返回:void
### 示例
```tsl
betaAndAlpha(array(3, 6), array(4, 12), k, b);
return k;
// 输出:0.375
```
## `correlpaired(a, b)`
声明:function
计算 a 的每一列与 b 的每一列之间的相关系数矩阵
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------- |
| `a` | array | 一维数字数组, |
| `b` | array | 一维数字数组, |
返回:array
### 示例
范例01
```tsl
a := array(1, 2, 3, 4, 5);
b := array(2, 4, 6, 8, 10);
return correlpaired(a, b);
// 输出:array((1.0))
```
范例02
```tsl
a := array(1, 2, 3, 4, 5);
b := `array(
"B1": array(2, 4, 6, 8, 10),
"B2": array(10, 8, 6, 4, 2)
);
return correlpaired(a, b);
// 输出:array((1.0,-1.0))
```
范例03
```tsl
a := `array(
"A1": array(1, 2, 3, 4, 5),
"A2": array(5, 4, 3, 2, 1)
);
b := `array(
"B1": array(2, 4, 6, 8, 10),
"B2": array(10, 8, 6, 4, 2),
"B3": array(1, 2, 3, 4, 5),
"B4": array(5, 4, 3, 2, 1)
);
return correlpaired(a, b);
// 输出:array((1.0,-1.0,1.0,-1.0),(-1.0,1.0,-1.0,1.0))
```
范例04
```tsl
a := `array("A": array(1, 2, 3, 4, 5));
b := `array(
"A": array(2, 4, 6, 8, 10),
"B": array(10, 8, 6, 4, 2)
);
return correlpaired(a, b);
// 输出:array((1.0,-1.0))
```
## `correlpaired_side(a, dir_type)`
声明:function
计算 a 的每两列之间符合对应过滤条件的相关系数矩阵, 1) +-相关系数 :将 a <0 的元素替换为0 ,b>0的元素替换为0,计算相关系数 2) 同向相关系数 :将 a 与 b 非同向(乘积<0)的元素替换为0,计算相关系数 场景支持同 correlpaired 内部强制 a 转化为fmarray进行计算
<!-- tags: 过滤 筛选 filter 计算 求解 -->
| 参数 | 类型 | 说明 |
| ---------- | ----- | ------------------- |
| `a` | array | 一维数字数组, |
| `dir_type` | any | 用户自定义,方向类型 |
返回:array
## `expdMax(r)`
声明:function
统计数组累计到当前行的最大值序列
| 参数 | 类型 | 说明 |
| ---- | ------------- | ------------------------------------------------------------ |
| `r` | array of real | 数组,一维或二维(此时按列统计)数字数组,也可以为二维数据表 |
返回:array
### 示例
```tsl
r := array(-1, 2, -3, 9);
return expdMax(r); // 输出:array(-1,2,2,9)
```
## `expdMin(r)`
声明:function
统计数组累积到当前行的最小值序列
| 参数 | 类型 | 说明 |
| ---- | ------------- | ------------------------------------------------------------ |
| `r` | array of real | 数组,一维或二维(此时按列统计)数字数组,也可以为二维数据表 |
返回:array
### 示例
```tsl
r := array(-1, 2, -3, 9);
return expdMin (r); // 输出:array(-1,-1,-3,-3)
```
## `expdProduct(r)`
声明:function
返回数组累积到当前行的累乘序列
<!-- tags: 返回 获取 -->
| 参数 | 类型 | 说明 |
| ---- | ------------- | ------------------------------------------------------------ |
| `r` | array of real | 数组,一维或二维(此时按列统计)数字数组,也可以为二维数据表 |
返回:array
### 示例
```tsl
r := array(-1, 2, -3, 9);
return expdProduct (r); // 输出:array(-1,-2,6,54)
```
## `expdStd(r, ddof)`
声明:function
返回数组累积到当前行的标准差序列
<!-- tags: 返回 获取 -->
| 参数 | 类型 | 说明 |
| ------ | ------------- | ------------------------------------------------------------ |
| `r` | array of real | 数组,一维或二维(此时按列统计)数字数组,也可以为二维数据表 |
| `ddof` | integer | 整型,标准差选项,取值如下 |
返回:array
### 示例
```tsl
r := array(-1, 2, -3, 9);
return expdStd (r, 0); // 输出:array(0,1.5,2.05,4.55)
```
## `expdSum(r)`
声明:function
返回数组累积到当前行的求和序列
<!-- tags: 返回 获取 -->
| 参数 | 类型 | 说明 |
| ---- | ------------- | ------------------------------------------------------------ |
| `r` | array of real | 数组,一维或二维(此时按列统计)数字数组,也可以为二维数据表 |
返回:array
### 示例
```tsl
r := array(-1, 2, -3, 9);
return expdSum (r); // 输出:array(-1,1,-2,7)
```
## `expdVar(r, ddof)`
声明:function
返回数组累积到当前行的方差序列
<!-- tags: 返回 获取 -->
| 参数 | 类型 | 说明 |
| ------ | ------------- | ------------------------------------------------------------ |
| `r` | array of real | 数组,一维或二维(此时按列统计)数字数组,也可以为二维数据表 |
| `ddof` | integer | 整型,方差选项,取值如下 |
返回:array
### 示例
```tsl
r := array(-1, 2, -3, 9);
return expdVar (r, 0); // 输出:array(0,2.25,4.22,20.69)
```
## `kurt(t, real)`
声明:function
峰度
| 参数 | 类型 | 说明 |
| ------ | ----- | ---------------------- |
| `t` | array | 一维数字数组,一维数据 |
| `real` | | 实数,返回的峰度 |
返回:any
### 示例
```tsl
kurt(array(1, 2, 3, 4, 5), s);
return s;
// 输出:-1.2
```
## `meanAndPopnStdDevWithRate(data, rate, mean, stddev)`
声明:function
带权重总体标准差以及平均值
| 参数 | 类型 | 说明 |
| -------- | ----- | -------------------- |
| `data` | array | 一维数字数组 |
| `rate` | array | 一维数字数组 |
| `mean` | real | 实数,均值,返回值 |
| `stddev` | real | 实数,标准差,返回值 |
返回:real
### 示例
```tsl
meanAndPopnStdDevWithRate(array(1, 2, 3), array(1, 1, 1), m, s);
return m;
// 输出:2
```
## `nanMean(a)`
声明:function
计算含Nan一维数组的算术平均值
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------ |
| `a` | array | 一维数字数组 |
返回:real
### 示例
```tsl
a := array(5, 6, 8, nan);
return nanMean(a);
// 输出:6.33
```
## `nanPercentRankArr(a, f_name)`
声明:function
1、返回一维数组中的每个值在一维数组中的百分比排名
| 参数 | 类型 | 说明 |
| -------- | ------ | ------------------------ |
| `a` | array | 数字数组,待计算的数组 |
| `f_name` | string | 字符串,字段名,默认为空 |
返回:array
### 示例
```tsl
a := array(1, 1, 2, 2, 2, 9, nan, 9, 9);
return nanPercentRankArr(a);
// 输出:array(0.0,0.0,0.29,0.29,0.29,0.71,NAN,0.71,0.71)
```
## `nanPopnStd(a)`
声明:function
计算含Nan一维数组的总体标准差
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------ |
| `a` | array | 一维数字数组 |
返回:real
### 示例
```tsl
a := array(5, 6, 8, nan);
return nanPopnStd(a);
// 输出:1.25
```
## `nanPopnVariance(a)`
声明:function
计算含Nan一维数组的总体方差
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------ |
| `a` | array | 一维数字数组 |
返回:real
### 示例
```tsl
a := array(5, 6, 8, nan);
return nanPopnVariance(a);
// 输出:1.56
```
## `nanRankArr(a, f_name, sortorder)`
声明:function
1、返回一维数组中的每个值在一维数组中的排位
<!-- tags: 排序 sort -->
| 参数 | 类型 | 说明 |
| ----------- | ------ | ------------------------ |
| `a` | array | 数字数组,待计算的数组 |
| `f_name` | string | 字符串,字段名,默认为空 |
| `sortorder` | bool | 排序方向,默认为1 |
返回:array
### 示例
```tsl
a := array(1, 1, 2, 2, 2, 9, nan, 9, 9);
return nanRankArr(a);
// 输出:array(1,1,3,3,3,6,NAN,6,6)
```
## `nanStd(a)`
声明:function
计算含Nan一维数组的标准差的估计(样本标准差)
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------ |
| `a` | array | 一维数字数组 |
返回:real
### 示例
```tsl
a := array(5, 6, 8, nan);
return nanStd(a);
// 输出:1.53
```
## `nanSum(a)`
声明:function
计算含Nan一维数组的总和
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------ |
| `a` | array | 一维数字数组 |
返回:real
### 示例
```tsl
a := array(5, 6, 8, nan);
return nanSum(a);
// 输出:19
```
## `nanVariance(a)`
声明:function
计算含Nan一维数组的方差的估计(样本方差)
<!-- tags: 计算 求解 -->
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------ |
| `a` | array | 一维数字数组 |
返回:real
### 示例
```tsl
a := array(5, 6, 8, nan);
return nanVariance(a);
// 输出:2.33
```
## `regressionChannel(y, x, nowy, nowx, beta, alpha, top_alpha, bottom_alpha, top, bottom, pos, expectvalue)`
声明:function
回归通道模型
| 参数 | 类型 | 说明 |
| -------------- | ----- | ----------------------- |
| `y` | array | 一维数字数组,Y坐标数组 |
| `x` | array | 一维数字数组,X坐标数组 |
| `nowy` | real | 实数 |
| `nowx` | real | 实数 |
| `beta` | real | 实数 |
| `alpha` | real | 实数 |
| `top_alpha` | real | 实数 |
| `bottom_alpha` | real | 实数 |
| `top` | real | 实数 |
| `bottom` | real | 实数 |
| `pos` | real | 实数 |
| `expectvalue` | real | 实数,预期值(回归值) |
返回:real
### 示例
```tsl
regressionChannel(array(1, 2, 3, 4, 5), array(6, 7, 8, 9, 10), 1, 2, 3, 4, 5, 6, 7, 8, s, a);
return a;
// 输出:-3
```
## `selfStdDev(t, rmar)`
声明:function
下方标准差
| 参数 | 类型 | 说明 |
| ------ | ----- | ---------------------------------- |
| `t` | array | 数据表类型,一维数据 |
| `rmar` | real | 实数,最低可接受的收益率(已折算过) |
返回:real
### 示例
```tsl
return selfStdDev(array(1, 2, 3, 4, 5), 3);
// 输出:0.89
```
## `skew(t, skew)`
声明:function
偏斜度
| 参数 | 类型 | 说明 |
| ------ | ----- | ---------------------- |
| `t` | array | 一维数字数组,一维数据 |
| `skew` | real | 实数,返回的偏斜度 |
返回:any
### 示例
```tsl
skew(array(1, 2, 3, 4, 5, 7), s);
return s;
// 输出:0.46
```
## `variationCoefficient(x)`
声明:function
变异系数
| 参数 | 类型 | 说明 |
| ---- | ----- | ------------ |
| `x` | array | 一维数字数组 |
返回:real
### 示例
```tsl
return variationCoefficient(array(1, 2, 1, 2, 1, 2));
// 输出:0.33
```
@@ -0,0 +1,558 @@
# 数学函数 / 时间序列分析
## `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"\]:参数估计结果,,第一项为1Ret\["MA"\]:参数估计结果,,第一项为1Ret\["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 协整检验结果数组
```
@@ -0,0 +1,100 @@
# 数学函数 / 小波分析
## `wavedec(x, n, wname)`
声明:function
使用给定的小波wname进行一维多尺度离散小波分析,返回信号xin在n层上的小波分解。输出分解结构包含小波分解向量C和相应的记录向量L
| 参数 | 类型 | 说明 |
| ------- | ------- | ------------------------ |
| `x` | array | 一维序列,一维数字数组 |
| `n` | integer | 小波分解层数,正整数 |
| `wname` | string | 基础小波函数,字符串类型 |
返回:array
### 示例
范例01:提取近似系数
```tsl
setSysParam(PN_Stock(), "SH000300");
setSysParam(pn_date(), intToDate(20120731));
close300 := nDay(800, "时间", dateTimeToStr(sp_time(1)), "收盘价", close());
close3 := close300[:, "收盘价"];
return wave := wavedec(close3, 3, "db3");
// 输出:结果格式:
// 第一行是小波分解向量C,第二行是相应的记录向量L
// 下面我们从图像来直接看看小波分解:
// 原始序列:
// 原始序列可分解成:
```
## `wavelet(s, wname, n, options)`
声明:function
一维序列小波消噪
| 参数 | 类型 | 说明 |
| --------- | ------- | ------------------------------------------------------------- |
| `s` | array | 一维序列,一维数字数组 |
| `wname` | string | 基础小波函数,字符串类型,取值参考[Wavedec]函数的wname输入参数 |
| `n` | integer | 小波分解层数,正整数 |
| `options` | array | 方法选项 |
返回:array
### 示例
```tsl
s := array(2484.83, 2479.05, 2482.34, 2437.79, 2447.75, 2512.96, 2443.06, 2433.16, 2393.18, 2415.05, 2392.06, 2365.34, 2359.22, 2344.79, 2348.52, 2420.00, 2438.79, 2431.38, 2440.4, 2383.49, 2377.51, 2331.37, 2317.27, 2370.33, 2409.67, 2427.48, 2435.61, 2473.41, 2468.25, 2470.02, 2504.11, 2508.09, 2528.29, 2509.8, 2503.84, 2524.92, 2479.54, 2481.08, 2528.71, 2529.76, 2466.96, 2463.05, 2416.56, 2415.13, 2412.62, 2395.06, 2397.55, 2380.22, 2383.03, 2412.39, 2333.41, 2386.86, 2360.66, 2333.23, 2325.91, 2332.73, 2329.82, 2315.27, 2291.54, 2248.59, 2228.52, 2180.9, 2224.84, 2218.24, 2215.93, 2191.15, 2186.3, 2204.78, 2190.11, 2166.21, 2170.01, 2173.56, 2199.42, 2169.39, 2148.45, 2163.4, 2225.89, 2285.74, 2276.05, 2275.01, 2244.58, 2206.19, 2298.38, 2266.38, 2296.07, 2319.12, 2285.04, 2292.61, 2268.08, 2312.56, 2330.41, 2331.14, 2291.9, 2347.53, 2349.59, 2351.98, 2351.85, 2344.77, 2366.7, 2356.86, 2357.18, 2363.6, 2381.43, 2403.59, 2409.55, 2439.63, 2447.06, 2451.86, 2428.49, 2426.11, 2460.69);
n := 2;
wname := "db14";
options := array('brief': 1, 'sigma': 0, 'which': 1, 'alpha': 2, "thr": 0, 'sorh': 's');
return s|wavelet(s, wname, n, options);
// 消噪和原始数据对比:
```
## `wrcoef(o, c, l, wname, n)`
声明:function
一维离散小波单支重构,小波分析,小波重构中间函数或者细节系数(高频)提取
| 参数 | 类型 | 说明 |
| ------- | ------- | ------------------------------------------------------------- |
| `o` | string | 为字符串类型,'a' 一维离散小波单支重构,'d' 细节系数提取 |
| `c` | array | 小波分解向量C,数组类型,参考[Wavedec]函数的输出 |
| `l` | array | 相应的记录向量L,数组类型,参考[Wavedec]函数的输出 |
| `wname` | string | 基础小波函数,字符串类型,取值参考[Wavedec]函数的wname输入参数 |
| `n` | integer | 小波分解层数,正整数 |
返回:array
### 示例
```tsl
setSysParam(PN_Stock(), "SH000300");
setSysParam(pn_date(), intToDate(20120731));
close300 := nDay(800, "时间", dateTimeToStr(sp_time(1)), "收盘价", close());
close3 := close300[:, "收盘价"];
wave := wavedec(close3, 3, "db3");
c := wave[0];
l := wave[1];
return wrcoef('a', c, l, 'db3', 3);
```
范例02:提取第三层细节系数
```tsl
setSysParam(PN_Stock(), "SH000300");
setSysParam(pn_date(), intToDate(20120731));
close300 := nDay(800, "时间", dateTimeToStr(sp_time(1)), "收盘价", close());
close3 := close300[:, "收盘价"];
wave := wavedec(close3, 3, "db3");
c := wave[0];
l := wave[1];
return wrcoef('d', c, l, 'db3', 3);
```