如何修改statsmodels中params输出的截距与自变量参数名称
statsmodels 修改params输出参数名实现方案
model.params返回的是标准pandas Series对象,没有提供专门的参数名修改入参,直接操作索引或者按原始键取值即可实现自定义命名,无需生成完整的summary结果。
单组系数重命名方法
如果只需要修改单组params的输出名称,直接替换Series的索引即可,顺序和params默认输出顺序完全对应:
model = smf.ols(f'{t} ~ SP50', data=first52).fit() coef_and_intercept = model.params # 替换索引名,截距对应Alpha,SP50系数对应Beta coef_and_intercept.index = ['Alpha', 'Beta']
修改后输出和预期完全一致:
Alpha 125.682063 Beta -0.288299 dtype: float64
批量生成Alpha/Beta系数表实现
如果要直接生成所有标的的系数统计表,不需要逐组重命名,循环时直接按原始参数键提取值,存入结构化列表后一次性转DataFrame即可,最终表格样式和参考效果一致,完整代码如下:
import pandas as pd import statsmodels.formula.api as smf df = pd.read_excel("dataset\\Special_Proj.xlsx") df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%y') tickers = ['FDX', 'BRK', 'MSFT', 'NVDA', 'INTC', 'AMD', 'JPM', 'T', 'AAPL', 'AMZN', 'GS'] def rolling_regression_stats(): first52 = df[(df['Date'] <= '2000-12-22')] result_records = [] for ticker in tickers: model = smf.ols(f'{ticker} ~ SP50', data=first52).fit() result_records.append({ 'Ticker': ticker, 'Alpha': model.params['Intercept'], 'Beta': model.params['SP50'] }) return pd.DataFrame(result_records) # 生成最终系数表 alpha_beta_df = rolling_regression_stats() print(alpha_beta_df)
注:按键名取值的方式鲁棒性更强,不会因为模型参数顺序变动导致Alpha、Beta赋值错误。
内容的提问来源于stack exchange,提问作者Trevor Seibert
相关产品推荐
相关产品推荐

