2017-07-19 5 views
1

Ich führe eine Reihe von Regressionen, die ich oberflächlich mit Stata vergleichen möchte, um sicherzustellen, dass mein Code funktioniert, wenn ich von Stata nach Python migriere.Zeige mehr signifikante Zahlen von Koeffizienten

d.h statsmodels.formula.api('x ~ y') Ausgänge

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

Die Stata bietet

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

ich im Wesentlichen die Ausgabe exakt übereinstimmen möchten. Ich weiß, dass dies unter der Haube möglich ist, indem man die Koeffizienten speichert, aber es ist viel einfacher auf einen Blick.

Antwort

1

Die (hacky) Weise, die ich erreicht habe, ist durch Bearbeiten der statsmodels-Bibliotheksdatei iolib\summary.py und einschließlich Stata-artiger Rundung. Es ist nicht perfekt, aber es wird den Job für den Moment erledigen.

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

Wenn Sie gerade suchen, um die Anzahl der Dezimalstellen zu erhöhen, so dass Sie visuell die Werte vergleichen können, können Sie

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

Ersetzen Sie "2" durch die Anzahl der Dezimalstellen, die Sie anzeigen möchten.

Hinweis: Dies ändert die Anzahl der Dezimalstellen für alle Floats in Ihren Datenrahmen.

+0

Danke, aber dies scheint nicht für die statsmodels Ausgabe zu tun. Ich denke, es wird darum gehen, die Codebasis direkt zu bearbeiten. – tom

+0

ist der Ausgabetext? Ich nehme an, es gibt eine Methode, um die rohen Zahlen (als DataFrame/Series?) Zu erhalten, und dann [String Formatierung] (https://docs.python.org/3/library/string.html#format-string-syntax) –

Verwandte Themen