2017-07-19 42 views
1

我正在運行一些迴歸我想表面比較Stata,以確保我的代碼在Stata遷移到Python時起作用。顯示係數的更多有效數字

statsmodels.formula.api('x ~ y')輸出

   coef std err   t  P>|t|  [0.025  0.975] 
------------------------------------------------------------------------------ 
Intercept  2.9420  0.287  10.265  0.000  2.380  3.504 

而提供的Stata

------------------------------------------------------------------------------ 
     med |  Coef. Std. Err.  t P>|t|  [95% Conf. Interval] 
-------------+---------------------------------------------------------------- 
     _cons | 2.94203 .2866093 10.26 0.000  2.380268 3.503792 

我基本上和輸出到完全匹配。我知道這可以通過保存係數來完成,但是一眼就可以輕鬆得多。

回答

1

我已經實現了這個(hacky)的方式是通過編輯statsmodels庫文件iolib\summary.py,幷包括Stata類似的四捨五入。這並不完美,但它現在可以完成這項工作。

def forg(x, prec=3): 
    if prec == 3: 
    #for 3 decimals 
     if (abs(x) >= 1e4) or (abs(x) < 1e-4): 
      return '%9.3g' % x 
     else: 
      return '%9.3f' % x 
    elif prec == 4: 
     if (abs(x) >= 1e4) or (abs(x) < 1e-4): 
      return '%10.4g' % x 
     else: 
      return '%10.4f' % x 
    elif prec == 10: #stata like coefficient rounding 
     return round(x,2) 
    elif prec == 11: #stata like t-stat rounding 
     return round(x,7) 
0

如果你只是希望增加小數號碼,以便您可以直觀地比較值,你可以使用

pd.set_option(「display.float_format」,拉姆達X:「% .2f'%x)

用您希望顯示的小數位數代替「2」。

注意:這會更改數據幀中所有浮點數的小數位數。

+0

謝謝,但這似乎沒有爲statsmodels輸出。我認爲這將是直接編輯代碼庫的問題。 – tom

+0

是輸出文本?我想有一種方法來獲取原始數據(如DataFrame/Series?),然後使用[String formatting](https://docs.python.org/3/library/string.html#format-string-syntax ) –