显示更重要的系数数字

Show more significant figures of coefficients

我是 运行 一些回归,我想从表面上与 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

我基本上希望输出完全匹配。我知道这可能可以通过保存系数在幕后完成,但一目了然要容易得多。

如果您只是想增加小数位数以便直观地比较这些值,您可以使用

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

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

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

我实现此目的的(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)

我遇到了类似的问题,我希望看到更多数字,尤其是标准错误。

我找到的解决方法是将所有自变量除以一个因子(例如,如果我想再看到两位数字,则为 100),然后使用该因子重新调整估计值。这种方法不涉及修改库。

下面会打印小数点后6位的参数

# Parameters with 6 significant digits
print(result.summary2().tables[1])

此处 结果 是变量,您可以在其中保存适合数据的 OLS 模型