如何从 statsmodels.api 中提取回归系数?

Posted

技术标签:

【中文标题】如何从 statsmodels.api 中提取回归系数?【英文标题】:How to extract the regression coefficient from statsmodels.api? 【发布时间】:2018-05-03 10:48:44 【问题描述】:
 result = sm.OLS(gold_lookback, silver_lookback ).fit()

得到结果后,如何得到系数和常数?

换句话说,如果 y = ax + c 如何获取ac 的值?

【问题讨论】:

单独访问系数:***.com/questions/29165601/… 【参考方案1】:

您可以使用拟合模型的params 属性来获取系数。

例如下面的代码:

import statsmodels.api as sm
import numpy as np
np.random.seed(1)
X = sm.add_constant(np.arange(100))
y = np.dot(X, [1,2]) + np.random.normal(size=100)
result = sm.OLS(y, X).fit()
print(result.params)

将为您打印一个 numpy 数组 [ 0.89516052 2.00334187] - 分别估计截距和斜率。

如果您想了解更多信息,可以使用对象 result.summary(),其中包含 3 个带有模型描述的详细表格。

【讨论】:

第一个是常数,第二个是系数? 没错!这就是sm.add_constant() 的工作原理:它接受一个矩阵(或向量,在我的例子中是```,并将最左边的一列添加到其中。对应于该列的系数是截距。【参考方案2】:

从这个答案 Converting statsmodels summary object to Pandas Dataframe 抄袭,似乎 result.summary() 是一组表,您可以将其导出为 html,然后使用 Pandas 转换为数据框,这将允许您直接索引你想要的值。

因此,对于您的情况(将上述链接中的答案放在一行中):

df = pd.read_html(result.summary().tables[1].as_html(),header=0,index_col=0)[0]

然后

a=df['coef'].values[1]
c=df['coef'].values[0]

【讨论】:

太棒了!但是,这不适用于详细信息更详细的 summary2()!【参考方案3】:

添加@IdiotTom 答案的详细信息。

你可以使用:

head = pd.read_html(res.summary2().as_html())[0]
body = pd.read_html(res.summary2().as_html())[1]

不太好,但信息在那里。

【讨论】:

以上是关于如何从 statsmodels.api 中提取回归系数?的主要内容,如果未能解决你的问题,请参考以下文章

解析具有未知列数的 Pandas 数据框以在 statsmodels.api 中使用

scipy.stats.linregress、numpy.polynomial.polynomial.polyfit 和 statsmodels.api.OLS 之间的差异

如何将系数值从逻辑回归中提取到 R 中的数据框中? [复制]

从 RANSAC 回归中提取系数

如何从循环通过多个 alpha 的套索回归中提取给我最低均方误差的 alpha?

从线性回归中提取 p 值和 r 平方