我正在运行一些回归,我希望与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
我基本上喜欢输出完全匹配。我知道这可以通过保存系数在引擎盖下完成,但它一目了然更容易。
答案 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”替换为您想要显示的小数位数。
注意:这会更改数据框中所有浮动的小数位数。