# 数学函数 / 统计函数

## `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
```
