Skip to main content

regtabletotext: helpers to print regression output as text

What is regtabletotext?

This package is a collection of helper functions to print regression output of the Python packages statsmodels, linearmodels, and arch as text strings. The helpers are particularly useful for users who want to render regression output in Quarto to HTML and PDF.

If you want to export your results to LaTeX or HTML, please check out stargazer.

How to install regtabletotext?

The package is available on pypi.org/project/regtabletotext:

pip install regtabletotext

How to use regtabletotext?

Currently supported model types:

  • statsmodels.regression.linear_model.RegressionResultsWrapper
  • linearmodels.panel.results.PanelEffectsResults
  • arch.univariate.base.ARCHModelResult

For statsmodels regression output

The following code chunk

import pandas as pd
import numpy as np
import statsmodels.formula.api as smf
from regtabletotext import prettify_result

n = 100 
data = pd.DataFrame({
    'age': np.random.randint(18, 65, n),
    'income': np.random.normal(50, 20, n) ,
    'education': np.random.randint(12, 22, n),
    'hours_worked': np.random.randint(20, 60, n),
    'satisfaction': np.random.randint(1, 11, n) 
})

mod = smf.ols(formula='income ~ age + education + hours_worked', data=data)
res = mod.fit()

prettify_result(res)

returns this text

OLS Model:
Lottery ~ Literacy + Wealth + Region

Coefficients:
             Estimate  Std. Error  Statistic  p-Value
Intercept      38.652       9.456      4.087    0.000
Region[T.E]   -15.428       9.727     -1.586    0.117
Region[T.N]   -10.017       9.260     -1.082    0.283
Region[T.S]    -4.548       7.279     -0.625    0.534
Region[T.W]   -10.091       7.196     -1.402    0.165
Literacy       -0.186       0.210     -0.886    0.378
Wealth          0.452       0.103      4.390    0.000

Summary statistics:
- Number of observations: 85
- R-squared: 0.338, Adjusted R-squared: 0.287
- F-statistic: 6.636 on 6 and 78 DF, p-value: 0.000

For linearmodels regression output

This code chunk

import pandas as pd
import numpy as np
from linearmodels import PanelOLS
from regtabletotext import prettify_result

np.random.seed(42)
n_entities = 100
n_time_periods = 5

data = {
    'entity': np.repeat(np.arange(n_entities), n_time_periods),
    'time': np.tile(np.arange(n_time_periods), n_entities),
    'y': np.random.randn(n_entities * n_time_periods),
    'x1': np.random.randn(n_entities * n_time_periods),
    'x2': np.random.randn(n_entities * n_time_periods)
}

df = pd.DataFrame(data)
df.set_index(['entity', 'time'], inplace=True)

formula = 'y ~ x1 + x2 + EntityEffects + TimeEffects'
model = PanelOLS.from_formula(formula, df)
result = model.fit()

prettify_result(result, options={'digits':2, 'include_residuals': True})

produces this output

Panel OLS Model:
y ~ x1 + x2 + EntityEffects + TimeEffects

Covariance Type: Unadjusted

Residuals:
 Mean  Std  Min   25%  50%  75%  Max
  0.0 0.87 -2.7 -0.62  0.0 0.58 3.16

Coefficients:
    Estimate  Std. Error  t-Statistic  p-Value

x1     -0.06        0.05        -1.12     0.26
x2     -0.04        0.05        -0.80     0.42

Included Fixed Effects:
        Total
Entity  100.0
Time      5.0

Summary statistics:
- Number of observations: 500
- R-squared (incl. FE): 0.21, Within R-squared: 0.01
- F-statistic: 1.05, p-value: 0.35

For multiple models, you can also use prettify_result:

formula = 'y ~ x1 + x2'
model = PanelOLS.from_formula(formula, df)
result1 = model.fit()

formula = 'y ~ x2 + EntityEffects'
model = PanelOLS.from_formula(formula, df)
result2 = model.fit()

formula = 'y ~ x1 + x2 + EntityEffects + TimeEffects'
model = PanelOLS.from_formula(formula, df)
result3 = model.fit()

results = [result1, result2, result3]

prettify_result(results)

The result is:

Dependent var.        y               y               y

