【编程学习】利用Python进行滚动线性回归
方案1:numpy_ext.rolling_apply
基于numpy_ext.rolling_apply的滚动回归需要自己定义一个回归计算的函数,可以直接使用sklearn或者statsmodels库中的方法进行回归计算。
相关环境准备
首先安装numpy_ext库,添加清华镜像源可以让下载更快。
1 | # 以防有人没有,全部写出来吧 |
导入相关环境
1 | import numpy as np |
滚动回归实现
1 | def rolling_regression(s1,s2): |
方法优劣
优势:
- 方法简单
- 可以自定义相关函数
劣势:
- 用时相对较慢(比遍历快,比下一个方法慢)
- 只进行一元回归
- 所有需要的指标与结果都需要自定义进行计算
方案2:pyfinance.ols.PandasRollingOLS
首先安装pyfinance库,添加清华镜像源可以让下载更快。
1 | pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyfinance |
导入相关环境
1 | import numpy as np |
滚动回归实现
1 | # 随机生成一个200*3的DataFrame |
其他计算结果
使用PandasRollingOLS方法不只能计算回归的结果,其他的相关指标也都一并计算了出来。以下是指标名称之间的对应关系:
方法名称 | 返回结果 | 方法名称 | 返回结果 | 方法名称 | 返回结果 |
---|---|---|---|---|---|
alpha | 常数项 | ms_reg | 模型MSE | ss_err | 类内和方差 |
beta | 斜率项 | n | 窗口大小 | ss_reg | 类间和方差 |
condition_number | 条件数 | names | 变量名称 | ss_tot | 总和方差 |
df_err | 残差自由度 | predicted | 每次回归y的预测值 | std_err | 模型标准误 |
df_reg | 模型自由度 | pvalue_alpha | 常数项p值 | tstat_alpha | 常数项的t统计量值 |
df_tot | 总自由度 | pvalue_beta | 斜率p值 | tstat_beta | 自变量的t统计量 |
durbin_watson | DW检验 | resids | 每次回归的残差 | use_const | 不确定 |
fstat | F统计量 | ridx | 有回归结果的序列时间 | window | 窗口大小 |
fstat_sig | F统计量p值 | rsq | 拟合优度R^2 | x | 自变量(包含截距项) |
has_const | 不确定 | rsq_adj | 调整拟合优度 | xwins | 每个窗口的自变量 |
index | 全部序列时间 | se_alpha | 常数项标准误差 | y | 因变量 |
jarque_bera | J-B检验值 | se_beta | 斜率项标准误差 | ybar | 窗口因变量均值 |
k | 自变量个数 | solution | 拟合出的所有参数 (在第一列) | ywins | 每个窗口的因变量 |
ms_err | 残差MSE |
方法优劣
优势:
- 方法简单
- 可以进行多元线性回归
- 代码效率较高,计算快
- 相关指标容易获得
劣势:
- 不能自定义相关函数
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 6Youngの屋!
评论