Skip to main content

Helpers to print regression output as well-formated text

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

regtabletotext-0.0.12.tar.gz (2.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

regtabletotext-0.0.12-py3-none-any.whl (9.9 kB view details)

Uploaded Python 3

File details

Details for the file regtabletotext-0.0.12.tar.gz.

File metadata

  • Download URL: regtabletotext-0.0.12.tar.gz
  • Upload date:
  • Size: 2.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.13

File hashes

Hashes for regtabletotext-0.0.12.tar.gz
Algorithm Hash digest
SHA256 e02268ef40c7a00d790c11f7fb18be9ca5b232fe57b599b59b60883baadba0f0
MD5 3e527c8898db6aff144b08926410aa18
BLAKE2b-256 81b3e84a07cd8182494d34fe24a9fc254fdc9578aba48f83db4199445b376fd7

See more details on using hashes here.

File details

Details for the file regtabletotext-0.0.12-py3-none-any.whl.

File metadata

File hashes

Hashes for regtabletotext-0.0.12-py3-none-any.whl
Algorithm Hash digest
SHA256 b6f7ef3c2101cd4b2d150eada5de599f4f8764ac5e03224f11b64b46f432d44e
MD5 ff26d10456204226ff40975f71569c6e
BLAKE2b-256 75138bbc22000d1b46553220fea0ff27b36cbbfdb9306fe6d40251e5e313cf71

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page