显示更有效的系数数字

时间:2017-07-19 14:16:44

标签: python pandas stata statsmodels

我正在运行一些回归,我希望与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

我基本上喜欢输出完全匹配。我知道这可以通过保存系数在引擎盖下完成,但它一目了然更容易。

2 个答案:

答案 0 :(得分:1)

我实现这个目标的方法是编辑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)

答案 1 :(得分:0)

如果您只是想增加小数位数以便在视觉上比较这些值,可以使用

  

pd.set_option('display.float_format',lambda x:'%。2f'%x)

将“2”替换为您想要显示的小数位数。

注意:这会更改数据框中所有浮动的小数位数。