2014-05-10 41 views
16

我一直在使用Python進行迴歸分析。獲得迴歸結果後,我需要將所有結果彙總到一個表中並將它們轉換爲LaTex(用於發佈)。是否有任何包在Python中做到這一點?喜歡的東西estout在Stata給出如下表:任何Python庫產生出版風格的迴歸表

enter image description here

+0

此問題的任何現代更新?總結2仍然非常缺乏。 –

+1

@MatthewGunn這個函數遠非Stata的estout包(或R的包)所能做到的。所以我最終爲我的工作流做了什麼就是調用Python中的用戶定義函數,它調用Stata在終端中運行一個運行所有迴歸並輸出表的do-file。 – Titanic

回答

21

那麼,有summary_colstatsmodels;它沒有所有的鐘聲和口哨聲estout,但它確實有你正在尋找(包括出口到膠乳)的基本功能:

import statsmodels.api as sm 
from statsmodels.iolib.summary2 import summary_col 

p['const'] = 1 
reg0 = sm.OLS(p['p0'],p[['const','exmkt','smb','hml']]).fit() 
reg1 = sm.OLS(p['p2'],p[['const','exmkt','smb','hml']]).fit() 
reg2 = sm.OLS(p['p4'],p[['const','exmkt','smb','hml']]).fit() 

print summary_col([reg0,reg1,reg2],stars=True,float_format='%0.2f') 

=============================== 
     p0  p2  p4 
------------------------------- 
const -1.03*** -0.01 0.62*** 
     (0.11) (0.04) (0.07) 
exmkt 1.28*** 0.97*** 0.98*** 
     (0.02) (0.01) (0.01) 
smb 0.37*** 0.28*** -0.14*** 
     (0.03) (0.01) (0.02) 
hml 0.77*** 0.46*** 0.69*** 
     (0.04) (0.01) (0.02) 
=============================== 
Standard errors in parentheses. 
* p<.1, ** p<.05, ***p<.01 

或者這裏是一個版本,我加上R平方和觀測值的數目:

print summary_col([reg0,reg1,reg2],stars=True,float_format='%0.2f', 
        info_dict={'N':lambda x: "{0:d}".format(int(x.nobs)), 
          'R2':lambda x: "{:.2f}".format(x.rsquared)}) 

=============================== 
     p0  p2  p4 
------------------------------- 
const -1.03*** -0.01 0.62*** 
     (0.11) (0.04) (0.07) 
exmkt 1.28*** 0.97*** 0.98*** 
     (0.02) (0.01) (0.01) 
smb 0.37*** 0.28*** -0.14*** 
     (0.03) (0.01) (0.02) 
hml 0.77*** 0.46*** 0.69*** 
     (0.04) (0.01) (0.02) 
R2 0.86  0.95 0.88  
N  1044  1044 1044  
=============================== 
Standard errors in parentheses. 
* p<.1, ** p<.05, ***p<.01 

又如,此時示出了使用model_names選項和迴歸,其中獨立變量而變化:

reg3 = sm.OLS(p['p4'],p[['const','exmkt']]).fit() 
reg4 = sm.OLS(p['p4'],p[['const','exmkt','smb','hml']]).fit() 
reg5 = sm.OLS(p['p4'],p[['const','exmkt','smb','hml','umd']]).fit() 

print summary_col([reg3,reg4,reg5],stars=True,float_format='%0.2f', 
        model_names=['p4\n(0)','p4\n(1)','p4\n(2)'], 
        info_dict={'N':lambda x: "{0:d}".format(int(x.nobs)), 
          'R2':lambda x: "{:.2f}".format(x.rsquared)}) 

============================== 
     p4  p4  p4 
     (0)  (1)  (2) 
------------------------------ 
const 0.66*** 0.62*** 0.15*** 
     (0.10) (0.07) (0.04) 
exmkt 1.10*** 0.98*** 1.08*** 
     (0.02) (0.01) (0.01) 
hml   0.69*** 0.72*** 
       (0.02) (0.01) 
smb   -0.14*** 0.07*** 
       (0.02) (0.01) 
umd     0.46*** 
         (0.01) 
R2 0.78 0.88  0.96 
N  1044 1044  1044 
============================== 
Standard errors in 
parentheses. 
* p<.1, ** p<.05, ***p<.01 

要導出到LaTeX,請使用as_latex方法。

我可能是錯的,但我不認爲t-stats的選項,而不是標準錯誤(如你的例子中)被實現。

+0

謝謝。它效果很好。 – Titanic

+1

您能否讓我知道如何在Google搜索中找到此命令?我花了半個小時尋找一個命令,但找不到它。謝謝! – Titanic

+1

我不知道......我忘了我是怎麼跑過去的;這裏是一個鏈接到github上的源文件;它有一個文檔字符串:[summary2.py](https://github.com/statsmodels/statsmodels/blob/master/statsmodels/iolib/summary2.py) –