ols
语法
ols(Y, X, [intercept=true], [mode=0], [method=”default”], [usePinv=true])
参数
Y 是因变量;X 是自变量。
Y 是一个向量;X 是一个向量、元组、矩阵或表。当 X 是矩阵时,如果行数等于 Y 的长度,X 的每一列都是一个因子;如果行数不等于 Y 的长度,并且如果列数等于 Y 的长度,X 的每一行都是一个因子。
intercept 是一个布尔变量,表示是否包含回归中的截距。默认值是 true。当它为 true 时,系统自动给 X 添加一列 "1" 以生成截距。
mode 是一个整数,默认值为 0,可取以下 3 个值
-
0:输出一个系数估计向量
-
1:输出一个具有系数估计,标准差,t 统计量和 p 值的表
-
2:输出一个具有 ANOVA(方差分析)、RegressionStat(回归统计)、Cofficient(系数))和 Residual(残差))的字典,具体含义见下表:
键 ANOVA 对应值:
Source of Variance | 自由度(Degree of freedom) | 平方和(Sum of Square) | 均方差(Mean of square) | F统计量 | Significance |
---|---|---|---|---|---|
Regression(回归) | 变量个数(p) | 回归平方和(SSR) | 回归均方差(MSR=SSR/R) | MSR 对 MSE 的比值 | 显著性,即统计出的 P 值 |
Residual(残差) | 残差自由度(n-p-1) | 残差平方和(SSE) | 残差均方差(MSE=MSE/E) | ||
Total | 样本自由度 | ||||
不包括常数项(n-1) | 总离差平方和(SST) |
键 RegressionStat 对应值:
item | 统计值 |
---|---|
R2 | R 决定系数,描述回归曲线对真实数据点拟合程度的统计量。范围在 [0,1]之间,越接近1 ,说明对y的解释能力越强,拟合越好。 |
AdjustedR2 | 经自由度修正后的决定系数,通过样本数量与模型数量对 R-squared 进行修正。 |
StdError | 回归残差标准误差,残差经自由度修正后的标准差。 |
Observations | 观察样本个数。 |
键 Coefficient 对应值:
元素 | 说明 |
---|---|
factor | 自变量名称 |
beta | 回归系数估计值 |
stdError | 回归系数标准误差。 |
tstat | T统计值,衡量系数的统计显著性。 |
键 Residual 对应每一个预测值和实际值之间的残差。
method 是一个字符串,表示求解最小二乘问题采用的方法。
-
默认值为“default”,表示采用构造系数矩阵和逆矩阵的方式求解;
-
设置为“svd”,采用奇异值分解的方式。
usePinv 一个布尔值,表示计算过程中求矩阵的逆时,是否求矩阵的伪逆。
-
默认值为 true,表示求矩阵的伪逆,奇异矩阵必须指定为 true。
-
若为 false,表示求矩阵的逆,只适用于非奇异矩阵。
详情
返回对 X 和 Y 计算普通最小二乘回归的结果。需要注意的是,该函数会将 X 和 Y 中的空值替换为0后进行计算。
例子
x1=1 3 5 7 11 16 23
x2=2 8 11 34 56 54 100
y=0.1 4.2 5.6 8.8 22.1 35.6 77.2;
ols(y, x1);
# output
[-9.912821,3.378632]
ols(y, (x1,x2));
# output
[-9.494813,2.806426,0.13147]
ols(y, (x1,x2), 1, 1);
factor | beta | stdError | tstat | pvalue |
---|---|---|---|---|
intercept | -9.494813 | 5.233168 | -1.814353 | 0.143818 |
x1 | 2.806426 | 1.830782 | 1.532911 | 0.20007 |
x2 | 0.13147 | 0.409081 | 0.321379 | 0.764015 |
ols(y, (x1,x2), 1, 2);
# output
Coefficient->
factor beta stdError tstat pvalue
--------- --------- -------- --------- --------
intercept -9.494813 5.233168 -1.814353 0.143818
x1 2.806426 1.830782 1.532911 0.20007
x2 0.13147 0.409081 0.321379 0.764015
Residual->[6.525447,4.223774,-0.383487,-5.820153,-6.638199,-6.907387,9.000005]
RegressionStat->
item statistics
------------ ----------
R2 0.940241
AdjustedR2 0.910361
StdError 8.173444
Observations 7
ANOVA->
Breakdown DF SS MS F Significance
---------- -- ----------- ----------- --------- ------------
Regression 2 4204.416396 2102.208198 31.467739 0.003571
Residual 4 267.220747 66.805187
Total 6 4471.637143
x=matrix(1 4 8 2 3, 1 4 2 3 8, 1 5 1 1 5);
x;
#0 | #1 | #2 |
---|---|---|
1 | 1 | 1 |
4 | 4 | 5 |
8 | 2 | 1 |
2 | 3 | 1 |
3 | 8 | 5 |
ols(1..5, x);
# output
[1.156537,0.105505,0.91055,-0.697821]
ols(1..5, x.transpose());
# output
[1.156537,0.105505,0.91055,-0.697821]
// 系统会调整因变量和自变量的维数,以便进行回归
x = table([13.9782,13.4688,13.4336,12.9642,12.7905,13.4771,13.0423,12.6588,13.8933,13.9006] as col0, [195.3904,181.4090,180.4627,168.0723,163.5973,181.6342,170.1017,160.2477,193.0241,193.2270] as col1, [2731.2089,2443.3656,2424.2715,2178.9356,2092.4947,2447.9167,2218.5185,2028.5594,2681.7456,2685.9754] as col2)
y = [-0.4002,-0.8004,-0.2002,-1.0002,-0.2001,-0.5001,-0.2501,0.0000,0.0000,0.0000]
ols(y, x, true, 0, "default")
[2.968166,13.023638,-2.016390,0.076485]
ols(y, x, true, 0, "svd")
[3266.457957,-722.195120,53.157806,-1.302769]
x1=1 1 1
x2=2 2 2
y = 1 1 1
ols(y, (x1, x2))
// output:[0.16666666666666669 0.16666666666666669 0.33333333333333326]
ols(y, (x1, x2), usePinv=false)
// ERR: The input matrix is singular and cannot be inverted.
由于在求解过程中,参与求逆的矩阵是奇异的,因此 usePinv=false 时报错。