回歸
在 Python 中將回歸作為表輸出(類似於 stata 中的 outreg)?
任何人都知道在表格中獲得多個回歸輸出(不是多元回歸,實際上是多元回歸)的方法,該表格指示使用了哪些不同的自變數以及係數/標準誤差是什麼等。
本質上,我正在尋找類似於 outreg 的東西,除了 python 和 statsmodels。這似乎很有希望,但我不明白它是如何工作的:
為了在這裡完全清楚,我想知道如何製作類似於以下範例的表格:
您可以使用如下程式碼(使用 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() 將其導出到乳膠。