x1              -0.072 (-1.59)                  -0.058 (-1.12)
x2              -0.049 (-1.14)  -0.049 (-0.98)  -0.041 (-0.8)

Fixed effects                       Entity       Entity, Time
VCOV type         Unadjusted      Unadjusted      Unadjusted
Observations         500             500             500
R2 (incl. FE)       0.008           0.198           0.208
Within R2           0.006           0.002           0.006

For arch estimation output

For arch estimations like these:

import datetime as dt
import pandas_datareader.data as web
from arch import arch_model
import arch.data.sp500
from regtabletotext import prettify_result

start = dt.datetime(1988, 1, 1)
end = dt.datetime(2018, 1, 1)
data = arch.data.sp500.load()
returns = 100 * data['Adj Close'].pct_change().dropna()
am_fit = arch_model(returns).fit(update_freq=5)

prettify_result(am_fit)

you get:

Constant Mean - GARCH Model Results

Mean Coefficients:
    Estimate  Std. Error  Statistic  p-Value
mu     0.056       0.011      4.906      0.0

Coefficients for GARCH(p: 1, q: 1):
          Estimate  Std. Error  Statistic  p-Value
omega        0.018       0.005      3.738      0.0
alpha[1]     0.102       0.013      7.852      0.0
beta[1]      0.885       0.014     64.125      0.0

Summary statistics:
- Number of observations: 5,030
- Distribution: Normal distribution
- Multiple R-squared: 0.000, Adjusted R-squared: 0.000
- BIC: 13,907.530,  AIC: 13,881.437

Version 0.0.12

  • Added note that table contains t-statistics
  • prettify_result() now passes lists to prettify_results()

Version 0.0.11

  • Replaced reporting of F-statistic nan with "F-statistic not available"

Version 0.0.10

  • Increased default max_width from 64 to 80

Version 0.0.9

  • Added support for list of linearmodels.panel.result.PanelEffectsresult results

Version 0.0.8

  • Added support for 'arch.univariate.base.ARCHModelResult'
  • Simplified and extended calculate_residuals_statistics()
  • Added covariance type and fixed effects table to linearmodels.panel.result.PanelEffectsresult print result
  • Moved default values to function definitions
  • Updated required install to pandas only
  • Added support for arch.univariate.base.ARCHModelResult

Version 0.0.7

  • Moved type checks to functions and globals
  • Removed unnecessary whitespace from model formula
  • Introduced max_width with default to 64 characters

Version 0.0.6

  • Introduced check if 't' column is present, otherwise use 'z' column to handle models with only one coefficient

Version 0.0.5

  • Replaced explicit options by flexible **options parameter
  • Supported classes: statsmodels.regression.linear_model.RegressionResultsWrapper and linearmodels.panel.result.PanelEffectsresult
  • Introduced ALLOWED_OPTIONS global

Version 0.0.4

  • First working version with statsmodels support

Metadata

Release files for regtabletotext 0.0.12

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for regtabletotext 0.0.12
File Size Uploaded
regtabletotext-0.0.12.tar.gz 2.2 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for regtabletotext 0.0.12
File Interpreter ABI Platform
regtabletotext-0.0.12-py3-none-any.whl Python 3 none any Details

Total release size: 2.2 MB

Release files / regtabletotext-0.0.12.tar.gz

Download URL regtabletotext-0.0.12.tar.gz
Size 2.2 MB
Tags Source
SHA-256 checksum
How to use checksums
e02268ef40c7a00d790c11f7fb18be9ca5b232fe57b599b59b60883baadba0f0
BLAKE2b-256 checksum
How to use checksums
81b3e84a07cd8182494d34fe24a9fc254fdc9578aba48f83db4199445b376fd7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.13

Release files / regtabletotext-0.0.12-py3-none-any.whl

Download URL regtabletotext-0.0.12-py3-none-any.whl
Size 9.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b6f7ef3c2101cd4b2d150eada5de599f4f8764ac5e03224f11b64b46f432d44e
BLAKE2b-256 checksum
How to use checksums
75138bbc22000d1b46553220fea0ff27b36cbbfdb9306fe6d40251e5e313cf71
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.13

Release history Release notifications | RSS feed

This release

0.0.12 This release

2 release files

0.0.11

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page