使用statsmodels的OLS模型获取beta报错AttributeError,求解决
问题解决方案
错误核心原因
AttributeError是因为statsmodels的OLS拟合结果对象(OLSResults)没有名为beta的属性,回归系数实际存储在params属性中。
修正后的代码
同时需要修正代码里另外两个错误:
- 普通OLS模型不支持
window参数,该参数属于滚动回归模型 - statsmodels默认不为自变量添加截距项,需手动添加以符合常规回归逻辑
import statsmodels.api as sm import pandas as pd df = pd.DataFrame({"A": [10,20,30,40,50], "B": [20, 30, 10, 40, 50], "C": [32, 234, 23, 23, 42523]}) # 为自变量添加常数项(截距) X = sm.add_constant(df['B']) # 初始化普通OLS模型并拟合,移除无效的window参数 model = sm.OLS(df['A'], X).fit() print(model.summary()) # 获取回归系数(原需求的beta值) print(model.params)
滚动窗口回归补充
如果你的实际需求是滚动窗口回归,则需要使用RollingOLS类,示例代码如下:
from statsmodels.regression.rolling import RollingOLS # 注意window值不能大于样本量(当前样本量为5,此处设为2) rolling_model = RollingOLS(df['A'], X, window=2).fit() # 获取各窗口的回归系数 print(rolling_model.params)
内容的提问来源于stack exchange,提问作者Kourosh Barsamnia
相关产品推荐
相关产品推荐

