回歸

在 Python 中將回歸作為表輸出(類似於 stata 中的 outreg)?

  • June 12, 2020

任何人都知道在表格中獲得多個回歸輸出(不是多元回歸,實際上是多元回歸)的方法,該表格指示使用了哪些不同的自變數以及係數/標準誤差是什麼等。

本質上,我正在尋找類似於 outreg 的東西,除了 python 和 statsmodels。這似乎很有希望,但我不明白它是如何工作的:

http://statsmodels.sourceforge.net/stable/generated/statsmodels.iolib.summary.Summary.html#statsmodels.iolib.summary.Summary

為了在這裡完全清楚,我想知道如何製作類似於以下範例的表格:

在此處輸入圖像描述

您可以使用如下程式碼(使用 as_latex 函式)將回歸結果輸出到 tex 文件,但它不會像outreg2那樣以表格形式整齊地堆疊它們:

import pandas as pd
import statsmodels.formula.api as smf
x = [1, 3, 5, 6, 8, 3, 4, 5, 1, 3, 5, 6, 8, 3, 4, 5, 0, 1, 0, 1, 1, 4, 5, 7]
y = [0, 1, 0, 1, 1, 4, 5, 7,0, 1, 0, 1, 1, 4, 5, 7,0, 1, 0, 1, 1, 4, 5, 7]
d = { "x": pd.Series(x), "y": pd.Series(y)}
df = pd.DataFrame(d)
mod = smf.ols('y ~ x', data=df)
res = mod.fit()
print(res.summary())

beginningtex = """\\documentclass{report}
\\usepackage{booktabs}
\\begin{document}"""
endtex = "\end{document}"

f = open('myreg.tex', 'w')
f.write(beginningtex)
f.write(res.summary().as_latex())
f.write(endtex)
f.close()

as_latex 函式生成一個有效的乳膠表,但不是一個有效的乳膠文件,所以我在上面添加了一些額外的程式碼,以便它可以編譯。列印功能的結果是這樣的:

                       OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.129
Model:                            OLS   Adj. R-squared:                  0.089
Method:                 Least Squares   F-statistic:                     3.257
Date:                Fri, 29 Apr 2016   Prob (F-statistic):             0.0848
Time:                        20:12:12   Log-Likelihood:                -53.868
No. Observations:                  24   AIC:                             111.7
Df Residuals:                      22   BIC:                             114.1
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                coef    std err          t      P>|t|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
Intercept      0.9909      0.908      1.091      0.287        -0.893     2.875
x              0.3732      0.207      1.805      0.085        -0.056     0.802
==============================================================================
Omnibus:                        3.957   Durbin-Watson:                   0.999
Prob(Omnibus):                  0.138   Jarque-Bera (JB):                1.902
Skew:                           0.380   Prob(JB):                        0.386
Kurtosis:                       1.849   Cond. No.                         8.50
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

像這樣的乳膠: 在此處輸入圖像描述

更新:不像 outreg 那樣功能齊全,但 summary_col 函式可以滿足您的要求。

import pandas as pd
import statsmodels.formula.api as smf
from statsmodels.iolib.summary2 import summary_col
x = [1, 3, 5, 6, 8, 3, 4, 5, 1, 3, 5, 6, 8, 3, 4, 5, 0, 1, 0, 1, 1, 4, 5, 7]
y = [0, 1, 0, 1, 1, 4, 5, 7,0, 1, 0, 1, 1, 4, 5, 7,0, 1, 0, 1, 1, 4, 5, 7]
d = { "x": pd.Series(x), "y": pd.Series(y)}
df = pd.DataFrame(d)
df['xsqr'] = df['x']**2  
mod = smf.ols('y ~ x', data=df)
res = mod.fit()
print(res.summary())
df['xcube'] = df['x']**3  

mod2= smf.ols('y ~ x + xsqr', data=df)
res2 = mod2.fit()
print(res2.summary())

mod3= smf.ols('y ~ x + xsqr + xcube', data=df)
res3 = mod3.fit()
print(res2.summary())

dfoutput = summary_col([res,res2,res3],stars=True)
print(dfoutput)

具有以下輸出:

=====================================
           y I       y II    y III  
-------------------------------------
Intercept 0.9909   -0.6576   -0.2904 
         (0.9083) (1.0816)  (1.3643)
x         0.3732*  1.7776*** 1.0700  
         (0.2068) (0.6236)  (1.6736)
xcube                        -0.0184 
                            (0.0402)
xsqr               -0.1845** 0.0409  
                  (0.0781)  (0.4995)
=====================================
Standard errors in parentheses.
* p<.1, ** p<.05, ***p<.01

和以前一樣,您可以使用 dfoutput.as_latex() 將其導出到乳膠。

引用自:https://economics.stackexchange.com/questions/11774