2017-07-19 43 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 ) –