我可以提取或构建一个Pandas框架的表与系数值等提供的summary()方法在statmodels?

14ifxucb  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(110)

我在statsmodels中运行了一个OLS模型,我希望在摘要中有一个Pandas框架表。
这就是我的意思:
x1c 0d1x的数据
我想在红色框架内的表被构造/提取,并成为一个Pandas DataFrame。
到目前为止,我的代码很简单:

from statsmodels.regression.linear_model import OLS

mod = OLS(endog = coded_design_poly_select.response.values, exog = coded_design_poly_select.iloc[:, :-1].values)

fitted_model = mod.fit()

fitted_model.summary()

字符串
你有什么建议?

pw136qt2

pw136qt21#

fitted_model实际上是一个存储所有回归结果的RegressionResults对象,您可以通过相应的方法/属性访问它们。
对于你所要求的,我相信下面的代码会起作用

data = {'coef': fitted_model.params,
        'std err': fitted_model.bse,
        't': fitted_model.tvalues,
        'P>|t|': fitted_model.pvalues,
        '[0.025': fitted_model.conf_int()[0],
        '0.975]': fitted_model.conf_int()[1]}

pd.DataFrame(data).round(3)

字符串

ntjbwcob

ntjbwcob2#

最简单的方法是从fitted_model.summary2()获取此信息
你可以直接得到一个框架,如下所示:

import numpy as np
import statsmodels.api as sm

np.random.seed(0)

n_sample = 100
x = np.linspace(0, 10, n_sample)
X = np.column_stack((x, x ** 2))
beta = np.array([1, 0.1, 10])
e = np.random.normal(size=n_sample)

X = sm.add_constant(X)
y = np.dot(X, beta) + e

model = sm.OLS(y, X)
results = model.fit()

res_df = results.summary2().tables[1]
print(res_df)
print(type(res_df))

字符串
这将打印:

Coef.  Std.Err.           t          P>|t|     [0.025     0.975]
const   2.063084  0.275825    7.479687   3.364219e-11   1.515648   2.610520
x1     -0.447733  0.127479   -3.512193   6.764791e-04  -0.700744  -0.194721
x2     10.051800  0.012335  814.869057  7.714347e-188  10.027317  10.076282
<class 'pandas.core.frame.DataFrame'>


这就是Pandas.DataFrame
请注意,这是一个实验特性,其状态为a long-standanding debate

gkn4icbw

gkn4icbw3#

虽然steven's answer可能是最好的/推荐的方法,但这里有另一种方法,不需要手动输入列名:

import numpy as np
import statsmodels.api as sm
import pandas as pd

dat = sm.datasets.get_rdataset('Guerry', 'HistData').data
X = sm.add_constant(dat[['Literacy']])
results = sm.OLS(dat['Lottery'],X).fit()

# Convert the desired summary table to a numpy array
stats = np.array(results.summary().tables[1].data)

# Now convert to a DataFrame using the first row as header
# and first column as index
stats_df = pd.DataFrame(data=stats[1:,1:], index=stats[1:,0], columns=stats[0,1:])
stats_df

字符串
这给出了:
| | 标准误差|不|P> t|【|0.025|】|0.975]个单位| 0.975] |
| --|--|--|--|--|--|--|
| 拦截|64.0896| 6.265|十点二十三分| 0 |五十一点六三一|七十六点五四八|
| 扫盲| -0.5245 |零点一四六| -3.59 |0.001个单位| -0.815 | -0.234 |

相关问题