如何从statsmodels的params输出中分离截距提取目标系数
statsmodels回归单独提取指定自变量系数的方法
model.params返回的是带标签索引的pandas Series结构,你之前调用params.index[1]仅访问了索引层的内容,所以只能拿到系数名称,拿不到对应数值,可通过以下方式实现需求:
方法1:按变量名直接索引(最稳定,推荐优先使用)
不需要依赖系数的排列顺序,后续修改回归公式加新变量也不会取错值,代码示例:def rolling_reg(): model = smf.ols('FDX ~ SP50', data=df).fit() all_params = model.params # 直接指定要提取的自变量名 target_var = "SP50" target_coef = all_params[target_var] # 打印名称和对应值 print(f"{target_var} 系数值:{target_coef}") # 如需存入DataFrame直接构造即可 coef_df = pd.DataFrame({ "变量名": [target_var], "系数值": [target_coef] }) return coef_df rolling_reg()运行后只会输出SP50对应的系数,不会返回Intercept截距项。
方法2:按位置索引取值(仅适合固定结构的简单回归)
单自变量回归中截距固定在第0位,目标自变量SP50在第1位,可通过iloc取位置对应的值:# 同时取位置1的名称和数值 coef_name = all_params.index[1] coef_value = all_params.iloc[1]注意:该方法依赖系数的排列顺序,如果后续回归新增其他自变量,位置发生偏移就会取错结果,不推荐在复杂回归、滚动回归场景使用。
内容的提问来源于stack exchange,提问作者Trevor Seibert
相关产品推荐
相关产品推荐

